滤波器频率特性分析(私信我,发具体要求,有偿)

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

2)理论分析各滤波电路的系统函数

低通滤波器:$H(s)=\dfrac{1}{1+sT}$

高通滤波器:$H(s)=\dfrac{sT}{1+sT}$

带通滤波器:$H(s)=\dfrac{Ks}{(sT_1+1)(sT_2+1)}$

带阻滤波器:$H(s)=\dfrac{(sT_1+1)}{(sT_2+1)}$

其中,$T$表示低通和高通滤波器的时间常数;$T_1$和$T_2$分别表示带通和带阻滤波器的上、下截止频率对应的时间常数。

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

以下为各滤波器在MATLAB中的系统函数代码及其频率响应图像:

低通滤波器:

syms s T;
H = 1/(1+s*T);
fplot(abs(subs(H, s, 1j*2*pi*f)), [0, 10000]); % 幅频响应
fplot(angle(subs(H, s, 1j*2*pi*f)), [0, 10000]); % 相频响应
zplane([], [-1/T]); % 零极点分布

高通滤波器:

syms s T;
H = s*T/(1+s*T);
fplot(abs(subs(H, s, 1j*2*pi*f)), [0, 10000]); % 幅频响应
fplot(angle(subs(H, s, 1j*2*pi*f)), [0, 10000]); % 相频响应
zplane([-1/T], []); % 零极点分布

带通滤波器:

syms s T1 T2 K;
H = K*s/((s*T1+1)*(s*T2+1));
fplot(abs(subs(H, s, 1j*2*pi*f)), [0, 20000]); % 幅频响应
fplot(angle(subs(H, s, 1j*2*pi*f)), [0, 20000]); % 相频响应
[z, p, k] = tf2zp([K 0], conv([T1 1], [T2 1])); % 计算零极点
zplane(z, p); % 零极点分布

带阻滤波器:

syms s T1 T2;
H = (s*T1+1)/(s*T2+1);
fplot(abs(subs(H, s, 1j*2*pi*f)), [0, 10000]); % 幅频响应
fplot(angle(subs(H, s, 1j*2*pi*f)), [0, 10000]); % 相频响应
[z, p, k] = tf2zp([1 0], conv([T1 1], [T2 1])); % 计算零极点
zplane(z, p); % 零极点分布

4)分析不同频率正弦信号及其叠加信号通过各滤波器后,输入信号与输出信号的频谱,解释滤波器的性能

我们对各个滤波器分别输入多种频率的正弦信号并进行分析,以下是MATLAB代码及对应的输入输出频谱图像:

低通滤波器:

T = 0.001; % 时间常数
f = [50 1000 5000]; % 输入信号频率
Fs = 100000; % 采样频率
t = 0:1/Fs:0.1-T; % 时间范围
x = sin(2*pi*f'*t); % 不同频率的正弦信号
y = filter(1, [T 1], x); % 滤波后的输出信号
figure;
subplot(211); % 输入信号频谱
plot(f, abs(fft(x,[],2)).^2/length(t), '-o');
xlim([0 10000]); xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)');
title('Input signal spectrum');
subplot(212); % 滤波后输出信号频谱
plot(f, abs(fft(y,[],2)).^2/length(t), '-o');
xlim([0 10000]); xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)');
title('Output signal spectrum');

可以看出,低通滤波器能够滤除高频信号,只保留低频信号。

高通滤波器:

T = 0.001; % 时间常数
f = [50 1000 5000]; % 输入信号频率
Fs = 100000; % 采样频率
t = 0:1/Fs:0.1-T; % 时间范围
x = sin(2*pi*f'*t); % 不同频率的正弦信号
y = filter([T 0], [T 1], x); % 滤波后的输出信号
figure;
subplot(211); % 输入信号频谱
plot(f, abs(fft(x,[],2)).^2/length(t), '-o');
xlim([0 10000]); xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)');
title('Input signal spectrum');
subplot(212); % 滤波后输出信号频谱
plot(f, abs(fft(y,[],2)).^2/length(t), '-o');
xlim([0 10000]); xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)');
title('Output signal spectrum');

可以看出,高通滤波器能够滤除低频信号,只保留高频信号。

带通滤波器:

T1 = 0.001; % 下截止频率时间常数
T2 = 0.0005; % 上截止频率时间常数
K = 1; % 增益
f = [50 500 2000 5000]; % 输入信号频率
Fs = 100000; % 采样频率
t = 0:1/Fs:0.1-max(T1,T2); % 时间范围
x = sin(2*pi*f'*t); % 不同频率的正弦信号
y = filter(K*[T1 0], conv([T1 1], [T2 1]), x); % 滤波后的输出信号
figure;
subplot(211); % 输入信号频谱
plot(f, abs(fft(x,[],2)).^2/length(t), '-o');
xlim([0 10000]); xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)');
title('Input signal spectrum');
subplot(212); % 滤波后输出信号频谱
plot(f, abs(fft(y,[],2)).^2/length(t), '-o');
xlim([0 10000]); xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)');
title('Output signal spectrum');

可以看出,带通滤波器可以通过设置上、下截止频率来只保留特定的频率区间内的信号。

带阻滤波器:

