Hi Dirk, in my experience SDR is a nice stuff but sometimes analog tech can help: try to lower total NF using a tuned LNA in front of you receiver... RTL dongles or other sampler are a bit deaf and noisy, and your signal seems very feeble.
... my 2 eurocent... ! Victor 2017-02-10 0:01 GMT+01:00 Dirk Gorissen <dgoris...@gmail.com>: > Hi Marcus, > > Thanks again. And yes, Id be happy to do a writeup if I get things > working with GnuRadio. I did a writeup of the first version I did of > my project (*) and happy to do a part two of the improved version when > finished (asap). Replies inline. > > >Well, if you have a let's say 2 kHz uncertainty in the frequency of your > pulse, I'd really start very simple. Looking at your plots, I think we can > sufficiently suppress the noise simply by low-pass filtering: > > Just note that the plots are posted are with the transmitter pretty > much sitting next to the antenna so this is a *very* strong signal, in > reality its much weaker. > > >* Use a Low Pass filter (real taps) with a cutoff of 1 kHz – that will > let everything from -1 kHz to +1 kHz around your center frequency through. > You can use the "freq xlating FIR" block to first shift by a given > frequency and >then apply the filter; might make things easier. > >* Detect power by putting your complex samples through a complex mag^2 > block. > > Thanks. I did this and the following observations > - I went SDR -> Freq Xlating FIR filter with 4x decimation -> low pass > filter block with 128x decimation and 1khz cutoff -> complex to mag2 > > - The Freq Xlating block was giving me an error unless I filled in > something for the Tap, some googleing led me to fill in > firdes.low_pass_2 and I just used the same filter settings as the > filter block. That made it happy but to be honest Im not sure why and > if that was the right thing to do. > > - I did the decimation somewhat arbitrarily in two steps as I read > somewhere that is better computationally, perhaps it should be more > even though > > - With the above I could see the peaks (yay!) but it gets harder as > the signal gets weaker. I plugged in the peak detector block (peak > detector 2 seems broken btw) but found its usage very unintuitive and > I didnt get it to mark the peaks in the way I wanted. Even though they > were pretty big it wouldn't catch many of them, but perhaps its a > plotting refresh rate thing. Its not clear to me over what window the > average is taken (I was expecting that as an option). > > - Also, Im not 100% sure what sample rate I should be setting (or how > to count number of samples (e.g., peak look ahead)) in blocks that are > downstream from decimation. If the source sample rate is 1msps, and I > have decimated by 4x, say, that means I have 4x less samples coming > through per second so I should be setting 0.250msps as the sample rate > in downstream blocks (filters, display, fft, ...) right? > > >If the output of that looks somewhat OK, then you could e.g. low-pass > filter the result to get rid of noise pulses that are too short, for > example :) > > Ok, so low-pass filter the real valued mag^2 values. I tried this but > was not obvious how to choose the right cutoff frequency & transition > width other than just trial and error. Also, as the signal gets weaker > the peaks get narrower. > > I still feel like I should be cross correlating with the known signal, > or some kind of matched filter setup, or exploiting the regularity of > the pulse somehow to give me more sensitivity, but unsure how best to > proceed there. I stumbled across a post about the correlate_and_sync > block. That seemed somewhat similar to my problem (though I guess I > have no preamble) but raised more questions than it solved. > > >By the way, it might be cool to put up a short recording (ie. a file > generated using the GNU Radio file sink) somewhere (zipped, e.g. on Google > Drive). I haven't worked with that myself, but maybe putting it on > >SigIDwiki[1] might be beneficial for people encountering the wildlife > tracker signal later on. > > Good idea. I quickly captured a file with raw IQ samples (File sink) > in case anybody is interested. It starts with the transmitter very > close to antenna, moves progressively further until out of range and > then back. Its only about a minute or two tops but at 1msps it ended > up as 813 MB though. > > https://drive.google.com/drive/folders/0B5dKo9igl8W4dWpiMmlEYWx3b0k? > usp=sharing > > >We surely could use a few more "oh, GNU Radio is awesome because it works > for everyone" articles (like [2]), but what we far more severely lack is > stories of people that actually made progress, but also struggled, > >because they didn't know GR for years before writing a blog post. One of > the problems that we face (and that was a very prominent theme at the Panel > at FOSDEM [3]) is that we don't really know how to help people > >that are just approaching GNU Radio, and aren't already familiar with a > lot of the stuff that we've gotten used to. > > Happy to do that. Generally I have found companion very robust and > works well. I love the python export/integration. Im just slightly > concerned about performance on a low spec machine but Ill cross that > bridge when I get to it. Main thing for me is that I find many > explanations for blocks very concise and without enough radio > background you feel a bit lost as to what exactly to use when or what > the options mean. Also, silly question but I am still confused as to > what a "tap" is. I googled around the docs hoping to find a page "what > is a tap" but failed. > > Thanks for the links. > > Many thanks again, > > Dirk > > > (*) https://dirkgorissen.com/2016/04/19/wheres-susi-airborne- > orangutan-tracking-with-python-and-react-js/ > > On 7 February 2017 at 14:22, Marcus Müller <marcus.muel...@ettus.com> > wrote: > > Hi Dirk, > > > > Well, if you have a let's say 2 kHz uncertainty in the frequency of your > > pulse, I'd really start very simple. Looking at your plots, I think we > can > > sufficiently suppress the noise simply by low-pass filtering: > > > > * Use a Low Pass filter (real taps) with a cutoff of 1 kHz – that will > let > > everything from -1 kHz to +1 kHz around your center frequency through. > You > > can use the "freq xlating FIR" block to first shift by a given frequency > and > > then apply the filter; might make things easier. > > * Detect power by putting your complex samples through a complex mag^2 > > block. > > > > If the output of that looks somewhat OK, then you could e.g. low-pass > filter > > the result to get rid of noise pulses that are too short, for example :) > > > > By the way, it might be cool to put up a short recording (ie. a file > > generated using the GNU Radio file sink) somewhere (zipped, e.g. on > Google > > Drive). I haven't worked with that myself, but maybe putting it on > > SigIDwiki[1] might be beneficial for people encountering the wildlife > > tracker signal later on. > > > > I actually think your project is pretty cool – short warning: if this > works > > out, I'll try to convince you to write a short article for the GNU Radio > > blog! > > I'd imagine it being about how you approached the problem and what you've > > found, with emphasis on all the problems you had because of GNU Radio and > > maybe also DSP. We surely could use a few more "oh, GNU Radio is awesome > > because it works for everyone" articles (like [2]), but what we far more > > severely lack is stories of people that actually made progress, but also > > struggled, because they didn't know GR for years before writing a blog > post. > > One of the problems that we face (and that was a very prominent theme at > the > > Panel at FOSDEM [3]) is that we don't really know how to help people that > > are just approaching GNU Radio, and aren't already familiar with a lot of > > the stuff that we've gotten used to. > > > > Happy tracking, > > > > Marcus > > > > [1] http://www.sigidwiki.com/wiki/Adding_a_Signal_Entry > > [2] > > http://gnuradio.org/blog/filtering-time-series-data__ > elemental-building-blocks/ > > [3] https://fosdem.org/2017/schedule/event/sdr_panel/ ; don't know – > maybe > > we'll have recordings of that. > > > > > > On 02/06/2017 09:39 PM, Dirk Gorissen wrote: > > > > Thanks Marcus & Martin for the responses. > > > > To clarify, Im working on a wildlife tracking problem but from the air > > (drone). Im purely interested in finding out if the pulse (which gets > > transmitted at a fixed interval of 1500ms) occurred or not. If it did, I > > know Im within some range of the animal of interest. I have no control > over > > the transmitter and no further technical details (unfortunately). I did > take > > some screenshots to give you an idea what it looks like: > > > > https://goo.gl/photos/Y3Ea6kJo1ewrcDYM8 (taken with tx at close range > to > > static antenna) > > > > I expect quite a bit of (fairly uniform) background noise from other > > electronics to deal with and there are hardware things that can be > improved. > > But for the purposes of this thread I want to ensure Im doing the right > > things on the DSP side. > > > > And yes, Im pretty much a DSP novice but happy to learn. So be gentle :) > > > >>So, my understanding is that your SDR device first downconverts your > 150.22 > >>MHz signal to complex baseband, is that right? > > > > Yes, so think something like an rtlsdr or airspy. > > > > About the FFT question, thanks I got a bit confused. I now understand > that > > if I want FFT over a longer timeframe I should just take a larger size > and I > > can vary the sampling rate (e.g., via decimation) to get the resolution > (Hz > > per bin) I require. > > > > Im now wondering if there is a founded way to pick an optimal FFT size > given > > my pulse is only 10ms long. Im guessing it should not be much longer than > > the 10ms equivalent but maybe there is a noise tradeoff (?). > > > > In any case I agree this is a time based phenomenon so a time domain > > approach should likely be the main one. > > > > So it seems I should at least be trying an FIR filter to do cross > > correlation. Not quite clear how I would actually do that in practise > with > > the gr block though. How would I provide the second input (the synthetic > > pulse)? > > > > I have come across matched filters before but so far failed to bridge the > > gap from theory to code. This is partly the reason I came to gnuradio. > > > >>You can implement a limited-length autocorrelation/crosscorrelation > >> relatively > >>easily; we can talk about how that would look like, but my gut feeling is > >> that this > >>might be something that might not make too much sense in your specific > use > >>case. > > > > Not too sure myself tbh, but happy to take your lead. > > > >>it's possible cyclostationary estimation methods might be helpful here. > > > > So I googled this and poked around a bit on https://cyclostationary.blog > . > > Looks really interesting but out of my depth here.. > > > > Thanks for the tip on gr-fosphor. > > > > Cheers > > Dirk > > > > On 5 February 2017 at 12:06, Marcus Müller <marcus.muel...@ettus.com> > wrote: > >> > >> Hi Dirk, > >> > >> nice to have you around, welcome to GNU Radio! I don't know your level > of > >> DSP knowledge, so please excuse if I either throw too many high-level > >> concepts at you or assume you could want to read up on something that > you > >> already know. If something in my reply is unclear, please don't > hesitate to > >> ask for clarification. > >> > >> So, my understanding is that your SDR device first downconverts your > >> 150.22 MHz signal to complex baseband, is that right? > >> > >> So, what is the objective here? You say you need to /detect/ the pulse, > >> but for what purpose? Is it just about detecting the presence of the > pulse, > >> or is it used for eg. time detection? > >> > >> Your filter->decimate approach sounds very reasonable; I'm not 100% > >> convinced by using the FFT for something that is concentrated in *time* > >> domain, but that might depend on the purpose mentioned above. > >> > >> 2) Im somewhat confused about the FFT block if I just pipe the SDR > >> straight into it. The FFT size is set to 1024 and the window is set to > >> "window.blackmanharris(1024)". So Im assuming the FFT just applies one > >> window (?) and outputs 1024 bins. However, how many samples are > >> accumulated before the FFT is run? I would have assumed I can control > >> that too. And if so, should I best be doing this every 50ms, 500ms, > >> 2000ms, ..? > >> > >> I'm not sure I understand the question. An FFT is simply an DFT. It's a > >> mapping of N-dimensional vector to N-dimensional vector, . The window is > >> multiplied point-wise with the input vector prior to the DFT to avoid > >> spectral leakage. > >> > >> There's no accumulation involved anywhere. > >> > >> 3) I can use the rational resampling block to bring the sample rate > >> down to 48khz so I can use the audio sink. From that I can still hear > >> the pulse even if it is not visible in the spectrum (gui sink). Im > >> assuming this is just because the plotting cannot keep up? > >> > >> Maybe, or maybe the spectrum sink really isn't the right tool to > visualize > >> a pulse! Again, we might want to discuss what this pulse is and what > it's > >> used for. > >> > >> 4) In the time domain I guess I can generate a synthetic pulse of the > >> same length / frequency and then cross correlate. > >> > >> Hm, but correlating a signal with a known fixed sequence is, > >> mathematically, a convolution. > >> > >> That is identical to doing FIR filtering – in fact, if we consider the > >> shape of your pulse as what is often referred to as pulse shape filter, > then > >> that filter in the receiver would simply be the matched filter to that. > >> > >> Not obvious to me > >> how to generate the required pulse in gnuradio though (would a > >> continuous signal work?). > >> > >> "Continuous" would mean you'd do an infinite-length correlation, so > that's > >> not 100% possible. > >> > >> I also notice there are no built in > >> (auto)correlation blocks? > >> > >> Hm, but an autocorrelation would take a complete signal, shift it by all > >> possible shifts and calculating the dot product between the shifted > version > >> and the unshifted, right? That would require to have the complete > signal at > >> once. > >> > >> But GNU Radio is a streaming architecture, so that can't work. > >> > >> You can implement a limited-length autocorrelation/crosscorrelation > >> relatively easily; we can talk about how that would look like, but my > gut > >> feeling is that this might be something that might not make too much > sense > >> in your specific use case. > >> > >> I found the "correlation estimator" but not > >> clear how to use it. As for dealing with the frequency uncertainty > >> problem. Does one just try correlating with different freuencies and > >> pick the best one? Or what is the good thing to do here given I may > >> also have to deal with quite a bit of noise. > >> > >> As a gut feeling: you don't really care about whether the pulse is > exactly > >> at a certain frequency (it's absolutely not normal for wireless > receivers to > >> know the exact frequency a priori), but when it happens. So we might > want to > >> discuss the kind of pulse, and kind of noise we're talking about. > >> > >> As a further gut feeling: I think your autocorrelation question > indicates > >> you might be on a very good track – it's possible cyclostationary > estimation > >> methods might be helpful here. > >> > >> > >> Best regards, > >> > >> Marcus > >> > >> > >> > >> On 02/04/2017 11:39 PM, Dirk Gorissen wrote: > >> > >> Fist of all, while Im a newbie to (gnu)radio, congrats to the dev team > >> for a great piece of software. > >> > >> My question is about the need to detect a weak, noisy, short (10ms) > >> pulse that occurs every 1.5 seconds. It is transmitted at a particular > >> frequency (e.g., 150.22 MHz) but in practise I have found this can > >> vary by as much as +/- 500Hz. There is no modulation, it is simply an > >> on/off keyed pulse. > >> > >> Say I have an SDR generating data at 2.5 MSPS. I have so far been > >> experimenting with standard scipy/numpy routines to collect a batch of > >> samples, perform a FFT (freq domain) and do a cross correlation (time > >> domain). However, Im by no means a dsp guy and would like to leverage > >> gnuradio as much as I can. I have been poking a bit but have some > >> basic questions. > >> > >> 1) 2.5 Msps gives me way more bandwidth than I neeed. Assuming, for > >> now, I only care about a single pulse frequency I really only need > >> ~1khz bandwidth. In the frequency domain I can directly decimate down > >> (with a big factor) to the 1-2 khz range using the low pass filter > >> block, do an fft, and look for peaks. Is that the right approach? > >> > >> 2) Im somewhat confused about the FFT block if I just pipe the SDR > >> straight into it. The FFT size is set to 1024 and the window is set to > >> "window.blackmanharris(1024)". So Im assuming the FFT just applies one > >> window (?) and outputs 1024 bins. However, how many samples are > >> accumulated before the FFT is run? I would have assumed I can control > >> that too. And if so, should I best be doing this every 50ms, 500ms, > >> 2000ms, ..? > >> > >> 3) I can use the rational resampling block to bring the sample rate > >> down to 48khz so I can use the audio sink. From that I can still hear > >> the pulse even if it is not visible in the spectrum (gui sink). Im > >> assuming this is just because the plotting cannot keep up? > >> > >> 4) In the time domain I guess I can generate a synthetic pulse of the > >> same length / frequency and then cross correlate. Not obvious to me > >> how to generate the required pulse in gnuradio though (would a > >> continuous signal work?). I also notice there are no built in > >> (auto)correlation blocks? I found the "correlation estimator" but not > >> clear how to use it. As for dealing with the frequency uncertainty > >> problem. Does one just try correlating with different freuencies and > >> pick the best one? Or what is the good thing to do here given I may > >> also have to deal with quite a bit of noise. > >> > >> Any guidance appreciated. > >> > >> Many thanks, > >> > >> Dirk > >> > >> _______________________________________________ > >> Discuss-gnuradio mailing list > >> Discuss-gnuradio@gnu.org > >> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio > >> > >> _______________________________________________ Discuss-gnuradio > mailing > >> list Discuss-gnuradio@gnu.org > >> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio > > > > -- > > _________________________________________ Dr. Dirk Gorissen Mob: > > +44-7763-806-809 Web: dirkgorissen.com Skype: dirk.gorissen Twitter : > > twitter.com/dirkgor LinkedIn: linkedin.com/in/dirkgorissen > > > > -- > _________________________________________ > Dr. Dirk Gorissen > Mob: +44-7763-806-809 > Web: dirkgorissen.com > Skype: dirk.gorissen > Twitter : twitter.com/dirkgor > LinkedIn: linkedin.com/in/dirkgorissen > > _______________________________________________ > Discuss-gnuradio mailing list > Discuss-gnuradio@gnu.org > https://lists.gnu.org/mailman/listinfo/discuss-gnuradio >
_______________________________________________ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio