前言

低通滤波器是很常见的工具。比如,在电机控制DSP的AD采样之前,会有大约600Hz的硬件滤波器,用于滤除高频噪声,一般采用两级运放的有源滤波器。再比如,在EQEP的输入信号端口,会有阻容硬件滤波器,用于消除长距信号线可能存在的噪声。在电机控制器内部一般倒是不太会用到滤波器,因为加入低通滤波器有可能造成相位延时,导致控制系统的性能改变。不过,在一些新能源应用和在线监测场景下,还是会用到这个工具,毕竟虽然理论性比较强,但是它实现起来很简单,而且效果明显。

设计目标

这篇文章采用例子的形式,来实现一个数字滤波器的设计以及在线应用。设计的过程利用matlab实现,最终推导得到结果后,可以在DSP中实现。参考郑君里的《信号与系统》,现在的数字滤波器都是基于模拟滤波器得到的,而模拟滤波器中最常用的就是巴特沃斯滤波器和切比雪夫I型滤波器。这里的应用场景下,我选择巴特沃斯低通滤波器。

在采样频率2000Hz的情况下,设计一个截止频率为5Hz的2阶数字低通滤波器。这里截止频率即:

The cutoff frequency is the frequency at which the magnitude response of the filter is 1 / sqrt(2) = 0.7071

实现过程

首先,设计一个模拟滤波器,在matlab中可以使用butter这个函数,这个函数应用很多,这里我采用三个输入参数的形式。

[z,p,k] = butter(2,5*2*pi,'s');

其中,第1个参数规定了滤波器的阶数;第2个参数在模拟滤波器设计过程中,是截止频率的弧度形式,即2π倍的频率;第3个参数设为’s’,对应模拟滤波器设计。同时,输出也有很多,这里使用传递函数分子分母的形式,得到如下结果。因为我们关注工程实现,这里不去追问这个结果是如何得到,但是《信号与系统》的书里有的。大概意思是根据截止频率和巴特沃斯滤波器的基本结构进行求解。


下面,要将s函数转化为z函数,一般有两种方法:冲激响应不变法和双线性变换法。由于第1种方法会有高频混叠,实际上最常用的是双线性变换法。利用matlab中的bilinear函数,可以直接得到,免去了代入计算的麻烦,得到如下结果。

然后,只要把上式变成差分方程就可以在DSP上用了,这部分[1]给了手推公式,这里针对我们的应用,整理一下。


最后,只要实现一下上面的公式,就可以实现在线的低通滤波了。为了方便,这里在m文件中模拟一个在线的过程,构造了一个带噪声的2+0.4cos(2π50t)+0.3cos(2π100t)信号,结果如下。同时还给了离散函数的幅频特性,没错,我不喜欢dB形式的图,我喜欢线性,哈哈哈。

阶数一般化

在上节中,为了将z函数变化为差分方程,我们推导了2阶的形式,那么3阶呢?高阶呢?从下面可以看到其中的规律,我相信matlab里应该有对应的一般化函数,但是这里我决定自己完善一下上面的例子,于是得到了更为一般化的结果。

根据扩展,我们可以得到如下所示的滤波结果。可以看到,随着阶数增加,滤波延时和过冲会增加。但是,并不是意味着阶数可以一直增加,在本例中,8阶情况下,系统会出现不收敛的情况,大概是离散精度之类的问题,这个属于系统系的研究范畴了。

小结

对了,补充一点,这里实现的滤波器,应当是属于IIR,即无限冲击响应滤波器范畴。至于FIR,我并没有看懂[doge]。

参考与代码

[1] https://www.cnblogs.com/xklzw/p/13439873.html

clearvars; clc; close all;% 设计指标
Fs = 2000; order = 3; Wn = 5*2*pi;% 构造目标信号
Ls = 2000;
t = (0:1/Fs:1/Fs*(Ls-1))';
signal = 2+0.4*cos(2*pi*50*t)+0.3*cos(2*pi*100*t)+rand(Ls,1);% designs a lowpass analog Butterworth filter
[num,den] = butter(order,Wn,'s');
% 模拟传递函数
H = tf(num,den);% 双线性变换
[numd,dend] = bilinear(num,den,Fs);
% 数字传递函数
Hd = tf(numd,dend,1/Fs);% 滤波器测试 order阶
b = numd; a = dend;
yd = zeros(1,order); ud = zeros(1,order+1);
for k=1:1:Ls                     ud = [signal(k),ud(1:order)];             yd = [1/a(1)*sum(b.*ud) - 1/a(1)*sum(a(2:order+1).*yd) , yd(1:order-1)];               filt_signal(k) = yd(1);
endfigure(1);
plot(t,signal);hold on; grid on;xlabel('Time (s)'); ylabel('Magnitude'); title('Butterworth Low Pass Filter')
plot(t,filt_signal,'linewidth',2);hold on; grid on;% figure(2);
% P=bodeoptions;
% % P.FreqUnits='rad/s';
% P.FreqUnits='Hz';
% P.FreqScale='linear';
% % P.MagScale='log';
% P.MagUnits='abs';
% bode(Hd,P);grid on;

