常用模拟低通滤波器的设计——巴特沃斯(Butterworth)滤波器
滤波器是一种具有频率选择作用的电路或运算处理系统,它具有区分区分输入信号的各种不同频率成分的功能,具有滤除噪声和分离各种不同信号的功能。综合一个滤波器的基本步骤分为逼近和实现。逼近方法有巴特沃斯逼近、切比雪夫逼近、椭圆逼近和贝塞尔逼近。这些逼近方法可直接用于低通滤波器综合,而对于高通、带通、带阻滤波器综合,要借助于频带变换。
1、确定系统函数的极点
模拟滤波器的设计以几种典型的低通滤波器的原型函数为基础,IIR数字滤波器在设计上可以借助成熟的模拟滤波器的成果,如巴特沃斯滤波器、切比雪夫滤波器和椭圆滤波器等,有现成的设计数据以及曲线和图表可查,其设计工作量比较小。在设计一个IIR数字滤波器时,用户可以根据指标先写出模拟滤波器的公式,然后通过一定的变换,将模拟滤波器的公式转换成数字滤波器的公式。
2、巴特沃斯(Butterworth)滤波器
巴特沃斯(Butterworth)滤波器又称为“最平”的幅频响应滤波器,该滤波器的特点是在通带内具有最大平坦的幅度且随频率升高呈单调减小。
N阶低通巴特沃斯滤波器的特性函数(振幅平方函数)为:
【例5-8】采样速率为8000Hz,要求设计一个低通滤波器,fp=2100Hz,fs=2500Hz,Rp=3dB,Rs=25dB。
% 【例5-8】采样速率为8000Hz,要求设计一个低通滤波器,
% fp=2100Hz,fs=2500Hz,Rp=3dB,Rs=25dB。
clc, clear, close all
fn = 8000; fp = 2100; fs = 2500; Rp = 3; Rs = 25;
Wp = fp/(fn/2); %计算归一化角频率
Ws = fs/(fn/2);
% 计算阶数和截止频率
[n,Wn] = buttord(Wp,Ws,Rp,Rs);
% 计算H(z)分子、分母多项式系数
[b,a] = butter(n,Wn);
% 计算H(z)的幅频响应, freqz(b,a,计算点数,采样频率)
[H,F] = freqz(b,a,1000,8000);
subplot(211);
plot(F,20*log10(abs(H)));
xlabel('频率(Hz)'); ylabel('幅值(dB)');
title('低通滤波'); axis([0 4000 -30 3]);
grid on;
subplot(212);
pha = angle(H)*180/pi;
plot(F,pha);
xlabel('频率(Hz)'); ylabel('相位');
grid on;
【例5-9】采样速率为8000Hz,要求设计一个高通滤波器,fp=1000Hz,fs=700Hz,Rp=3dB,Rs=20dB。
% 【例5-9】采样速率为8000Hz,要求设计一个高通滤波器,fp=1000Hz,fs=700Hz,Rp=3dB,Rs=20dB。
% clc, clear, close all
figure
fn = 8000; fp = 1000; fs = 700; Rp = 3; Rs = 20;
Wp = fp/(fn/2); %计算归一化角频率
Ws = fs/(fn/2);
% 计算阶数和截止频率
[n,Wn] = buttord(Wp,Ws,Rp,Rs);
% 计算H(z)分子、分母多项式系数
[b,a] = butter(n,Wn,"high");
% 计算H(z)的幅频响应, freqz(b,a,计算点数,采样频率)
[H,F] = freqz(b,a,1000,8000);
subplot(211);
plot(F,20*log10(abs(H)));
axis([0 4000 -30 3]);
xlabel('频率(Hz)'); ylabel('幅值(dB)');
title('高通滤波');
grid on;
subplot(212);
pha = angle(H)*180/pi;
plot(F,pha);
xlabel('频率(Hz)'); ylabel('相位');
grid on;
【例5-10】采样速率为10000Hz,要求设计一个带通滤波器,fp=[1000Hz,1500Hz],fs=[600Hz,1900Hz],Rp=3dB,Rs=20dB。
% 【例5-10】采样速率为10000Hz,要求设计一个带通滤波器,fp=[1000Hz,1500Hz],
% fs=[600Hz,1900Hz],Rp=3dB,Rs=20dB。
% clc, clear, close all
figure
fn = 10000; fp=[1000,1500]; fs=[600,1900]; Rp = 3; Rs = 20;
Wp = fp/(fn/2); %计算归一化角频率
Ws = fs/(fn/2);
% 计算阶数和截止频率
[n,Wn] = buttord(Wp,Ws,Rp,Rs);
% 计算H(z)分子、分母多项式系数
[b,a] = butter(n,Wn);
% 计算H(z)的幅频响应, freqz(b,a,计算点数,采样频率)
[H,F] = freqz(b,a,1000,10000);
subplot(211);
plot(F,20*log10(abs(H)));
axis([0 5000 -30 3]);
xlabel('频率(Hz)'); ylabel('幅值(dB)');
title('高通滤波');
grid on;
subplot(212);
pha = angle(H)*180/pi;
plot(F,pha);
xlabel('频率(Hz)'); ylabel('相位');
grid on;
【例5-11】采样速率为10000Hz,要求设计一个带阻滤波器,fp=[1000Hz,1500Hz],fs=[1200Hz,1300Hz],Rp=3dB,Rs=30dB。
% 【例5-11】采样速率为10000Hz,要求设计一个带阻滤波器,fp=[1000Hz,1500Hz],
% fs=[1200Hz,1300Hz],Rp=3dB,Rs=30dB。
% clc, clear, close all
figure
fn = 10000; fp = [1000,1500]; fs = [1200,1300]; Rp = 3; Rs = 30;
Wp = fp/(fn/2); %计算归一化角频率
Ws = fs/(fn/2);
% 计算阶数和截止频率
[n,Wn] = buttord(Wp,Ws,Rp,Rs);
% 计算H(z)分子、分母多项式系数
[b,a] = butter(n,Wn,'stop');
% 计算H(z)的幅频响应, freqz(b,a,计算点数,采样频率)
[H,F] = freqz(b,a,1000,10000);
subplot(211);
plot(F,20*log10(abs(H)));
axis([0 5000 -35 3]);
xlabel('频率(Hz)'); ylabel('幅值(dB)');
title('高通滤波');
grid on;
subplot(212);
pha = angle(H)*180/pi;
plot(F,pha);
xlabel('频率(Hz)'); ylabel('相位');
grid on;