I am hoping that somebody might have a good idea for detecting low-frequency pulses in some rather noisy data (I'm working on improving the snr). I have repurposed a "Raspberry Shake 1D" to record the vibrations made by an adult filaria just below the skin and using a lowpass filter I was able to collect the following as a proof of concept to see if this was even possible. It seems to work.
The issue here is I don't get any feedback from the device when it is attached and I need to download the stored data later as a "miniseed" file. The device is, however, able to send UDP packets in real-time and I would like to attach a display for a live picture of the noise filtered data. If possible I would like to add a pulse detection algorithm of some kind to make it more obvious when a distinct pulse of the appropriate frequency range, attack, and decay of this pulse is within some basic heuristic bounds.
I could take a deep learning approach but for that, I would need lots of tagged data that has not been collected yet. I am hoping for some form of fft like algorithm just to give me enough real-time feedback while placing the device to better collect my data.
What is being detected (shown in the graph) is a small subsonic vibration where the data leading into that waveform is the background ambient noise level, then the oscillations ramp up and back down, then the background level noise again as the graph ends. I think the frequency here is about 4Hz but that will likely vary, as well as the amplitude, so from the detection level, I may need something like what a PLL lock indicator circuit would do if this were a hardware problem, but then this is not a nice sine wave either. I have not done anything like this in software so I am not familiar with what software techniques might even be possible.
What I am envisioning is a python program receiving UDP packets, passing that data through a low-pass filter, then through some kind of FFT processing to find something near the center (4Hz?) frequency range, and the output from that to produce both my real-time graph and some indicator (noise or color change on the display) that the waveform's desired frequency and amplitude are present. It would need to ignore a signal over some specific amplitude, but I'll cross that bridge when I get something that mostly works. I have done this with the static recorded data, and visually identified the event, but I have no clue how to do this from live data in realtime.
btw - The note on "filaria" was only for context, so you could see the problem you are helping to solve, but it is not really important for this discussion. But since someone asked, it's an investigation of parasitic worm one acquires through being bitten by an infected insect, for which there is no diagnostic test in humans for the disease, no disease-specific symptoms, and no known cure for the disease. I'm trying to research a total enigma and these very minute vibrations are just one general property of the disease being investigated.