T1 = 0.0005; % 下截止频率时间常数
T2 = 0.001; % 上截止频率时间常数
f = [50 500 2000 5000]; % 输入信号频率
Fs = 100000; % 采样频率
t = 0:1/Fs:0.1+max(T1,T2); % 时间范围
x = sin(2*pi*f'*t); % 不同频率的正弦信号
y = filter(conv([T1 1], [T2 1]), [T1*T2 1], x); % 滤波后的输出信号
figure;
subplot(211); % 输入信号频谱
plot(f, abs(fft(x,[],2)).^2/length(t), '-o');
xlim([0 10000]); xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)');
title('Input signal spectrum');
subplot(212); % 滤波后输出信号频谱
plot(f, abs(fft(y,[],2)).^2/length(t), '-o');
xlim([0 10000]); xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)');
title('Output signal spectrum');

可以看出,带阻滤波器可以通过设置上、下截止频率来剔除特定的频率区间内的信号。

5)分析各滤波器的单位冲击响应和阶跃响应曲线

以低通滤波器为例,以下是MATLAB代码及对应的单位冲击响应和阶跃响应图像:

T = 0.001; % 时间常数
t = 0:1e-6:10*T; % 时间范围
h = 1/T*exp(-t/T); % 单位冲击响应
figure;
subplot(211); % 单位冲击响应曲线
plot(t, h, '-');
xlim([0 0.01]); xlabel('Time (s)'); ylabel('Amplitude');
title('Unit impulse response');
subplot(212); % 阶跃响应曲线
plot(t, cumsum(h), '-');
xlim([0 0.1]); xlabel('Time (s)'); ylabel('Amplitude');
title('Step response');

可以看出,单位冲击响应曲线形状类似于指数衰减;阶跃响应曲线则类似于S曲线,表明低通滤波器需要一定时间才能过渡到稳态。

其他滤波器的单位冲击响应和阶跃响应曲线也可以通过类似的方法得到。

我可以提供以下步骤来进行滤波器频率特性分析:

  1. 设计滤波器: 根据给出的性能指标,可以使用MATLAB中的函数fir设计FIR滤波器,也可以使用函数butter设计IIR滤波器。比如,对于低通滤波器,可以使用如下代码设计FIR低通滤波器:

fc = 1200; % 截止频率 fs = 8000; % 采样频率 N = 100; % 滤波器阶数 h = fir1(N,fc/(fs/2)); % FIR滤波器系数

使用函数[b,a] = butter(n,Wn,type) 可以设计IIR滤波器,其中n是滤波器的阶数,Wn是归一化截止频率,type指定滤波器类型(“low”、“high”、“bandpass”、“stop”)。例如,对于低通滤波器,可以使用如下代码设计IIR低通滤波器:

fc = 1200; % 截止频率 fs = 8000; % 采样频率 N = 4; % 滤波器阶数 Wn = fc/(fs/2); % 归一化截止频率 [b,a] = butter(N,Wn,'low'); % IIR滤波器系数

  1. 分析频率响应: 使用MATLAB中的函数freqz可以画出滤波器的频率响应,包括幅频响应和相频响应。例如,对于上述设计的FIR和IIR低通滤波器,可以使用如下代码分别画出它们的频率响应:

freqz(h); % FIR滤波器的频率响应 freqz(b,a); % IIR滤波器的频率响应

  1. 分析信号经过滤波器后的频谱: 使用MATLAB中的函数fft可以对信号进行快速傅里叶变换,得到信号的频谱。可以将不同频率正弦信号及其叠加信号作为输入信号,经过各滤波器后分析其输入信号与输出信号的频谱差异,以判断滤波器的性能。例如,对于上述设计的FIR和IIR低通滤波器,可以使用如下代码分别对输入信号进行滤波,并画出滤波后的信号的时域波形和频谱:

t = 0:1/fs:1; % 时间区间 f1 = 500; % 正弦信号频率 f2 = 1500; f3 = 2500; x = sin(2pif1t) + sin(2pif2t) + sin(2pif3*t); % 三个正弦波叠加 y1 = filter(h,1,x); % FIR低通滤波器输出 y2 = filter(b,a,x); % IIR低通滤波器输出 subplot(2,2,1) plot(t,x) title('输入信号时域波形') subplot(2,2,2) plot(linspace(-fs/2,fs/2,length(x)),fftshift(abs(fft(x)))) title('输入信号频谱') subplot(2,2,3) plot(t,y1) title('FIR低通滤波器输出时域波形') subplot(2,2,4) plot(linspace(-fs/2,fs/2,length(y1)),fftshift(abs(fft(y1)))) title('FIR低通滤波器输出频谱')

  1. 分析单位冲击响应和阶跃响应曲线: 使用MATLAB中的函数impz和step可以画出滤波器的单位冲击响应和阶跃响应曲线。例如,对于上述设计的FIR和IIR低通滤波器,可以使用如下代码分别画出它们的单位冲击响应和阶跃响应曲线:

subplot(2,2,1) impz(h) title('FIR低通滤波器单位冲击响应') subplot(2,2,2) step(h) title('FIR低通滤波器阶跃响应') subplot(2,2,3) impz(b,a) title('IIR低通滤波器单位冲击响应') subplot(2,2,4) step(b,a) title('IIR低通滤波器阶跃响应')

对于更具体的学习资源或要求,建议查阅相关教材或在线资料,例如《MATLAB数字信号处理》等书籍或网站。

信息课答辩就不要用了哦