[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Discuss-gnuradio] cycle/period detection of a cyclic/periodic transmitt
From: |
kaleem ahmad |
Subject: |
[Discuss-gnuradio] cycle/period detection of a cyclic/periodic transmitter |
Date: |
Wed, 22 Apr 2009 01:02:48 -0700 (PDT) |
Hi All,
I am trying to detect the cycle (or period) time of a cyclic data
transmitter by sensing the channel. The transmitter can be any general e.g.
FSK/ZigBee/Bluetooth etc, and transmitting a fixed packet after every 'T'
ms. I am interested to detect this T using GNURadio/USRP.
The idea is to sense the channel with appropriate sampling time/FFT size and
then analyze the FFT bin to find the value of T i.e cycle time.
The cycle time can be between e.g 1ms...200ms, this corresponds to a
frequency range of 1KHz to 5 Hz. So I need a minimum sample rate of 2
K-samples/sec. I am using 3 to have some margin. Now the high-rate data
stream is run through a 1.5 KHz low-pass filter (for anti-aliasing) and
downsampled to a 3 Ksample/sec rate. A 512 bin FFT now has a resolution of
around 5 Hz per bin (mean 512 FFT time resolution is 200 ms).
To acheive this I am doing decimation at two levels, one in USRP (with
D=256), and then to further reduce the sampling rate I am using
gr.fir_filter_ccf, as explained in the following.
USRP RF sampling rate----After decimation with D=256-------Second level
decimation with gr.fir_filter_ccf
64MHz 64MHz/256=250kHz
gr.fir_filter_ccf(125, filter_coeff) = 2k
it finally gives me 2ksample/sec-> sample time=500micro sec, which means if
I take 512 fft, I will get a time resolution of 500micro sec * 512 = 256 ms,
with 500 micr sec distance between consective fft bins.
Now suppose a cyclic data transmisster is transmitting with 10ms cycle time,
i.e. after every 10ms there is a signal to be detected by my USRP system.
>From above calculation 10ms = 500 micro sec * 20....It means that in my 512
FFT bin after every 20 bins there should be a peak (Am I correct??? Please
note that there is only one transmitter in the area, no other source of
interference)
In similar way if I choose 75, 50 or 25 for second level decimation by
gr.fir_filter_ccf, then I should get a peak after every 33.33, 50, and 100
bins respectively, as explained below.
gr.fir_filter_ccf(75, filter_coeff) = 3.33k -> 512 FFT resulution = 300 micr
sec -> 10ms = 33.33 bins
gr.fir_filter_ccf(50, filter_coeff) = 5k -> 512 FFT resulution = 200 micr
sec -> 10ms = 50 bins
gr.fir_filter_ccf(25, filter_coeff) = 10k -> 512 FFT resulution = 100 micr
sec -> 10ms = 100 bins
But unfortunately I am unable to get these results, for example with
gr.fir_filter_ccf(125, filter_coeff) I got following results, for few
consective scans:
To understand these results please not that there are two columns, first is
the power level of the peak and the second is the index of it in 512 FFT bin
(Only peaks are displayed, and all values with smaller than a predefined
threshold value are discarded).
Amplitude index_in_512_FFT_array
-----------------------------
Scan 1
18.6298904419 74
19.0259571075 75
18.2597370148 87
19.7134284973 88
19.5969486237 101
19.1021556854 114
18.6094284058 149
19.4388046265 161
19.6380805969 162
20.0642223358 174
19.3017559052 175
18.2230033875 187
-----------------------------------------------------------
scan 2
21.5638103485 74
21.9744911194 112
23.012506485 125
21.8563117981 126
21.370016098 137
23.2401256561 138
21.655248642 139
22.3047294617 151
-----------------------------------------------------------
scan 3
22.1015739441 139
22.8458404541 151
22.8282699585 152
23.0492572784 163
23.7630844116 164
22.387878418 165
22.9494457245 176
22.7077884674 177
-----------------------------------------------------------
scan 4
19.5143814087 2
19.4494800568 15
20.1066360474 65
20.4122695923 78
21.3697834015 172
20.4298725128 173
21.0880489349 185
20.013879776 186
-----------------------------------------------------------
scan 5
19.0756263733 112
19.4551143646 153
19.4751834869 163
19.4504451752 165
20.5185012817 166
21.0303726196 175
21.0539245605 176
19.1459999084 177
19.1931247711 178
20.0467262268 188
19.1717777252 189
-----------------------------------
So you can see that from FFT bin it is impossible to interpret what is the
cycle time, when I used 75/50/25 in fir_filter_ccf or if I used FFT lenght
different from 512, it was still meaningless and I got similar results.
If you like to have a look at my code then it is very short and is attached.
If some of you can specially have a look on at least the filter
coeefficients and entire decimation process in this code then it will be
great help for me, because I am not very good in filter design.
Please suggest me what/where is the problem and how can I solve it.
Any suggestion to calculate this cycle time in a different way will also be
welcomed.
Thanks and Best Regards
Kaleem
http://www.nabble.com/file/p23171564/Cycle_sensing.py Cycle_sensing.py
--
View this message in context:
http://www.nabble.com/cycle-period-detection-of-a-cyclic-periodic-transmitter-tp23171564p23171564.html
Sent from the GnuRadio mailing list archive at Nabble.com.
- [Discuss-gnuradio] cycle/period detection of a cyclic/periodic transmitter,
kaleem ahmad <=