0
$\begingroup$

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.

https://raspberryshake.org/products/raspberry-shake-1d/

figure of filtered data

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.

Any thoughts?

Edit1:

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.

$\endgroup$
  • $\begingroup$ OK, what is an "adult filaria", below whose/what skin? Also, would it be possible to indicate which bit of the waveform is the "pulse"? I suspect that it is this whole "spindle", which is a byproduct of the sensor's tuning frequency, but please clarify, just to be sure. $\endgroup$ – A_A Feb 25 at 8:15
0
$\begingroup$

Very interesting problem.

Your pulse locations can be found by using a sliding window RMS measurement. Once found, I would recommend centering a DFT frame on the pulse and applying a VonHann window (broadens narrow peaks and narrows broad peaks), then take the FFT. Looking at the data, you should get a pretty distinct and clear profile.

Your backgound noise may contain some small peaks too, so you may want to analyze a few "quiet periods" to determine what they are so you can discount them in your evaluation.

Precise frequency determination shouldn't be necessary (or even possible) so a simple estimator, like Jacobsen's or MacLeod's, should suffice.

Like wise, a rough amplitude estimate should also be adequate for each peak. (See my answer here for phase and amplitude estimation: FFT Phase interpretation of input signal with non-integer number of cycles in FFT window) Don't use the window if you are going to calculate these.

If you know the frequencies ahead of time (or want to do it twice), selecting a DFT bin that has your frequencies near bins will improve these estimation methods considerably.

| improve this answer | |
$\endgroup$
  • $\begingroup$ Looks like I have some reading to do. Thanks! $\endgroup$ – slcoleman Mar 3 at 19:01

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.