1.巴特沃斯模拟滤波器(低通,高通,带通,带阻)设计-MATLAB实现

本文是模拟滤波器设计,如果需要了解数字滤波器的内容,可以按顺序看我写的另外两篇博客,如下:

2.MATLAB实现无限脉冲响应数字滤波器(IIR)

3.MATLAB实现有限脉冲响应数字滤波器(FIR)

1. 基础知识介绍

我们首先明确一个知识(这个非常重要):

某正弦信号,频率为50Hz
这意味着 信号的模拟频率 f f f= 50 (Hz),注意它的单位是Hz

信号的表达式为
y = s i n ( 2 π f t ) = s i n ( 2 π ∗ 50 t ) = s i n ( 100 π t ) y = sin(2\pi ft)=sin(2\pi *50 t)=sin(100\pi t) y=sin(2πft)=sin(2π50t)=sin(100πt)

由于信号也可以表示为 y = s i n ( Ω t ) y = sin(\Omega t) y=sin(Ωt)的形式,所以这里
Ω = 2 π f = 100 π \Omega=2\pi f=100\pi Ω=2πf=100π

这里的 Ω \Omega Ω模拟角频率它的单位是rad/s

注意模拟角频率 Ω \Omega Ω模拟频率 f f f的关系 Ω = 2 π f \Omega=2\pi f Ω=2πf

2. 函数介绍

首先介绍一些用到的MATLAB函数

2.1 buttord - 求解滤波器的阶数N和3dB截止频率wc

[N,wc] = buttord(wp, ws, Rp, As, ‘s’)  

输入参数如下:

通带边界模拟频率wp、阻带边界模拟频率ws模拟角频率单位是rad/s

通带最大衰减Rp、阻带最小衰减As单位是dB

‘s’指的就是模拟滤波器,设计数字滤波器时就没有’s’这个参数了。

2.2 butter - 求解N阶滤波器的具体参数B和A,求解完B和A后滤波器就设计完成了。

[B,A] = butter(N, wc, ‘ftype’, ‘s’)  - 模拟滤波器设计

输入参数如下:

N - 滤波器阶数

wc - 3dB截止模拟频率(单位rad/s,N和wc都是用buttord函数计算出来的)

ftype - 滤波器类型‘’:
(1)当输入wc为一维向量时:
默认情况下设计的低通滤波器,设计高通滤波器的话令ftype=high

(2)当输入wc为二维向量[wcl,wcu]时:
默认情况下设计的带通滤波器,设计带阻滤波器的话令ftype=stop

2.3 filter - 滤波函数

y = filter(B,A,x)

这个就是滤波函数了,

x是输入的有噪声的信号,

B,A就是设计好的滤波器参数

得到的输出y就是滤波后的信号了。

3. 代码实现:

(1)低通滤波器:

例: 设计通带截止频率5kHz,通带衰减2dB,阻带截止频率12kHz,阻带衰减30dB的巴特沃斯低通滤波器

由题可知,设计的是模拟滤波器,所以用到下面三个函数:

[N,wc] = buttord(wp, ws, Rp, As, ‘s’)
[B,A] = butter(N, wc, ‘ftype’, ‘s’)
y = filter(B,A,x)

划重点 ! ! !

模拟滤波器的频率都是模拟角频率 Ω \Omega Ω ,它和频率 f f f 的关系
Ω = 2 π f \Omega = 2\pi f Ω=2πf

所以这里

wp = 2 ∗ p i ∗ 5000 2*pi*5000 2pi5000,ws = 2 ∗ p i ∗ 12000 2*pi*12000 2pi12000,Rp = 2, As = 30

代码如下:


wp = 2 * pi * 5000;
ws = 2 * pi * 12000;
Rp = 2;
As = 30;

[N, wc] = buttord(wp, ws, Rp, As, 's');
[B, A] = butter(N, wc, 's');

上面这些代码就设计好了滤波器

如果有输入噪声信号x的话,调用y = filter(B,A,x),得到的y就是滤波后的信号了。

下面是绘图部分

为了让滤波器的结果得到更形象的表示,我们可以画出来它的幅频特性曲线,代码如下:
其中,我们使用了freqs这个函数,

h = freqs(B,A,wk)

它是用来计算当频率为wk时,对应的频率响应h的大小,主要是用来画图的。

绘图代码如下:


f = 0 : 10 : 14000;%取点,从0-14000,每隔10取一个点
w = 2 * pi * f;%注意模拟滤波器用的频率都是模拟角频率,要乘上2pi的
 
Hk = freqs(B,A,w);%对于取的每个点,求该处的频率响应大小
 
%画图
figure
plot(f/1000, 20 * log10(abs(Hk)));%横坐标单位是kHz,纵坐标单位是dB,
grid on;
%设置横纵坐标标签
xlabel('f/kHz');
ylabel('-A(f)/dB');
%设置横纵坐标轴范围
axis([0, 14, -40, 5]);

绘图结果如下:

在这里插入图片描述

(2)高通滤波器:

高通滤波器与低通几乎完全一样,只要注意
[B,A] = butter(N, wc, ‘ftype’, ‘s’)中的 ftype=high

例: 设计通带截止频率4kHz,通带衰减0.1dB,阻带截止频率1kHz,阻带衰减40dB的巴特沃斯高通滤波器

代码如下:


wp = 2 * pi * 4000;
ws = 2 * pi * 1000;
Rp = 0.1;
As = 40;
 
[N, wc] = buttord(wp, ws, Rp, As, 's');
[B, A] = butter(N, wc,'high', 's');%注意这个'high'

高通滤波器设计完成了

如果有输入噪声信号x的话,调用 y = filter(B,A,x),得到的y就是滤波后的信号了。

