计算快速傅里叶变换中存在的频率

3

我有一组由软件定义无线电记录的信号输出值,其中心频率为162.550 MHz,采样率为1,000,000。现在为了在频域中分析数据,我计算了FFT,这很简单。

#Calculating FFT of signal 
fourier=np.fft.fft(RadioData)

为了绘制振幅与频率之间的图,我需要计算信号中存在的频率。我使用了Numpy fftfreq来实现这个目的。

freq=np.fft.fftfreq(fourier.shape[0])

输出结果范围在[-0.5 0.4999995]之间。我不确定如何解释这个结果,或者如何计算数据中存在的频率?

fftfreq 接受采样间隔。只需调用 freq=np.fft.fftfreq(fourier.shape[0], d=1/1e6) (其中假设您以一兆采样率进行采样,因此您的采样间隔为一微秒)。freq 应从 0 到 500 KHz 运行,然后跳到 -500 KHz 到 0。现在只需要 plot(freq, np.abs(fourier)) - Ahmed Fasih
如果您的数据是实数(非复数),请考虑使用rfftfreqrfft - Ahmed Fasih
嗯,只是为了确认一下——你说载波频率是162 MHz,而你采样的频率是1 MHz。我假设硬件已经将信号解调到基带,并进行了低通滤波以<500 KHz?如果没有,那么你会看到一些非常奇怪的结果 :) - Ahmed Fasih
数据很复杂。 - Andre Smith
@hotpaw2,您能否再详细解释一下,为什么下面的答案是错误的(也许可以在下面添加您的答案)? - Andre Smith
IQ样本的带宽是严格实际样本的两倍,两者采用相同的采样率。严格实际输入的FFT是共轭对称的,因此使FFT频谱结果部分冗余。 IQ采样允许FFT输入的实部和虚部都可以是非零的,从而通过消除共轭冗余性来使潜在带宽加倍。 - hotpaw2
1个回答

1
当SDR样本为基带IQ(或复杂的,或余弦/正弦)时,带宽等于IQ采样率。这是因为基带IQ样本(不同于单通道严格实数样本)可以独立地包含正频谱和负频谱,半带宽在RTL-SDR(等)调谐的射频频率设置之上和之下(除非选择频率偏移)。
因此,IQ数据的FFT的频率范围将从Fcenter -(indicated_bandwidth / 2)到几乎Fcenter +(indicated_bandwidth / 2)。或者对于您的示例:162.050至(略低于)163.050 MHz。(“略低于”值取决于FFT大小。)步长dF将是IQ采样率除以FFT长度。
(请注意,标量样本中的数据速率是IQ采样率的两倍,因为每个IQ样本包含两个样本(实部和虚部,或余弦和正弦混合器输出)。因此,由于每个IQ样本包含更多信息,信息带宽可以更大。但SDR应用程序通常指示IQ采样率,而不是更高的原始数据速率。)

我明白你的意思,频率轴将包含(2 * 采样率)。但是根据你所写,范围将为165.050到(略低于)163.050 MHz,而我的中心频率为162.550,这是一个打字错误吗? - Andre Smith
是的,有一个打字错误。现在我想已经修复了。 - hotpaw2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接