为什么只有50Hz频谱是单个值?为什么50.1 Hz正弦由50.1 Hz以外的其他频率组成;这些新频率从何而来?
我没有对50.1 Hz信号进行任何非线性处理!同样,50.1 Hz似乎具有较小的最大振幅,即它不是0.7,而实际上我生成的正弦波具有0.7的振幅。
为什么这样?
通过MATALB命令fft();
获得
#1 楼
Acually Matt的答案已经在这里给出了关于该问题的一种观点:DFT在时域和频域都是隐式周期性的(请参阅此问题)。根据您的参数,我们可以计算出您的观察周期为1 s。这意味着您观察到50个周期的50 Hz音调。定期延长该观察间隔将始终导致无形的正弦波。如果采用50.1 Hz音调,则将转换50.1个振荡周期。周期性地扩展该信号将导致相位跳变,从而导致额外的频谱支路。另一个视图是频率分辨率,定义为$ f_ \ mathrm {s} / N_ \ mathrm {DFT} = 1024 \ text {Hz} / 1024 = 1 \ text {Hz} $。由于50 Hz是1 Hz的整数倍,因此可以通过单个DFT bin重新表示此音调。由于DFT的结果是离散值,它们之间的间隔为1 Hz,所以50.1 Hz不能由单个bin表示,并且能量会在频域上散布。在您的示例中,这是品红光谱稍微不对称且与50 Hz光谱的0.7幅值相比50 Hz仓的幅值较低的原因。
上述两种效果均对光谱有所贡献您正在观察。
评论
$ \ begingroup $
这很有意义。但是,为了更清楚地说明您所描述的光谱泄漏,这是用于观察光谱的工具(FFT)的问题。它不是信号本身的缺陷。表示如果我“听到” 50.1 Hz的音频信号,它将在我的耳朵中显示为单音,而不是某种“噪音”。我对吗?
$ \ endgroup $
– gpuguy
13年4月12日在10:27
$ \ begingroup $
你是完全正确的。它显示了理解DFT实际在做什么以便能够正确解释它的重要性。附带说明:在实际实现中您将“听到”的内容还取决于您如何将离散量转换为模拟信号。
$ \ endgroup $
–戴夫
13年4月12日在10:42
#2 楼
这是截断或开窗正弦信号的效果。您需要以这样一种方式截断,如果将移位后的信号添加到截断的信号上,它仍将是原始正弦波。#3 楼
对于纯未调制正弦波的频率,您将只获得单个结果FFT点,该频率在FFT孔径或宽度中正好是整数周期的。正弦波的任何其他频率都将与默认窗口(矩形)的变换(周期Sinc)卷积。50.1 Hz在FFT的1秒窗口中不是完全周期性的。
还需要其他“泄漏” FFT结果仓或频率来表示窗口边界之间产生的不连续性在FFT宽度上不是完全整数周期的任何信号。这是因为DFT的所有基本向量在DFT的宽度内都是正整数周期,因此在基本向量的末尾与开始之间没有明显的不连续性。因此,没有这些特征的任何信号都不能仅由一个DFT基矢量(及其复共轭)来表示,因此有关其余信号的信息必须放在某个地方。
由于总能量由FFT变换保留(Parseval'a定理),因此“泄漏”箱中的能量会从峰值箱中移走。因此,峰箱的幅度必须更低。
#4 楼
我打赌您的正弦波在第一个和最后一个样本为零?不应该这样应该将其对齐,以使最后一个采样之后的下一个采样为零,以便您可以一个接一个地复制和粘贴信号的副本,它们看起来将是连续的,没有重复的采样。也许可以将其想象为瓷砖桌面墙纸,其中瓷砖的一个边缘必须无缝地与另一边缘相交。 :)有关Python示例,请参见https://gist.github.com/endolith/236567:
# 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能量完全包含在单个容器中:
评论
$ \ begingroup $
我和OP有同样的问题。通过设置端点= False标志解决了该问题。我以为默认情况下行距是(关闭,打开),但事实证明是(关闭,关闭)。由于您的代码,我发现了该错误。
$ \ endgroup $
–三角龙
18-10-30在17:16
评论
您能否发布用于生成该图的代码?我最好的猜测是,由于信号之间的距离太近,ftf无法正确解决它们。那,或者是频谱涂抹,因为样本与频率不对齐。下面的答案是正确的。所观察到的术语称为频谱泄漏,在分析其频率不完全位于您的DFT输出箱之一的中心的正弦曲线时会观察到。
我能知道您针对什么绘制了什么图,以使峰值频率达到50Hz时
请参阅此答案,以详细了解问题是什么以及如何解决。