Hi Gary --
Thanks for getting back to me. Maybe I can explain better what I'm
doing. The data is 16 ksps complex IQ centered at 50.080 MHz. The
target signal is an essentially unmodulated CW carrier about 427 below
that. I have about 8 hours of recorded data to analyze.
Ultimately I want to plot both the amplitude and any frequency change to
sub-Hz resolution. To get sufficient resolution I decimate down to a
bandwidth of only a few hundred Hz. That would put the target signal
outside the passband, so the frequency translation first shifts it to
the center.
I need data points at convenient intervals for time series plotting,
e.g., 512 samples/second going into a 512 bin FFT to provide one maximum
amplitude value per second. I resampled so I could get that
one-frame-per-second pacing with a power-of-two FFT size. If that's not
a real concern, I can happily remove the resampling and work with the
natural sample rate, e.g., 500 bin FFT fed by 500 samples/second.
My main question is why the displayed maximum bin value is updating much
more slowly than once per second when FFT size = sample rate. It's more
like one per five seconds. In particular, am I doing something wrong
with the stream and vector conversions around the FFT and MAX blocks?
Thanks,
John
----
On 4/29/24 19:06, Gary Schafer wrote:
> It sounds to me as if you're trying to move the signal to the center of
> a FFT bin so that you don't have to deal with scalloping loss. Is that
> correct? If so, I strongly recommend that you skip all of this
> resampling and just use a "flattop" window in the FFT. That will allow
> you to measure the maximum amplitude with very high accuracy (roughly
> within 0.01 dB) regardless of where the signal resides within the spectrum.
>
> If that's not satisfactory, then I recommend that you skip the "having a
> sample rate that is a power-of-2 Hz" and just move the signal to the
> center of a frequency bin with whatever sample rate you have. The bin
> frequencies are simply (sample rate)/N, where N is the number of samples
> in the FFT. So with a sample rate of 16 kHz and a 512 pt FFT, you'd
> select a frequency that was an integer value of 16000/512 = 31.25 Hz.
> So, if you want to move it to, say, the 10th bin, move it to 31.25*10 =
> 312.5 Hz. Done.
>
> Good luck!
>
> Gary
>
>
> ************************************
> I am reading Digital RF data at 16k samples/second, and my goal is to
> get the power of the maximum frequency once per second.
>
> I start by resampling to a power-of-two rate, then translating to move
> the desired frequency to the center with further decimation, then doing
> an FFT, converting to log power and finally extracting the power of the
> loudest bin. The decimation and FFT size are calculated to yield one
> FFT per second. I'm not sure if I'm doing this correctly and I've
> attached the flowgraph.
>
> (a) Should the FFT use only a power-of-two bin size? I am resampling
> to go from 16k to 8192 samples/second so that I ultimately decimate to
> 512 samples/second rather than 500 samples/second.
>
> Is that the right thing to do? Should I resample up to 16384
> samples/second rather than down to 8192? Or should I just use a 500 bin
> FFT?
>
> (b) Given that the final sample rate and FFT depth are equal (512), I
> expected to get one vector per second, and thus one maximum value per
> second. Instead, I see a much slower update rate, about once per five
> seconds.
>
> I added a QT vector sink and while that takes a long time to get
> started, once going it does update about once per second. Am I doing
> something wrong that the maximum value doesn't update with each new vector?
>
> Thanks,
> John
No comments:
Post a Comment