为什么 8 点 DFT 的行为与 16 点不同?

信息处理 matlab fft 自由度
2022-02-04 05:06:09

我有一个 50 Hz 正弦波,采样率为 1600 个样本/秒。我正在计算 16 点 DFT。所以我的基频是 100 Hz。

然后我将 1600 个样本抽取为 400 个样本。然后使用它计算 8 点 DFT。现在我的基本分量是 50 Hz。二次谐波是 100 Hz。

我在 matlab 上绘制了上述两种情况。在第一种情况(16 点)中,100 Hz 分量的幅度接近 3.5。

在第二种情况下(8 点),100 Hz 分量的幅度几乎为零。50 Hz 分量的幅度接近 4。

为什么会出现这种异常?

谢谢,

何塞

在此处输入图像描述

这是这个的代码

%----------------------------Sine Wave------------------------------%

f = 50;

t = 0:(1/1600):(1-(1/1600))

Signal = sin(2*pi*f*t);

subplot(3,1,1)

plot(t,Signal)

ylabel('Amplitude')

title('50 Hz Sine wave at 1600 samples/sec');

%-------------------16 Point DFT-----------------------%

DFT_app_16 = fft(Signal,16);

subplot(3,1,2)
stem((0:100:1500),abs(DFT_app_16))

ylabel('Magnitude')
title('16 Point DFT')

%---------------------8 Point DFT--------------------------%

Dec_Sample = [];

for i = 1:4:1597
    Dec_Sample = [Dec_Sample ((Signal(1,i) + Signal(1,i+1) + Signal(1,i+2) + Signal(1,i+3))/4)]

end


DFT_app_8 = fft(Dec_Sample,8);

subplot(3,1,3)
stem((0:50:350),abs(DFT_app_8))

xlabel('Frequency(Hz)')
ylabel('Magnitude')

title('8 Point DFT')
3个回答

您的 sin 频率为 50 Hz,但在您的 16 点 DFT 中没有 50 Hz 的 bin。有一个 0 Hz bin 和一个 100 Hz bin,你可以看到一些信号功率进入了它们。这是捕捉 50 Hz 音调的非理想方式。

8 点 DFT 有一个 50 Hz 的 bin,您可以看到它捕获了几乎所有的信号功率。

区别不在于 DFT。差异来自抽取。将采样率降低 4 会更改 bin。
在抽取之前,使用 1600 的采样率,您最终会得到 100Hz 宽的频率区间。由于 50Hz 不完全适合,因此 50Hz 的能量会被涂抹在几个分档中。

抽取后,您的采样频率为 400Hz。使用 8 点 fft,分档的宽度为 50Hz。然后,50Hz 信号的全部能量完全包含在一个 bin 中。

您可以在抽取前对信号进行 8 点 FFT,您将看到由信号频率在 bin 之间引起的拖尾,就像使用 16 点 FFT 一样。

如果您使用 32 点 FFT 而不是 16 点,那么拖尾也会消失 - 1600 的 32 个 bin 给出 50 Hz 宽的 bin。

每个 FFT 结果 bin 代表一个频谱,该频谱的宽度为 2 个 bin,最接近的零点,如果包含所有较小的 Sinc 函数波纹,则实际上是无限宽(但逐渐变细)。因此,任何在 FFT 宽度上不完全是整数周期的纯正弦波都将出现在所有 FFT 结果箱中,但主要出现在两个最近的 FFT 结果箱中。

你的第二个图是一个正弦波,它在 FFT 宽度上完全是整数周期,因此只在一个 bin 中居中,因为当 FFT 宽度是一个精确整数时,Sinc 函数恰好在所有其他 FFT 结果 bin 中为零正弦波周期的倍数。