青色曲线是50 Hz的频谱,洋红色曲线是50.1 Hz的正弦波(振幅为0.7)。两者均以1024个样本/秒的速度采样。我执行了1024点FFT以获得此频谱。
为什么只有50Hz频谱是单个值?为什么50.1 Hz正弦由50.1 Hz以外的其他频率组成;这些新频率从何而来?
我没有对50.1 Hz信号进行任何非线性处理!同样,50.1 Hz似乎具有较小的最大振幅,即不是0.7,而实际上我生成的正弦波的振幅为0.7。
为什么是这样?
通过MATALB命令fft()获得;
青色曲线是50 Hz的频谱,洋红色曲线是50.1 Hz的正弦波(振幅为0.7)。两者均以1024个样本/秒的速度采样。我执行了1024点FFT以获得此频谱。
为什么只有50Hz频谱是单个值?为什么50.1 Hz正弦由50.1 Hz以外的其他频率组成;这些新频率从何而来?
我没有对50.1 Hz信号进行任何非线性处理!同样,50.1 Hz似乎具有较小的最大振幅,即不是0.7,而实际上我生成的正弦波的振幅为0.7。
为什么是这样?
通过MATALB命令fft()获得;
Answers:
Acually Matt的回答已经在这里给出了关于该问题的一种观点:DFT在时域和频域上都是隐式周期性的(请参阅此问题)。根据您的参数,我们可以计算出您的观察周期为1 s。这意味着您观察到50个周期的50 Hz音调。定期延长该观察间隔将始终导致无形的正弦波。如果采用50.1 Hz音调,则将转换50.1个振荡周期。周期性地扩展该信号将导致相位跳变,从而导致额外的频谱支路。
上面描述的两种效果都有助于您观察到频谱。
对于纯未调制正弦波的频率,您只会得到一个结果FFT点,该频率正好是FFT孔径或宽度中的整数周期。正弦波的任何其他频率都将与默认窗口(矩形)的变换(周期Sinc)卷积。
50.1 Hz在FFT的1秒窗口中不是完全周期性的。
需要那些其他“泄漏” FFT结果块或频率来表示由在FFT宽度上不是正整数周期的任何信号在窗口边界之间产生的不连续性。这是因为DFT的所有基本向量在DFT的宽度内都是整数周期,因此在基本向量的末尾与开始之间没有明显的不连续性。因此,任何不具有这些特征的信号都不能仅由一个DFT基矢量(及其复共轭)来表示,因此有关其余信号的信息必须放在某个地方。
由于总能量由FFT变换保留(Parseval'a定理),因此“泄漏”箱中的能量会从峰值箱中移走。因此,峰箱的大小必须更低。
我敢打赌,您的正弦波在第一个样本和最后一个样本为零?不应该这样 应该将其对齐,以便在最后一个采样之后的下一个采样为零,以便您可以一个个接一个地复制和粘贴信号副本,它们看起来是连续的,没有重复的采样。也许将其想象为瓷砖桌面墙纸,其中瓷砖的一个边缘必须无缝地与另一边缘相交。:)
请参阅https://gist.github.com/endolith/236567以获取python示例:
# Sampling rate
fs = 128 # Hz
# Time is from 0 to 1 seconds, but leave off the endpoint, so that 1.0 seconds is the first sample of the *next* chunk
length = 1 # second
N = fs * length
t = linspace(0, length, num = N, endpoint = False)
# Generate a sinusoid at frequency f
f = 10 # Hz
a = cos(2 * pi * f * t)
# Use FFT to get the amplitude of the spectrum
ampl = 1/N * abs(fft(a))
查看信号的两个副本如何端到端组合在一起以形成连续波:
发生这种情况时,FFT能量将完全包含在一个容器中:
这是由于光谱泄漏和开窗引起的。理想的响应,即脉冲函数是连续时间正弦波。当在数字计算机中对离散正弦波进行DFT时,基本上就是对窗口化和采样的正弦波进行傅立叶变换,然后在频域中对其进行采样。这导致频谱泄漏。请参阅:http : //w.astro.berkeley.edu/~jrg/ngst/fft/leakage.html