Skip to main content
Added image of final output to show results after last state has passed.
Source Link
user105652
user105652

This is the final output of my program. Some out-of-band noise is shown, as it looks odd to see the image with no noise at all. Low frequency noise is likely wind blowing into microphone. High frequency noise is people talking not far away. A single bark from a large dog has substantial output at about 400 HZ and 770 HZ. enter image description here

This is the final output of my program. Some out-of-band noise is shown, as it looks odd to see the image with no noise at all. Low frequency noise is likely wind blowing into microphone. High frequency noise is people talking not far away. A single bark from a large dog has substantial output at about 400 HZ and 770 HZ. enter image description here

Added Excel sheet image showing State Chart
Source Link
user105652
user105652

It is better understood if the FSM is given a simple task to do, which can be done only in a specific order. An example I did with LabView was to take sound samples of a dog barking. I used Audacity to capture the sound and store as .wav files which LabView can open as an array of floating point samples.

I needed to convert them to simple envelope shapes equal to the width of the bark, so a large dog has a bark about 250 mS in width with a 250 mS to 500 mS gap between barks. Yes, I was building a bark detector. So I wind up with 12 seconds of raw audio with 11 "bark" samples. Now the information I want has to be extracted. If no error flag sequence continues until done. An error flag stops program because downstream stages do not have valid data to work with.

  1. Do samples at 44.1 KHZ, 16 bits wide, repeat until 10 or so clean samples or time-out to abort. Set error flag.

  2. Load raw waveform buffer with lightly filtered samples, a simple FIR filter. If no samples set error flag.

  3. Use noise gate to remove residual and background noise so baseline is clean. If no input or out put set error flag.

  4. Isolate 1 bark sample as a 250 mS burst of various frequencies if above minimum threshold. If no output set error flag.

  5. Use IIR to create 91 samples that rise with frequency content. Close but not yet done. If no output set error flag.

  6. Extract spectral density spikes then use noise gate to limit to strong samples. Use 22 point FIR to blur spikes into lumps. 2 lumps in frequency per bark. 1 at 350 HZ to 450 HZ, another lump at 650 HZ to 900 HZ. If no output set error flag, else program is done.

All of this to show me how dog barks go up and down in pitch a great deal, and of course vary in spacing, indicating how aggressive the barking is.

Each of these steps must be in the right sequence. Each step can only pass or fail. If it fails an option of a retry is possible or the program aborts. If it passes then it goes to the next step/state. So each of 6 states can pass and go to the next state, or loop and retry until a time-out occurs. It could be programmed to start at state 0, but that makes sense only if state 0 failed. Logically it could back up to any previous state and try again. It CANNOT skip states or run them out of order, or you will not get the expected output, if any at all.

You are correct in that the book is confusing. It assumes each state can return to a previous state, but other than looping to retry a task, errors flags often force a return to state 0. Looping back from state 5 to state 3 implies that state 3 can be reset, its data and status buffer cleared for another try, and a master retry counter allows only so many retry's before it stops the program. Remember that with advanced programs each state may have its own data and status buffers, so it takes extra code to go back several states as a retry option. For the same reason that "wait" loops have a time out.

If important I can do screen-captures and post them in this answer. They are in HDTV format which I will need to convert to jpg. enter image description here

It is better understood if the FSM is given a simple task to do, which can be done only in a specific order. An example I did with LabView was to take sound samples of a dog barking. I used Audacity to capture the sound and store as .wav files which LabView can open as an array of floating point samples.

