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


Reply via email to