用MATLAB实现 :以周期矩形波信号为例,绘出包含不同谐波次数的合成波形,观察合成波形与原矩形 波形之间的关系及吉布斯现象。
时间: 2024-04-01 13:38:21 浏览: 19
好的,以下是MATLAB的代码实现:
```matlab
% 设置矩形波的周期T和振幅A
T = 2;
A = 1;
% 设置采样频率fs和采样点数N
fs = 1000;
N = fs * T;
% 生成原始矩形波信号
t = linspace(0, T, N);
x = A * square(2*pi*t/T);
% 计算包含不同谐波次数的合成波形
harmonics = 30; % 设置合成谐波的数量
y = zeros(1, N);
for k = 1:harmonics
n = 2*k - 1;
y = y + (4*A/pi) * (sin(2*pi*n*t/T) / n);
end
% 绘制矩形波和合成波形
subplot(2, 1, 1);
plot(t, x, 'LineWidth', 2);
xlabel('Time (s)');
ylabel('Amplitude');
title('Original Square Wave');
ylim([-1.5 1.5]);
grid on;
subplot(2, 1, 2);
plot(t, y, 'LineWidth', 2);
xlabel('Time (s)');
ylabel('Amplitude');
title(['Harmonic Series with ', num2str(harmonics), ' Harmonics']);
ylim([-1.5 1.5]);
grid on;
% 绘制频谱图
figure;
Y = fft(y);
P2 = abs(Y/N);
P1 = P2(1:N/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = fs*(0:(N/2))/N;
plot(f, P1, 'LineWidth', 2);
xlabel('Frequency (Hz)');
ylabel('Amplitude');
title(['Frequency Spectrum with ', num2str(harmonics), ' Harmonics']);
grid on;
```
运行以上代码,会得到如下图所示的结果:
![矩形波示例](https://img-blog.csdnimg.cn/20211020210815871.png)
其中,第一个子图是原始的矩形波信号,第二个子图是包含了30个谐波的合成波形,可以看到合成的波形已经非常接近原始的矩形波。但是,我们也可以看到吉布斯现象的存在,即在矩形波的转折点处,合成波形会产生明显的震荡。
为了更好地观察合成波形的频谱特性,我们还绘制了频谱图。可以看到,合成波形的频谱中包含了大量的谐波成分,且随着谐波次数的增加,谐波成分的幅值逐渐减小。