I needed to convert them to simple envelope shapes equal to the width of the bark, so a large dog has a bark about 250 mS in width with a 250 mS to 500 mS gap between barks. Yes, I was building a bark detector. So I wind up with 12 seconds of raw audio with 11 "bark" samples. Now the information I want has to be extracted. If no error flag sequence continues until done. An error flag stops program because downstream stages do not have valid data to work with.

  1. Do samples at 44.1 KHZ, 16 bits wide, repeat until 10 or so clean samples or time-out to abort. Set error flag.

  2. Load raw waveform buffer with lightly filtered samples, a simple FIR filter. If no samples set error flag.

  3. Use noise gate to remove residual and background noise so baseline is clean. If no input or out put set error flag.

  4. Isolate 1 bark sample as a 250 mS burst of various frequencies if above minimum threshold. If no output set error flag.

  5. Use IIR to create 91 samples that rise with frequency content. Close but not yet done. If no output set error flag.

  6. Extract spectral density spikes then use noise gate to limit to strong samples. Use 22 point FIR to blur spikes into lumps. 2 lumps in frequency per bark. 1 at 350 HZ to 450 HZ, another lump at 650 HZ to 900 HZ. If no output set error flag, else program is done.

All of this to show me how dog barks go up and down in pitch a great deal, and of course vary in spacing, indicating how aggressive the barking is.

Each of these steps must be in the right sequence. Each step can only pass or fail. If it fails an option of a retry is possible or the program aborts. If it passes then it goes to the next step/state. So each of 6 states can pass and go to the next state, or loop and retry until a time-out occurs. It could be programmed to start at state 0, but that makes sense only if state 0 failed. Logically it could back up to any previous state and try again. It CANNOT skip states or run them out of order, or you will not get the expected output, if any at all.

You are correct in that the book is confusing. It assumes each state can return to a previous state, but other than looping to retry a task, errors flags often force a return to state 0. Looping back from state 5 to state 3 implies that state 3 can be reset, its data and status buffer cleared for another try, and a master retry counter allows only so many retry's before it stops the program. Remember that with advanced programs each state may have its own data and status buffers, so it takes extra code to go back several states as a retry option. For the same reason that "wait" loops have a time out.

If important I can do screen-captures and post them in this answer. They are in HDTV format which I will need to convert to jpg.

It is better understood if the FSM is given a simple task to do, which can be done only in a specific order. An example I did with LabView was to take sound samples of a dog barking. I used Audacity to capture the sound and store as .wav files which LabView can open as an array of floating point samples.

I needed to convert them to simple envelope shapes equal to the width of the bark, so a large dog has a bark about 250 mS in width with a 250 mS to 500 mS gap between barks. Yes, I was building a bark detector. So I wind up with 12 seconds of raw audio with 11 "bark" samples. Now the information I want has to be extracted. If no error flag sequence continues until done. An error flag stops program because downstream stages do not have valid data to work with.

  1. Do samples at 44.1 KHZ, 16 bits wide, repeat until 10 or so clean samples or time-out to abort. Set error flag.

  2. Load raw waveform buffer with lightly filtered samples, a simple FIR filter. If no samples set error flag.

  3. Use noise gate to remove residual and background noise so baseline is clean. If no input or out put set error flag.

  4. Isolate 1 bark sample as a 250 mS burst of various frequencies if above minimum threshold. If no output set error flag.

  5. Use IIR to create 91 samples that rise with frequency content. Close but not yet done. If no output set error flag.

  6. Extract spectral density spikes then use noise gate to limit to strong samples. Use 22 point FIR to blur spikes into lumps. 2 lumps in frequency per bark. 1 at 350 HZ to 450 HZ, another lump at 650 HZ to 900 HZ. If no output set error flag, else program is done.

All of this to show me how dog barks go up and down in pitch a great deal, and of course vary in spacing, indicating how aggressive the barking is.

Each of these steps must be in the right sequence. Each step can only pass or fail. If it fails an option of a retry is possible or the program aborts. If it passes then it goes to the next step/state. So each of 6 states can pass and go to the next state, or loop and retry until a time-out occurs. It could be programmed to start at state 0, but that makes sense only if state 0 failed. Logically it could back up to any previous state and try again. It CANNOT skip states or run them out of order, or you will not get the expected output, if any at all.

