为什么这个傅里叶级数对信号的最大值给出较低的幅度?

信息处理 matlab 连续信号 傅里叶级数
2022-02-18 16:29:23

我想在 Matlab 上使用傅里叶级数来近似以下信号。

在此处输入图像描述

我的代码如下

close all
clear all
clc
a_0 = 0
t=-10:0.001:10
x_t = 2/5
T = 10;
w0 = 2*pi/T
numOfTerms = 100
plot(t, x_t);

for k=1:numOfTerms-1
   a_k = (1/(w0*i*k*T))*(  exp(-1*i*k*w0)-exp(-3*i*k*w0)+ exp(-7*i*k*w0)- exp(-9*i*k*w0))
   x_t = x_t + a_k * exp(i*k*w0*t)
   plot(t, x_t);
   title(['Number Of Terms = ',num2str(k+1)]);
   pause(0.1);
end

在此处输入图像描述

您会看到该信号的最小点高于零,最大点低于 1。我该如何解决这个问题?为什么会给出这样的结果?

2个回答

傅里叶级数的公式是

(1)x(t)=k=ckejkω0t

您只使用非负索引,但您还必须使用负索引。由于您的信号是实值,因此您实际上可以仅使用正指数来计算所有内容,但是您必须取实部的两倍:kx(t)

(2)x(t)=c0+2{k=1ckejkω0t}

请注意,您必须单独添加 DC 项c0

这是对应的 Matlab 代码:

t=-10:0.001:10;
x_t = 0;
T = 10;
w0 = 2*pi/T;
numOfTerms = 100;


对于 k=1:numOfTerms-1
   a_k = (1/(w0*i*k*T))*( exp(-1*i*k*w0)-exp(-3*i*k*w0)+ exp(-7*i*k* w0)- exp(-9*i*k*w0));
   x_t = x_t + a_k * exp(i*k*w0*t);
结尾

x_t = 2*实数(x_t)+ 2/5;

情节(t,x_t);

在此处输入图像描述

我在我的电脑上模拟过,我发现当我添加了负频率项时,结果是正确的。