A question about peak detection for a transient (17ms) CW beep on channelized chunks (0.3 sec chunks) from a SDR.
My current approach is to get the Power Spectral Density of each chunk and use pythons find_peaks to select the 20 strongest peaks and then submit those channels data to a separate method for further processing.
With this approach if there happens to be any interference, or constant unwanted signals in the spectrum they are often detected as peaks in find_peaks and submitted to the method for further processing - usually the results from the further processing are discarded as they don't confirm to expected data - but wouldn't it be better not to process the rubbish at all?
Would it be better to channelise the data, track a average noise floor over 2-3 chunks and determine if there are any peaks over the noise floor * a constant over 1?
I also wonder how expensive this operation would be on 1024 channels? Especially if I end up doing a convolve on each channel before threshold detection?
I am worried about this expense because my target platform ultimately will be a Rpi5. Maybe I dont need to do the convolve before the threshole detection?
Hi BigAL, I would reply but I replied to your previous post about 3 weeks ago and you didn't respond
Hi Jeff,
Sorry for the lack of reply - I do appreciate your input. I am using a Rpi as this system will be deployed in bush, so keeping the power low is important.
Throwing more CPU at the problem would also be a last resort.
Hi BigAl, ok ... some stiff constraints. What is your power consumption target and what clock rate are you running ?
-Jeff
Is the frequency of the CW constant? If so, you can filter out interferers that are different frequency. Is the CW transmission periodic? Is so you can filter out interferers that occur outside of the CW transmission time.
Otherwise the same responses to your previous question should hold unless there's a difference you haven't mentioned.
There can be multiple CW beeps on any channel.
The period varies between one beep every 0.8s to o e every 3s
Hope that helps.
What is the bandwidth of a "channel"? Can the CW be on any frequency or only certain frequencies? If the CWs can be identified by frequency, then you can isolate interferers that aren't on those frequencies.
There are lots of things that can be done. You got some good responses on your other question that should also apply here. Exploiting the behavior of the transmitters goes a long ways toward being able to isolate them from interferers, so I'd suggest using those characteristics to make a plan.
Sorry it feels like you are having to tease information out of me.
There are 100 channels evenly spaced between 160.110Mhz and 161.120Mhz.
In theory Channel1 would be 160.120Mhz but over time they drift up or down, so 160.120 could be as low as 160.115 or as high as 160.225 (they never go up or down more than this) and the transmitters come and go in and out of range, and I want to process multiple transmitter signals at once.
The actual CW beep itself is very narrow. I haven't measured it to be honest, but I think a few 10s of Hz.
I will see if I can get a spectrogram plot here and post it. FWIW the more I think about the thought of a convolve on all 1024 channels, the more expensive it is sounding - and perhaps beyond a Rpi5 in realtime for multiple channels.