um = 2; % 三角波幅度
T = 4; % 三角波周期
t = linspace(0, T, 1000); % 时间序列
tri_wave = um * (1 - 2*abs(mod(t, T)-T/2)/T); % 构造三角波信号
figure;
plot(t, tri_wave);
xlabel('时间');
ylabel('幅值');
title('三角波信号');
% 分解三角波信号为基波和谐波
N = 5; % 谐波个数
a0 = mean(tri_wave); % 直流分量
an = zeros(1, N); % 余弦项系数
bn = zeros(1, N); % 正弦项系数
for n = 1:N
an(n) = 2/T * trapz(t, tri_wave .* cos(2*pi*n*t/T));
bn(n) = 2/T * trapz(t, tri_wave .* sin(2*pi*n*t/T));
end
% 合成三角波信号
tri_wave_recon = a0/2;
for n = 1:N
tri_wave_recon = tri_wave_recon + an(n)*cos(2*pi*n*t/T) + bn(n)*sin(2*pi*n*t/T);
end
figure;
subplot(2,1,1);
stem([0, 1:N], [a0/2, an]);
xlabel('谐波编号');
ylabel('系数');
title('三角波信号傅里叶级数展开系数');
subplot(2,1,2);
plot(t, tri_wave, 'b', t, tri_wave_recon, 'r--');
xlabel('时间');
ylabel('幅值');
title('三角波信号及其重构');
% 输出n=5时的分解和合成波形
tri_wave_recon_n5 = a0/2 + an(5)*cos(2*pi*5*t/T) + bn(5)*sin(2*pi*5*t/T);
figure;
subplot(2,1,1);
plot(t, an(1)*cos(2*pi*t/T), '