You are correct in that the book is confusing. It assumes each state can return to a previous state, but other than looping to retry a task, errors flags often force a return to state 0. Looping back from state 5 to state 3 implies that state 3 can be reset, its data and status buffer cleared for another try, and a master retry counter allows only so many retry's before it stops the program. Remember that with advanced programs each state may have its own data and status buffers, so it takes extra code to go back several states as a retry option. For the same reason that "wait" loops have a time out.

If important I can do screen-captures and post them in this answer. They are in HDTV format which I will need to convert to jpg. enter image description here

Added next to last paragraph.
Source Link
user105652
user105652

It is better understood if the FSM is given a simple task to do, which can be done only in a specific order. An example I did with LabView was to take sound samples of a dog barking. I used Audacity to capture the sound and store as .wav files which LabView can open as an array of floating point samples.

I needed to convert them to simple envelope shapes equal to the width of the bark, so a large dog has a bark about 250 mS in width with a 250 mS to 500 mS gap between barks. Yes, I was building a bark detector. So I wind up with 12 seconds of raw audio with 11 "bark" samples. Now the information I want has to be extracted. If no error flag sequence continues until done. An error flag stops program because downstream stages do not have valid data to work with.

  1. Do samples at 44.1 KHZ, 16 bits wide, repeat until 10 or so clean samples or time-out to abort. Set error flag.

  2. Load raw waveform buffer with lightly filtered samples, a simple FIR filter. If no samples set error flag.

  3. Use noise gate to remove residual and background noise so baseline is clean. If no input or out put set error flag.

  4. Isolate 1 bark sample as a 250 mS burst of various frequencies if above minimum threshold. If no output set error flag.

  5. Use 91 HZ IIR to create 91 samples that rise with frequency content. Close but not yet done. If no output set error flag.

  6. Extract spectral density spikes then use noise gate to limit to strong samples. Use 22 point FIR to blur spikes into lumps. 2 lumps in frequency per bark. 1 at 350 HZ to 450 HZ, another lump at 650 HZ to 900 HZ. If no output set error flag, else program is done.

All of this to show me how dog barks go up and down in pitch a great deal, and of course vary in spacing, indicating how aggressive the barking is.

Each of these steps must be in the right sequence. Each step can only pass or fail. If it fails an option of a retry is possible or the program aborts. If it passes then it goes to the next step/state. So each of 6 states can pass and go to the next state, or loop and retry until a time-out occurs. It could be programmed to start at state 0, but that makes sense only if state 0 failed. Logically it could back up to any previous state and try again. It CANNOT skip states or run them out of order, or you will not get the expected output, if any at all.

You are correct in that the book is confusing. It assumes each state can return to a previous state, but other than looping to retry a task, errors flags often force a return to state 0. Looping back from state 5 to state 3 implies that state 3 can be reset, its data and status buffer cleared for another try, and a master retry counter allows only so many retry's before it stops the program. Remember that with advanced programs each state may have its own data and status buffers, so it takes extra code to go back several states as a retry option. For the same reason that "wait" loops have a time out.

If important I can do screen-captures and post them in this answer. They are in HDTV format which I will need to convert to jpg.

It is better understood if the FSM is given a simple task to do, which can be done only in a specific order. An example I did with LabView was to take sound samples of a dog barking. I used Audacity to capture the sound and store as .wav files which LabView can open as an array of floating point samples.

