matlab中试在同一坐标下绘制周期方波的频谱(只绘制一次与三次谐波)与一阶、二阶系统的频率响应曲线,并分析时域响应的波形。
时间: 2024-03-26 20:35:27 浏览: 39
绘制周期方波的频谱,可以使用MATLAB中的fft函数。代码如下:
```matlab
% 生成周期方波信号
t = 0:0.001:1;
x = square(2*pi*5*t);
% 计算FFT
N = length(x);
X = fft(x);
P2 = abs(X/N);
P1 = P2(1:N/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = 1000*(0:(N/2))/N;
% 只绘制一次与三次谐波的频谱
subplot(2,1,1);
plot(f(1:3), P1(1:3));
title('Periodic Square Wave Spectrum');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
% 绘制一阶系统的频率响应曲线
R1 = 1000;
C1 = 0.1e-6;
H1 = tf([1/(R1*C1)],[1 1/(R1*C1)]);
w = logspace(1,6,1000);
[mag1,phase1] = bode(H1,w);
subplot(2,2,3);
semilogx(w,20*log10(mag1));
title('First-Order System Frequency Response');
xlabel('Frequency (rad/s)');
ylabel('Magnitude (dB)');
% 绘制二阶系统的频率响应曲线
R2 = 1000;
C2 = 0.01e-6;
H2 = tf([1/(R2*C2)^2],[1 2/(R2*C2) 1/(R2*C2)^2]);
[mag2,phase2] = bode(H2,w);
subplot(2,2,4);
semilogx(w,20*log10(mag2));
title('Second-Order System Frequency Response');
xlabel('Frequency (rad/s)');
ylabel('Magnitude (dB)');
% 分析时域响应的波形
t = 0:0.00001:0.02;
x = square(2*pi*1000*t);
y1 = lsim(H1,x,t);
y2 = lsim(H2,x,t);
subplot(2,2,2);
plot(t,x,'b',t,y1,'r');
title('First-Order System Time Domain Response');
xlabel('Time (s)');
ylabel('Amplitude');
legend('Input Signal','Output Signal');
subplot(2,2,1);
plot(t,x,'b',t,y2,'r');
title('Second-Order System Time Domain Response');
xlabel('Time (s)');
ylabel('Amplitude');
legend('Input Signal','Output Signal');
```
解释一下代码:
1. 首先生成周期方波信号,使用MATLAB的square函数实现。
2. 然后使用fft函数计算出信号的频谱。注意,要将得到的FFT结果除以信号长度,才是真正的幅度值。
3. 绘制频谱图,只绘制一次与三次谐波,使用MATLAB的subplot函数实现。
4. 定义一阶和二阶系统的传递函数,使用MATLAB的tf函数实现。
5. 计算一阶和二阶系统的频率响应曲线,使用MATLAB的bode函数实现。
6. 绘制一阶和二阶系统的频率响应曲线,使用MATLAB的semilogx函数实现。
7. 生成输入信号,并使用lsim函数计算一阶和二阶系统的时域响应。注意,在计算时域响应时,需要先定义时间范围。
8. 绘制一阶和二阶系统的时域响应波形,使用MATLAB的subplot函数实现。
以上代码可以绘制周期方波的频谱、一阶和二阶系统的频率响应曲线,以及一阶和二阶系统的时域响应波形。在绘制时域响应波形时,可以看出一阶系统对信号的响应有一定的延迟,而二阶系统对信号的响应有更多的振荡。
阅读全文