OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7598|回复: 8

数字滤波器C语言实现相关

[复制链接]

30

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2013-11-14
在线时间
7 小时
发表于 2015-1-25 14:36:31 | 显示全部楼层 |阅读模式
5金钱
最近看了一下数字滤波器的书,书上说明了求出    H(S)  的方法,但是都是用matlab来做的,想问问大神们,要怎么把H(s)做成C语言的程序,在单片机上实现

最佳答案

查看完整内容[请看2#楼]

H(s)是连续的,你要转成离散的要用双线性变换的方法。 这种方法构造的是IIR滤波器。因此你直接查IIR滤波器即可。 你也可以通过matlab,将IIR滤波器的差分方程的参数求出,直接在C下面写一个差分方程的函数,然后把求出的参数带入即可。
学海无涯,回不了头!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2015-1-25 14:36:32 | 显示全部楼层
H(s)是连续的,你要转成离散的要用双线性变换的方法。
这种方法构造的是IIR滤波器。因此你直接查IIR滤波器即可。
你也可以通过matlab,将IIR滤波器的差分方程的参数求出,直接在C下面写一个差分方程的函数,然后把求出的参数带入即可。
回复

使用道具 举报

30

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2013-11-14
在线时间
7 小时
 楼主| 发表于 2015-2-8 15:58:20 | 显示全部楼层
回复【2楼】lsj9383:
---------------------------------
我看书上的,设计IIR,通过参数设计出了H(S),然后通过双线性变换发得到H(Z)。这里我想通过单片机的到的是一串数据,相当于是x(n),那么怎么通过之前的H(Z)来的到我需要的经过滤波后的数据呢?
学海无涯,回不了头!!
回复

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2015-2-9 15:56:58 | 显示全部楼层
回复【3楼】电子小手:
---------------------------------
就是用差分方程。
回复

使用道具 举报

30

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2013-11-14
在线时间
7 小时
 楼主| 发表于 2015-2-9 17:25:57 | 显示全部楼层
回复【4楼】lsj9383:
---------------------------------
将H(Z)再进行逆变变换成X(n)吗?那个差分方程式怎么得到的呢?
学海无涯,回不了头!!
回复

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2015-2-9 18:03:03 | 显示全部楼层
回复【5楼】电子小手:
---------------------------------
IIR的H(z)逆变换只会得到无限长的h(n),根本不能用来进行铝箔(当然可以截取前N个数据的h(n),但是效果不好,还不如直接用fir),所以iir叫“无限冲激响应滤波器”。

得到H(z)的 分子的多项式系数,以及分母多项式系数,就可以得到差分方程了。

具体怎么个原理和公式,这个看书吧。
回复

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2015-2-9 18:06:19 | 显示全部楼层
差分方程就是指明了

当前的输出y(n), 是由“当前的输入(1个数据)”、“过去的输入(N个数据)”、“过去的输出(M个数据)”,这M+N+1个数据线性组合得到。

线性组合的系数就是差分方程的系数。
回复

使用道具 举报

30

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2013-11-14
在线时间
7 小时
 楼主| 发表于 2015-2-14 17:15:17 | 显示全部楼层
回复【7楼】lsj9383:
---------------------------------
十分感谢lsj9383的解惑,我大概明白了,还有个问题,就是目前常用的数字滤波器设计,用IIR多还是FIR多呢,分别又是哪种呢?用的单片机又是哪种呢?
学海无涯,回不了头!!
回复

使用道具 举报

108

主题

1433

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2234
金钱
2234
注册时间
2012-4-30
在线时间
7 小时
发表于 2015-2-16 14:45:12 | 显示全部楼层
回复【8楼】电子小手:
---------------------------------
要明白IIR和FIR的优缺点,才好进行选择。

计算量: FIR和IIR相比,相似性能的滤波器,IIR的阶数小得多,所以IIR计算量也相比FIR要小得多。
灵活性: IIR更灵活,我这里的灵活性主要是指可以选择通带最大衰减,阻带最小衰减的灵活选择。(FIR也可以,但是用的方法比较麻烦)
失真:  没有绝对理想的滤波器,多少有失真。FIR主要是窗函数带来的失真,这个失真在绝大部分场合都可以忽略。IIR带来的失真相对比较严重,尤其是相      位失真,很多场合后面要加个全通滤波器,将相位失真矫正。(IIR设计的滤波器相频响应是非线性的)

单片机计算能力差,一般用IIR。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-25 20:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表