利用matlab对滤波器频率特性分析

设计目标】对典型滤波器进行时频域分析和处理的基本方法【设计工具】MATLAB【设计要求】1)设计典型的滤波电路:低通、高通、带通、带阻
2)理论分析各滤波电路的系统函数
3)利用Matlab分析各滤波电路的系统函数的频率特性(幅频、相频)、零极点分布
4)分析不同频率正弦信号及其叠加信号通过各滤波器后,输入信号与输出信号的频谱,解释滤波器的性能;
5)分析各滤波器的单位冲击响应和阶跃响应曲线

参考GPT和自己的思路:
【解决方案】

  1. 对于四种典型的滤波电路(低通、高通、带通、带阻),我们可以使用R、L、C元器件组合实现电路的设计。

  2. 理论分析各滤波电路的系统函数可以使用网络分析方法,通过构建电路的等效电路模型,联立能量守恒和欧姆定律,写出电路的微分方程式,并求解解析解得到系统函数。

例如,对于一个二阶低通滤波电路,其系统函数为:

$$H(s)=\frac{1}{1+\frac{R_1R_2C_1C_2}{(R_1C_1+R_2C_1+R_2C_2)s+(C_1+C_2)R_2R_1}}$$

  1. 利用Matlab分析各滤波电路的系统函数的频率特性(幅频、相频)、零极点分布。

可以使用Matlab中的tf()函数根据系统函数构建传输函数,然后使用bode()函数绘制幅频、相频图,使用pzmap()函数绘制零极点分布图。

例如,对于上述二阶低通滤波器,可以使用以下代码绘制其幅频、相频和零极点分布图:

R1 = 10e3;
R2 = 10e3;
C1 = 0.1e-6;
C2 = 0.1e-6;
s = tf('s');
H = 1/(1+R1*R2*C1*C2/((R1*C1+R2*C1+R2*C2)*s+(C1+C2)*R2*R1));
bode(H);
grid on;
pzmap(H);
  1. 分析不同频率正弦信号及其叠加信号通过各滤波器后,输入信号与输出信号的频谱,解释滤波器的性能。

我们可以使用Matlab中的freqz()函数对不同频率正弦信号进行频谱分析,得到其输入和输出信号的频谱图。通过分析不同频率分量在滤波器中的响应情况,我们可以评估滤波器的性能,例如衰减幅度、通带带宽、截止频率等。

例如,对于一个二阶低通滤波器,我们可以使用以下代码分析其输入和输出信号在不同频率下的频谱:

Fs = 1000;  % 采样频率
t = 0:1/Fs:1;  % 时间序列
f = 100;  % 输入信号频率
x = sin(2*pi*f*t);  % 输入信号
y = filter([1 0 0],[1 1.414 1],x);  % 滤波器输出
N = length(x);
f_axis = linspace(-Fs/2, Fs/2, N);  % 频率轴
X = fftshift(fft(x));
Y = fftshift(fft(y));
figure;
subplot(2,1,1); 
plot(f_axis, abs(X)/N); hold on;
plot(f_axis, abs(Y)/N);
xlabel('Frequency [Hz]');
ylabel('Amplitude');
legend('Input', 'Output');
title('Frequency Response of a 2nd-order Low-pass Filter');
subplot(2,1,2); 
plot(f_axis, angle(X)); hold on;
plot(f_axis, angle(Y));
xlabel('Frequency [Hz]');
ylabel('Phase');
legend('Input', 'Output');
  1. 分析各滤波器的单位冲击响应和阶跃响应曲线。

可以使用Matlab中的impz()step()函数分别绘制滤波器的单位冲击响应和阶跃响应曲线,这可以评估滤波器的时域性能,例如响应时间、冲击响应幅度等。

例如,对于上述二阶低通滤波器,我们可以使用以下代码绘制其单位冲击响应和阶跃响应曲线:

h = impulse(H);
t = linspace(0,length(h)-1,length(h));
figure;
subplot(2,1,1); 
plot(t,h);
xlabel('Time [samples]');
ylabel('Amplitude');
title('Unit Impulse Response of a 2nd-order Low-pass Filter');
s = step(H);
subplot(2,1,2); 
plot(t,s);
xlabel('Time [samples]');
ylabel('Amplitude');
title('Step Response of a 2nd-order Low-pass Filter');

对于该问题,可以采用Matlab中提供的多种函数来设计和分析滤波器。

  1. 设计滤波器

可以采用函数如butter、cheby1等函数来设计IIR滤波器,或者用fir1、remez来设计FIR滤波器。

以低通滤波器为例,利用butter函数可以这样设计:

% 设计4阶Butterworth低通滤波器,截止频率为Wn=0.2*pi
[b,a] = butter(4, 0.2, 'low');

同样地,可以使用cheby1函数来设计切比雪夫I型滤波器:

% 设计4阶切比雪夫I型低通滤波器,截止频率为Wn=0.2*pi
[b, a] = cheby1(4,0.1,0.2*pi,'low');
  1. 分析滤波器频率特性

使用freqz函数可以绘制出滤波器的频率响应的幅度和相位特性,同时也可绘制出其零极点分布。

```matlab % 绘制滤波器频率响应图 [h,f] = freqz(b,a,512,1); mag = 20*log10(abs(h)); % 幅度取log并转化为分

img


有不懂的在问