【问题标题】:Trying to plot the fft of a sinc function试图绘制 sinc 函数的 fft
【发布时间】:2018-04-20 00:37:25
【问题描述】:

我正在尝试绘制我拥有的一组数据的 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)

我在网上找到了几乎所有这些内容,但我几乎一无所知(这可能是它不起作用的原因......)

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

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

【问题讨论】:

  • 好吧,首先,您绘制的是功率谱,而不是 FFT。另外,请在您的问题中包含您实际看到的内容。情节的屏幕截图会很有用。我们没有您的数据,因此无法重现您看到的内容。
  • 感谢您的指定!我想我会读一些关于功率谱的书!我已编辑以包含使用此代码获得的情节。
  • 尝试将轴的 'XLim' 属性设置为 [0,0.0002] 或类似的值,以放大绘图的开头。另外,尝试将“YScale”属性设置为“log”。
  • 使用“Xlim”可以清楚地表明问题不是我想的那样:Y 看起来根本不像一个台阶。我更新了运行代码时得到的图片。
  • @LudovicG 当答案正确时,总是点击它的复选标记,以便其他人可以看到它的好答案......同样在这样做的过程中,你的 OP 也会获得一些声誉积分;-)。 .. 欢迎来到 SO

标签: matlab fft


【解决方案1】:

您在这里看到的是零频率比其他所有频率都大得多。用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))]);
    

【讨论】:

    猜你喜欢
    • 2016-11-14
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 2023-04-11
    相关资源
    最近更新 更多