1

I need to detect a short (10ms) VHF pulse that occurs every 1.5s at a specific frequency (e.g., 150.20 MHz).

I have an SDR that support IQ sample rates up to 10MSPS but due to computing constraints 2.5MSPS is probably the max I can handle (currently working with 1 MSPS with 150 MHz as the central frequency).

I am new to DSP and started simple: Collect 500ms of samples, do a standard DFT using python's mlab.magnitude_spectrum(), throw away everything under an empirically defined threshold, followed by a simple peak finding routine. Then repeat with the next 500ms.

That works quite well but as the pulse strength drops (move away from the pulse source) this fails to find anything.

I have searched around a bit on how to tackle this and come across suggestions around measuring kurtosis, averaging spectra, autocorrelation, etc. If anything averaging seemed to make things worse but given I'm new to the area some guidance would be appreciated as to how to best tackle this as well as a good way to set the threshold. Is there something in the time domain I can do? Python (pseudo) code would be a plus.

Peter K.
  • 25,714
  • 9
  • 46
  • 91
dgorissen
  • 111
  • 2
  • There is a tutorial video, on ettus.com if I'm not mistaken, that shows how to use autocorrelation to detect a repetitive signal out of the noise. The tool used in the video is GNURadio. I hope this helps. – MBaz Oct 23 '15 at 17:46
  • Your use of the DFT sounds reasonable to me. However, you're trying to detect a 150.2 MHz analog sinusoid while sampling at only one megasample/second. This is, as conehead Beldar would say, "a massive amount of undersampling." That troubles me because after periodic sampling all of the spectral energy in your analog signal folds back onto itself to be contained in a one Mhz bandwidth of your sampled sequence. @dgorissen, what is the bandwidth of the analog signal you are sampling at a rate of 1 megasamples/second? – Richard Lyons Oct 23 '15 at 18:54
  • @RichardLyons edited question. The central frequency of the sdr is set to 150 MHz so that means I just need to resolve 200khz for which 1 MSPS is enough. At least thats my understanding? – dgorissen Oct 23 '15 at 19:09
  • @dgorissen: Ah OK. I should have paid more attention when you wrote "supports IQ sample rate." I'll bet you're correct. Is your SDR an "RTL-SDR"? – Richard Lyons Oct 23 '15 at 22:01
  • @dgorissen: As for when your input signal strength drops, spectral averaging should have been helpful. Perhaps performing larger-sized DFTs will help. And perhaps a "matched filter" would be useful. For matched filters, you might have a look at: http://dsp.stackexchange.com/questions/9094/understanding-matched-filter. – Richard Lyons Oct 23 '15 at 23:32
  • I could provide a solution. I do not know how much you could define the existence of the pulse in the time domain. With regard to the DFT of the 500ms for 10ms pulse length, reduces your S/N ratio by 17db (or 34). You could use short DFTs on 6.4ms, 64 DFT. If you know the frequency you are looking for you could calculate only 5 to 10 frequency bins around the desired frequency. You could add antialiasing filter before digitizing. – Moti Oct 24 '15 at 23:26
  • @RichardLyons using an rtl-sdr yes, though also have something more capable. Thanks for the tip on the matched filter, will look into it but feel somewhat out of my depth. – dgorissen Oct 25 '15 at 23:21
  • @Moti Thanks for the comments. For my understanding, can you elaborate how you arrive at the the 17db and 6.4 numbers? So I should do 64 DFTs on 6.4ms each and then average (?) and then use Goertzel's algorithm to pick out the 5-10 freq's of choice? Also can you elaborate a bit more on the antialiasing filter. Should I be looking into decimation? Will that work on the IQ samples? – dgorissen Oct 25 '15 at 23:21
  • Your signal duration is 10ms and you collect 500ms, which means that the signal to noise ration just from this type of collection is 1/50 - this is -17db. YOU ARE NOT AVERAGING! For each 6.4ms or 64 samples (Assuming sample rate of 1 MHz), you will hit at a rate of 6.4/1500 a period that includes the distinctive (I assume) pulse. Collection of 6.4 ms provides you with a frequency resolution of about 300 Hz. If you use a band pass analog filter before the A/D with center at the 150.2 Mhz and a width 40KHz, I believe you could get nice detection. – Moti Oct 27 '15 at 02:19
  • @dgorissen did you ever get this working? I'm looking to do a very similar thing and wonder if you have any code you could share? – clifgray Jun 24 '18 at 19:46

0 Answers0