给出题目对应的matlab代码
时间: 2024-09-09 19:08:36 浏览: 42
### 题目对应MATLAB代码示例:
#### 一、离散系统 `H(z)` 的实验
对于离散系统 \( H(z) = \frac{1}{1 - 0.8z^{-2}} \)
```matlab
% 定义系统参数
num = [1]; % 分子系数
den = [1, 0, -0.8]; % 分母系数 (注意 z^-2 对应的是第三项)
% 绘制系统的幅度响应和相位响应
[b,a] = tf2zp(num, den);
[H,w] = freqz(b,a,512,'whole');
subplot(2,1,1); plot(w/2/pi,abs(H)); title('Magnitude Response');
subplot(2,1,2); plot(w/2/pi,angle(H)*180/pi); title('Phase Response');
% 当系统输入信号为 x(n) = cos(19πn), 0 ≤ n ≤ 50
n = 0:50;
x = cos(19*pi*n);
[y,t] = filter(b,a,x,n);
% 输出信号 y(n)
figure; stem(t,y); title('System Output for Input Signal x(n)');
```
#### 二、连续系统 `H(s)` 的实验
对于连续系统 \( H(s) = \frac{1}{s + 2} \),及连续时间信号 \( x(t) = cos(2π * 10t) + cos(2π * 30t) \),\( 0 ≤ t ≤ 5 \),采样间隔为 0.01
```matlab
% 设置时间向量
t = 0:0.01:5;
% 输入信号 x(t)
xt = cos(2*pi*10*t) + cos(2*pi*30*t);
% 绘制x(t)的时域波形
figure; subplot(2,1,1); plot(t, xt); title('Time Domain Waveform of x(t)'); xlabel('Time (sec)'); ylabel('Amplitude');
% 计算并绘制x(t)的频谱图
fs = 1 / 0.01; % Sampling frequency
NFFT = length(xt); % Length of FFT
Xt = fft(xt, NFFT)/length(xt);
frequencies = fs/2*linspace(0,1,NFFT/2+1);
subplot(2,1,2); plot(frequencies, 2*abs(Xt(1:NFFT/2+1))); title('Spectrum of x(t)'); xlabel('Frequency (Hz)'); ylabel('|Y(f)|');
% 使用impulse response方法近似计算x(t)通过连续系统后的输出y(t)
b = 1; a = [1, 2];
yt = filter(b, a, xt);
% 绘制y(t)的时域波形
figure; plot(t, yt); title('Time Domain Waveform of y(t)'); xlabel('Time (sec)'); ylabel('Amplitude');
% 绘制y(t)的幅度谱
Yt = fft(yt, NFFT)/length(yt);
subplot(2,1,2); plot(frequencies, 2*abs(Yt(1:NFFT/2+1))); title('Magnitude Spectrum of y(t)'); xlabel('Frequency (Hz)'); ylabel('|Y(f)|');
% 求解系统在[10^(-2), 10^(2)]频率范围内的频率响应
freq_range = logspace(-2, 2, 512);
sys = tf([1], [1, 2]);
[mag, phase, wout] = bode(sys, freq_range);
semilogx(wout/(2*pi), mag); grid on;
title('Frequency Response of the Continuous System');
xlabel('Frequency (Hz)');
ylabel('Magnitude (dB)');
```
#### 三、输入的离散信号 `x(n)` 的实验
针对离散信号 \( x(n) = sinc(0.2(n - 50)) * cos(2n) \),其中时间 \( n \) 范围为 \( 0 ≤ n ≤ 100 \),且系统传递函数 \( H(z) = \frac{1}{1 - 0.6z^{-1}} \)
```matlab
n = 0:100;
xn = sinc(0.2*(n-50)).*cos(2*n);
% 绘制 A 处信号的时域波形
figure; subplot(2,1,1); stem(n, xn); title('Time-domain waveform at point A'); xlabel('Sample Number'); ylabel('Amplitude');
% 绘制 A 处信号的幅度谱
NFFT = 2^nextpow2(length(xn));
Xn = fft(xn, NFFT)/length(xn);
frequencies = linspace(0,1,NFFT/2+1);
subplot(2,1,2); plot(frequencies, abs(Xn(1:NFFT/2+1))); title('Magnitude spectrum at point A'); xlabel('Normalized Frequency'); ylabel('Magnitude');
% 定义离散系统 H(z)
num = [1]; den = [1, -0.6];
% 经过系统后 B 处的信号
[sos,g] = tf2sos(num, den);
yn = sosfilt(sos, g, xn);
% 绘制 B 处信号的时域波形
figure; subplot(2,1,1); stem(n, yn); title('Time-domain waveform at point B'); xlabel('Sample Number'); ylabel('Amplitude');
% 绘制 B 处信号的幅度谱
YN = fft(yn, NFFT)/length(yn);
subplot(2,1,2); plot(frequencies, abs(YN(1:NFFT/2+1))); title('Magnitude spectrum at point B'); xlabel('Normalized Frequency'); ylabel('Magnitude');
% 绘制 H(z)的幅频响应,并分析 H(z)是什么类型的系统
[b,a] = tf2zp(num, den);
[H,z] = freqz(b,a,512,'whole');
figure; semilogx(abs(H)); title('Magnitude Response of H(z)'); xlabel('Frequency Index'); ylabel('Magnitude');
% 分析系统类型:由于未提供具体频率响应图形,这里不进行实际分类。
```
请注意上述代码仅为实现功能的基本示例,可能需要依据实际情况做相应调整。
阅读全文