低通滤波器的设计与DSP实现相关推荐

  1. matlab的汉明窗函数如何导出,基于汉明窗函数的FIR低通滤波器的设计.doc

    基于汉明窗函数的FIR低通滤波器的设计 DSP第二次课程设计 基于汉明窗函数的FIR低通滤波器的设计 姓名 钱海涛 学号 201022030305 孙佳云 201021030304 吴洪天 20102 ...

  2. 25、基于原型的切比雪夫低通滤波器匹配设计理论

    25.基于原型的切比雪夫低通滤波器匹配设计理论 低通滤波器匹配网络其实就是在滤波的基础上增加了一个阻抗变换的作用,其设计参数包含阻抗变换比.设计带宽参数等等,因为其良好的匹配特性所以经常使用在功率放大 ...

  3. 常用模拟低通滤波器的设计~经典 IIR 滤波器之巴特沃斯滤波器

    目录 常用模拟低通滤波器的设计--巴特沃斯(Butterworth)滤波器 1.确定系统函数的极点 2.巴特沃斯(Butterworth)滤波器 2.1.buttap 函数 2.2.buttord 函 ...

  4. matlab08a调节字体大小,MATLAB低通滤波器的设计代码

    本次试验中设计了不同窗函数的低通滤波器的比较环节.各个窗函数设计低通滤波器的思路是相似的,只是其中的窗函数是不同的. 单位冲激响应及其幅频响应及其代码 单位冲激响应的绘制思路比较简单,就是将一条直线用 ...

  5. 巴特沃斯数字低通滤波器的设计

    题目要求: 设计工作在采样频率80kHz的巴特沃斯数字低通滤波器,通带边界频率4kHz,通带最大衰减值0.5dB,阻带边界频率为20kHz,阻带最小衰减45dB.编程实现滤波器设计,并显示系统函数H( ...

  6. matlab 理想低通滤波器函数,基于MATLAB的理想低通滤波器的设计

    对于不同滤波器而言,每个频率的信号的强弱程度不同.当使用在音频应用时,它有时被称为高频剪切滤波器,或高音消除滤波器.低通滤波器概念有许多不同的形式,其中包括电子线路(如音频设备中使用的hiss 滤波器 ...

  7. 四阶巴特沃兹低通滤波器的设计与仿真

    一. 电路工作原理 1. 电路用途 滤波器是一种能使有用信号频率通过,同时抑制无用频率成分的电路,广泛应用于电子.电气.通信.计算机等领域的信号处理电路中.滤波器的种类很多,本电路是一个四阶巴特沃兹型 ...

  8. 电荷放大器+低通滤波器的设计

    电荷放大器+低通滤波器 摘要 以掌握电荷放大器及低通滤波器的功能和电路工作原理为目的,完成了电荷放大器的电路焊接和低通滤波器的电路焊接.首先对电荷放大器的电路工作原理和低通滤波器的电路工作原理做了理论 ...

  9. 基于ADS的截止频率为WIFI频率的低通滤波器的设计与实现

    滤波器的基础是谐振电路,它是一个二端口网络,对通带内频率信号呈现匹配传输,对阻带频率信号失配而进行发射衰减,从而实现信号频谱过滤功能.典型的频率响应包括低通.高通.带通和带阻特性.镜像参量法和插入损耗 ...

  10. RLC低通滤波器的设计和分析

    一.并联型 LC二阶低通滤波网络: (1)网络模型 (2)频域分析 二.串联型 LC二阶低通滤波网络: 该模型的G(s)为G(s)=1/CsR+sL+1/Cs 设计滤波器的参数过程: 1.时域分析(控 ...

最新文章

  1. 安装flex4 plug-in插件的时候遇到老是在起始处安装不起
  2. 关于es查询dsl的filter与must,term与match的区别
  3. 计算机基础知识学前自测,2011计算机二级C语言学前自测题:DOS的基本操作
  4. 判断一个程序员水平高低的标准?
  5. Android Gallery组件实现循环显示图像
  6. linux7.4 root密码,[RHEL 7.4] 忘记root密码,普通用户又没有sudo权限,怎么办?
  7. 南抖音北快手,智障界的两泰斗
  8. 基于STM32的智能鱼缸设计
  9. Centos7安装nxlog-2.9
  10. ES-Checker
  11. Filco圣手二代双模蓝牙机械键盘|科大讯飞鼠标连接Mac方法
  12. mysql LAST_DAY() 函数
  13. Scratch编程与美术:制作美丽的烟花!
  14. OpenGL学习笔记:光照贴图
  15. 升级至android 5.0,OPPO X9007 升级到Android5.0 Color2.1(root版) 详细纪实
  16. Dao,Service,Controller层作用
  17. linux运维笔记:动态网页资源
  18. 使用MATLAB连接USRP实现收发OFDM功能代码说明
  19. 百奥赛图与TRACON共同宣布YH001(CTLA-4单抗)联合恩沃利单抗(PD-L1)一线治疗软组织肉瘤的临床试验申请获得FDA批准
  20. ERR_CONNECTION_CLOSED

热门文章

  1. linux 海思hi3798m_海思Hi3798模块芯片,Hi3798处理器参数介绍
  2. 徐培成2017大数据Hadoop经典案例-徐培成-专题视频课程
  3. RANSAC算法简介
  4. Python 计算机视觉(五)特别篇 —— 透视变换
  5. linux下mysql将表导出_linux下mysql导出数据表命令
  6. python 贴吧小爬虫案例
  7. excel转word_Office批量打印精灵教程--Word、PDF、Excel、PPT批量打印及批量转PDF
  8. GHost win7(2016.05)版本安装后,清除流氓软件的过程
  9. 电子通信协议之SPI通信协议篇
  10. hash表 C++的使用以及理解