利用matlab设包含多个频率分量的输入信号为x(n),经过LTI系统后输出为y(n),请设计一个实验对比线性相位和非线性相位滤波器对输入信号的影响,反映线性相位LTI系统的优势。
时间: 2024-03-13 17:44:27 浏览: 19
实验步骤:
1. 生成一个包含多个频率分量的输入信号$x(n)$,可以使用MATLAB中的sinc函数生成一个带通信号。
```matlab
fs = 1000; % 采样率
t = 0:1/fs:1-1/fs; % 时间序列
f1 = 50; % 信号频率1
f2 = 150; % 信号频率2
f3 = 350; % 信号频率3
x = 0.5*cos(2*pi*f1*t) + 0.3*cos(2*pi*f2*t) + 0.2*cos(2*pi*f3*t); % 生成包含3个频率分量的信号
```
2. 设计一个线性相位滤波器(如FIR滤波器)和一个非线性相位滤波器(如IIR滤波器),这里分别使用fir1和butter函数设计。
```matlab
% FIR滤波器设计
N = 101; % 滤波器阶数
fpass = [100, 200]; % 通带频率范围
fstop = [50, 250]; % 阻带频率范围
b = fir1(N, fpass/(fs/2), 'bandpass');
% IIR滤波器设计
[b, a] = butter(4, fpass/(fs/2), 'bandpass');
```
3. 将输入信号$x(n)$输入到线性相位滤波器和非线性相位滤波器,得到对应的输出信号$y_1(n)$和$y_2(n)$。
```matlab
% FIR滤波器滤波
y1 = filter(b, 1, x);
% IIR滤波器滤波
y2 = filter(b, a, x);
```
4. 比较$y_1(n)$和$y_2(n)$的频谱图,观察滤波器对输入信号的影响。
```matlab
% 绘制输入信号频谱图
X = fft(x);
f = (0:length(X)-1)*fs/length(X);
figure;
plot(f, abs(X));
title('Input signal spectrum');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
% 绘制FIR滤波器输出信号频谱图
Y1 = fft(y1);
figure;
plot(f, abs(Y1));
title('FIR filter output spectrum');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
% 绘制IIR滤波器输出信号频谱图
Y2 = fft(y2);
figure;
plot(f, abs(Y2));
title('IIR filter output spectrum');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
```
5. 分析并记录实验结果,反映线性相位LTI系统的优势。
实验结果表明,FIR滤波器和IIR滤波器均可以对输入信号进行滤波,但是IIR滤波器的相位响应随着频率变化而变化,会引起信号畸变,对于包含多个频率分量的信号,IIR滤波器会使频域上的不同频率分量相互干扰,导致输出信号失真。而FIR滤波器的相位响应为常数,可以保持不同频率分量的相对相位不变,不会引起信号畸变。因此,在保证系统稳定的情况下,线性相位LTI系统比非线性相位系统更适合处理包含多个频率分量的信号,可以更好地保持信号的时域和频域特性,避免信号失真。