试图绘制 sinc 函数的 fft

Trying to plot the fft of a sinc function

我正在尝试绘制我拥有的一组数据的 fft。这些数据构成了一个近乎完美的sinc函数。这是我试图绘制 fft 的数据: .

我知道 sinc 函数的 fft 应该类似于阶跃函数。但是,我得到的结果远非如此。找到 fft 本身非常容易,但我认为我的错误是在我尝试计算频率轴时。我在网上找了好几种方法,但至今没能使它起作用。这是我的代码:

sampleRate = (max(xdata) - min(xdata))/length(xdata);
sampleN = length(xdata);
y = fft(ydata, sampleN);
Y = y.*conj(y)/sampleN;
freq = (0:1:length(Y)-1)*sampleRate/sampleNumber;
plot(freq, Y)

我几乎在网上找到了所有这些内容,并且我非常了解 none(这可能是它不起作用的原因...)

放大我使用该代码得到的结果:

它现在似乎起作用了!这是我减去平均值时得到的结果:

你在这里看到的是零频率比其他任何东西都大得多。用plot(freq,Y,'o-')绘图,证明你看到的形状只是两个样本之间的线性插值。

零频是所有样本的总和。因为信号的均值比振幅大很多,所以零频率使其他一切都相形见绌。而且因为您正在绘制功率(DFT 的绝对平方),所以这种差异会进一步增强。

有两个简单的解决方案:

  1. 使用对数 y 轴绘图:

    plot(freq, Y)
    set(gca,'yscale','log')
    
  2. 从信号中减去均值,移除零频率,或缩放 y 轴(这些或多或少是等效的):

    y = fft(ydata-mean(ydata), sampleN);
    

    y(1) = 0;
    

    plot(freq, Y)
    set(gca,'ylim',[0,max(Y(2:end))]);