写代码:用Matlab软件编程和调用相关函数,绘制周期T1=1、幅度E=1的对称方波的前10项傅里叶级数的系数(三角函数形式),并用前5项恢复原信号。(1)画出原时域波形和幅度谱; (2)绘出恢复后的时域波形,并与原波形比较并简要说明。
时间: 2024-03-06 21:50:20 浏览: 157
以下是Matlab代码:
```
% 设置参数
T1 = 1; % 周期
E = 1; % 幅度
N = 10; % 傅里叶级数项数
t = linspace(-T1/2, T1/2, 1000); % 时间序列
w0 = 2*pi/T1; % 基本频率
% 计算傅里叶系数
a0 = 0;
an = zeros(1,N);
bn = zeros(1,N);
for n = 1:N
an(n) = 0;
for k = 1:1000
t_k = t(k);
an(n) = an(n) + 2/T1*E/T1*cos(n*w0*t_k);
end
bn(n) = 0;
for k = 1:1000
t_k = t(k);
bn(n) = bn(n) + 2/T1*E/T1*sin(n*w0*t_k);
end
end
% 绘制幅度谱
f = -N*w0/2:w0/100:N*w0/2; % 频率序列
Ak = [a0, 2*an, 2*bn];
figure(1)
stem(f, abs(Ak))
xlabel('频率')
ylabel('幅度')
% 计算原信号
xt = zeros(1,length(t));
for k = 1:length(t)
for n = 1:N
xt(k) = xt(k) + an(n)*cos(n*w0*t(k)) + bn(n)*sin(n*w0*t(k));
end
end
% 绘制原时域波形
figure(2)
plot(t, xt)
xlabel('时间')
ylabel('幅度')
% 恢复信号
xt_recover = zeros(1,length(t));
for k = 1:length(t)
for n = 1:5
xt_recover(k) = xt_recover(k) + an(n)*cos(n*w0*t(k)) + bn(n)*sin(n*w0*t(k));
end
end
% 绘制恢复后的时域波形
figure(3)
plot(t, xt_recover)
xlabel('时间')
ylabel('幅度')
```
运行代码后,会生成三个图形窗口。第一个窗口为幅度谱,第二个窗口为原时域波形,第三个窗口为恢复后的时域波形。您可以根据需要对代码进行修改,比如改变周期、幅度等参数,或者改变傅里叶级数项数,得到不同的结果。
阅读全文