I needed to convert them to simple envelope shapes equal to the width of the bark, so a large dog has a bark about 250 mS in width with a 250 mS to 500 mS gap between barks. Yes, I was building a bark detector. So I wind up with 12 seconds of raw audio with 11 "bark" samples. Now the information I want has to be extracted. If no error flag sequence continues until done. An error flag stops program because downstream stages do not have valid data to work with.

  1. Do samples at 44.1 KHZ, 16 bits wide, repeat until 10 or so clean samples or time-out to abort. Set error flag.

  2. Load raw waveform buffer with lightly filtered samples, a simple FIR filter. If no samples set error flag.

  3. Use noise gate to remove residual and background noise so baseline is clean. If no input or out put set error flag.

  4. Isolate 1 bark sample as a 250 mS burst of various frequencies if above minimum threshold. If no output set error flag.

  5. Use 91 HZ IIR to create 91 samples that rise with frequency content. Close but not yet done. If no output set error flag.

  6. Extract spectral density spikes then use noise gate to limit to strong samples. Use 22 point FIR to blur spikes into lumps. 2 lumps in frequency per bark. 1 at 350 HZ to 450 HZ, another lump at 650 HZ to 900 HZ. If no output set error flag, else program is done.

All of this to show me how dog barks go up and down in pitch a great deal, and of course vary in spacing, indicating how aggressive the barking is.

Each of these steps must be in the right sequence. Each step can only pass or fail. If it fails an option of a retry is possible or the program aborts. If it passes then it goes to the next step/state. So each of 6 states can pass and go to the next state, or loop and retry until a time-out occurs. It could be programmed to start at state 0, but that makes sense only if state 0 failed. Logically it could back up to any previous state and try again. It CANNOT skip states or run them out of order, or you will not get the expected output, if any at all.

If important I can do screen-captures and post them in this answer. They are in HDTV format which I will need to convert to jpg.

It is better understood if the FSM is given a simple task to do, which can be done only in a specific order. An example I did with LabView was to take sound samples of a dog barking. I used Audacity to capture the sound and store as .wav files which LabView can open as an array of floating point samples.

I needed to convert them to simple envelope shapes equal to the width of the bark, so a large dog has a bark about 250 mS in width with a 250 mS to 500 mS gap between barks. Yes, I was building a bark detector. So I wind up with 12 seconds of raw audio with 11 "bark" samples. Now the information I want has to be extracted. If no error flag sequence continues until done. An error flag stops program because downstream stages do not have valid data to work with.

  1. Do samples at 44.1 KHZ, 16 bits wide, repeat until 10 or so clean samples or time-out to abort. Set error flag.

  2. Load raw waveform buffer with lightly filtered samples, a simple FIR filter. If no samples set error flag.

  3. Use noise gate to remove residual and background noise so baseline is clean. If no input or out put set error flag.

  4. Isolate 1 bark sample as a 250 mS burst of various frequencies if above minimum threshold. If no output set error flag.

  5. Use IIR to create 91 samples that rise with frequency content. Close but not yet done. If no output set error flag.

  6. Extract spectral density spikes then use noise gate to limit to strong samples. Use 22 point FIR to blur spikes into lumps. 2 lumps in frequency per bark. 1 at 350 HZ to 450 HZ, another lump at 650 HZ to 900 HZ. If no output set error flag, else program is done.

All of this to show me how dog barks go up and down in pitch a great deal, and of course vary in spacing, indicating how aggressive the barking is.

Each of these steps must be in the right sequence. Each step can only pass or fail. If it fails an option of a retry is possible or the program aborts. If it passes then it goes to the next step/state. So each of 6 states can pass and go to the next state, or loop and retry until a time-out occurs. It could be programmed to start at state 0, but that makes sense only if state 0 failed. Logically it could back up to any previous state and try again. It CANNOT skip states or run them out of order, or you will not get the expected output, if any at all.

You are correct in that the book is confusing. It assumes each state can return to a previous state, but other than looping to retry a task, errors flags often force a return to state 0. Looping back from state 5 to state 3 implies that state 3 can be reset, its data and status buffer cleared for another try, and a master retry counter allows only so many retry's before it stops the program. Remember that with advanced programs each state may have its own data and status buffers, so it takes extra code to go back several states as a retry option. For the same reason that "wait" loops have a time out.

If important I can do screen-captures and post them in this answer. They are in HDTV format which I will need to convert to jpg.

Source Link
user105652
user105652
Loading