接着我们画出高通滤波器的幅频特性曲线


f = 0 : 10 : 14000;%取点,从0-14000,每隔10取一个点
w = 2 * pi * f;%注意模拟滤波器用的频率都是模拟角频率,要乘上2pi的
 
Hk = freqs(B,A,w);%对于取的每个点,求该处的频率响应大小
 
%画图
figure
plot(f/1000, 20 * log10(abs(Hk)));%横坐标单位是kHz,纵坐标单位是dB,
grid on;
%设置横纵坐标标签
xlabel('f/kHz');
ylabel('-A(f)/dB');
%设置横纵坐标轴范围
axis([0, 14, -60, 5]);

曲线图如下:

在这里插入图片描述

(3)带通滤波器:

例: 设计巴特沃斯带通滤波器,通带上下边界频率分别为4kHz和7kHz,通带衰减1dB,阻带上下边界频率2kHz和9kHz,阻带衰减20dB。

滤波器设计代码如下:

%带通
wp = 2 * pi * [4000, 7000];
ws = 2 * pi * [2000,9000];
Rp = 1;
As = 20;
 
[N, wc] = buttord(wp, ws, Rp, As, 's');%此时输入wp和ws都是二维的,输出wc也是两维的
[B, A] = butter(N, wc,'s');

带通模拟滤波器设计完成了

如果有输入噪声信号x的话,调用y = filter(B,A,x),得到的y就是滤波后的信号了。

接着我们画出带通滤波器的幅频特性曲线,如下:


f = 0 : 10 : 14000;%取点,从0-14000,每隔10取一个点
w = 2 * pi * f;%注意模拟滤波器用的频率都是模拟角频率,要乘上2pi的
 
Hk = freqs(B,A,w);%对于取的每个点,求该处的频率响应大小
 
%画图
figure
plot(f/1000, 20 * log10(abs(Hk)));%横坐标单位是kHz,纵坐标单位是dB,
grid on;
%设置横纵坐标标签
xlabel('f/kHz');
ylabel('-A(f)/dB');
%设置横纵坐标轴范围
axis([0, 14, -60, 5]);

曲线图如下:
在这里插入图片描述

(4)带阻滤波器:

例: 设计巴特沃斯带阻滤波器,通带上下边界频率分别为2kHz和9kHz,通带衰减1dB,阻带上下边界频率4kHz和7kHz,阻带衰减20dB。


%带阻
wp = 2 * pi * [2000, 9000];
ws = 2 * pi * [4000,7000];
Rp = 1;
As = 20;
 
[N, wc] = buttord(wp, ws, Rp, As, 's');%此时输入wp和ws都是二维的,输出wc也是两维的
[B, A] = butter(N, wc,'stop','s');

带阻模拟滤波器设计完成了,如果有输入噪声信号x的话,调用
y = filter(B,A,x),得到的y就是滤波后的信号了。

接着我们画出带阻滤波器的幅频特性曲线,代码如下:


f = 0 : 10 : 14000;%取点,从0-14000,每隔10取一个点
w = 2 * pi * f;%注意模拟滤波器用的频率都是模拟角频率,要乘上2pi的
 
Hk = freqs(B,A,w);%对于取的每个点,求该处的频率响应得下
 
 
%画图
figure
plot(f/1000, 20 * log10(abs(Hk)));%横坐标单位是kHz,纵坐标单位是dB,
grid on;
%设置横纵坐标标签
xlabel('f/kHz');
ylabel('-A(f)/dB');
%设置横纵坐标轴范围
axis([0, 14, -100, 5]);

结果如下:

在这里插入图片描述

### 巴特沃斯模拟滤波器设计实现 #### 设计原理 巴特沃斯滤波器旨在提供平坦的幅频响应,在内尽可能减少波动。对于模拟信号而言,该类滤波器过设定上下限截止频率来区分所需保留和衰减的部分[^1]。 #### 数学表达式 巴特沃斯滤波器的传输函数H(s)可表示如下: \[ H(s)=\frac{G_0}{1+\left(\frac{s}{j\omega_c}\right)^{2n}} \] 其中\( G_0 \)代表增益系数;\( s=\sigma+j\omega \),为拉普拉斯变换变量;\( n \)指代滤波器阶数;而\( \omega_c \)则是中心角频率。值得注意的是这里给出的一般形式适用于情况下的转换,实际应用到时需做相应调整以适应特定参数范围内的需求。 为了构建一个理想的信道,常会先创建两个互补的高路径再将其组合起来形成最终目标特性曲线。具体操作上可以过级联一对相同规格但工作于不同转折点处工作的LPF()-HPF(高通)结构达成目的[^2]。 #### MATLAB 实现方法 利用MATLAB内置工具箱能够简化这一过程,下面是一段简单的代码片段展示如何定义并绘制此类滤波效果: ```matlab % 定义采样率Fs, 以及上下边界Wp,Ws (单位均为Hz) Fs = 8e3; % Sample Rate Wp = [500 700]; % Passband Frequency Range Ws = [400 800]; % Stopband Frequency Range Rp = 3; Rs = 60; % 使用buttord计算最小满足条件所需的滤波器阶数N及其自然共振角频率Wo [N,Wo] = buttord(Wp/(Fs/2), Ws/(Fs/2), Rp, Rs); % 调用butter生成具体的滤波器系数向量[b,a] [b,a] = butter(N,Wo,'bandpass'); % 绘制幅度响应图 fvtool(b,a); ``` 上述脚本首先设定了基本参数如采样速率、停止区间等信息,接着借助`buttord()`自动求解最优配置方案最后调用了`butter()`完成实际构造任务并将结果可视化呈现出来以便观察验证其性能指标是否符合预期标准。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值