我的傅里叶级数不适合这张图像。

3
我会尽力为您翻译。以下是您需要翻译的内容:

我试图绘制一个傅里叶级数,使其能够适配原始图形(这一点是正确的),但我不知道哪里出了问题。我也仔细检查了傅里叶逼近。

原始图形生成代码如下:

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 请问有人能告诉我为什么这不起作用吗?

(1) “原始”图是什么? (2) costerm 始终为0。这是有意的吗? (3) f 只有一个值,但在您的 plot 语法中,您假定它是一个值向量。(4) 请发布原始信号和/或傅里叶级数系数以表示信号。除非我们能看到系数和/或您所说的原始图,否则我们无法确定它是否有效。从您的代码中很难看出“原始”图是什么。 - rayryeng
1个回答

3
首先可以注意到,在您的图中生成的系列在支持区间[-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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接