matlab - 我的傅里叶级数不符合图表

标签 matlab fft

我正在尝试绘制一个应该适合原始图形的傅里叶级数(这是正确的),但我不知道哪里出了问题。我还仔细检查了傅里叶近似。

原始图生成:

t=-pi:0.01:0;
x=ones(size(t));
plot(t,x)
axis([-3*pi 3*pi -1 4])
hold on
t=0:0.01:pi;
y=cos(t);
plot(t,y)

而傅立叶级数是通过以下方式生成的:

t=-pi:0.01:pi;
f=1/2;
for n=1:5
    costerm=0;
    if n/2== round(n/2)
        sinterm=((-2*n)/(pi*(1-n^2)))*sin(2*n*t); 
    else
        sinterm= (-2/(pi*n))*sin(2*n*t);
    end
    f=f+sinterm+costerm;
end
plot(t,f)

图形如下所示: enter image description here

谁能告诉我为什么这不起作用?

最佳答案

首先要注意的是,您的绘图中生成的序列在支持区间 [-pi:pi] 中运行了两个周期。这指向您的 sin(2*n*t) 参数中的错误常量,该参数应该是 sin(n*t)

一般来说

  • 奇函数只有sin
  • 即使是函数也只有cos
  • 否则,傅立叶级数包含 sincos 项的混合。

在您的情况下,该函数既不是偶数也不是奇数,因此您应该期望同时存在 sincos 项。但是,您只计算 sinterm 并离开 costerm=0。更具体地说,虽然余弦级数系数对所有 n>1 的计算结果为 0,但实际上您错过了 n=1 的项,即 0.5*cos (t)

通过这些更正你应该得到

f=1/2 + 0.5*cos(t);
for n=1:5
    if 0==mod(n,2)
        sinterm=((-2*n)/(pi*(1-n^2)))*sin(n*t); 
    else
        sinterm= (-2/(pi*n))*sin(n*t);
    end
    f=f+sinterm;
end

它应该给你下面的图(蓝线是原始函数,红线是傅里叶级数展开):

enter image description here

关于matlab - 我的傅里叶级数不符合图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30448275/

相关文章:

matlab - Matlab 中的感知器训练

android - 如何显示该算法的 FFT 结果?

matlab - Matlab oop 出现意外的初始属性值

matlab - imwrite - 必须提供文件名

Matlab 不返回特征向量的正交矩阵

matlab - For 循环求平均值?

c++ - 傅立叶域 : works, 中的图像高斯卷积,但不应该

c++ - 使用 C++ 的频谱图

math - 正弦波频率拟合

android - 使用 Jtransform 的 DoubleFFT_1D() for android 计算 DFT