理论上说,设计FIR滤波器是很简单的,给定一个期望的频率响应H(ω),对其进行傅里叶反变换就可以得到FIR滤波器的离散单位冲击响应。
![](https://box.kancloud.cn/2016-01-24_56a42342882ac.jpg)
实际使用中的问题是,这样得到的许多滤波器的滤波器阶数都是无穷的而且得到的滤波器不一定是因果系统。
比如理想低通滤波器,截止频率为ωc
![](https://box.kancloud.cn/2016-01-24_56a4234297842.jpg)
计算得到的滤波器系数为:
![](https://box.kancloud.cn/2016-01-24_56a42342a4f99.jpg)
一种简单的办法是将这个序列中间的一部分截取出来。也就是对信号加一个矩形的窗函数。
![](https://box.kancloud.cn/2016-01-24_56a42342b06c4.jpg)
当N = 33 截止频率ωc =0.2时滤波器的频率响应如下图所示,其中实线是理想低通滤波器的响应曲线。加窗的结果是频响曲线在通频带和阻带都产生了波动,偏离理想低通滤波器频响曲线最大的地方在ωc处。
![](https://box.kancloud.cn/2016-01-24_56a42342bf3bb.jpg)
除了用矩形窗函数,还可以采用其他形状的窗函数,不同类型的窗函数有不同的特点。关于不同窗函数的特征请参见数字信号处理方面的教材,这里不多说了。
### wfir
[wft,wfm,fr]=wfir(ftype,forder,cfreq,wtype,fpar)
Ftype 表示滤波器的类型,可以为'lp','hp','bp','sb'
Forder 为滤波器的阶数
Cfreq 为滤波器的转折频率,对于低通和高通滤波器来说提供一个截止频率就行了,对于带通和带阻滤波器要提供2个转折频率。这里的频率都是归一化了的,采样频率被归一化为1。
所以转折频率要小于 0.5。
Wtype 表示窗函数的类型,可以为 're','tr','hm','hn','kr','ch'
Fpar 表示窗函数的参数,长度为2的数组,只对 Kaiser 窗 和Chebyshev 窗有效。
对 Kaiser 窗fpar(1)>0, fpar(2)=0.
对Chebyshev 窗fpar(1)>0, fpar(2)<0 或者 fpar(1)<0, 0<fpar(2)<.5
返回值:
Wft 为返回的滤波器系数
Wfm 为滤波器的频响特性
Fr 为Wfm 对应的频率点
下面举一个具体的例子:
[h,hm,fr]=wfir("lp",33,[.2 0],"hm",[0 0]);
这个表示低通滤波器,33阶,截止频率0.2,hamming 窗
Plot(fr,hm);
![](https://box.kancloud.cn/2016-01-24_56a42342d0551.jpg)
窗函数法设计FIR滤波器器介绍这些也就差多不了,下次介绍频率抽样法。
- 前言
- gnuplot 中的数据平滑
- 利用 Maxima 求解常微分方程
- Maxima 的绘图功能 1
- Maxima 的绘图功能 2
- Maxima 的绘图功能 3
- Maxima 矩阵及矢量运算 1
- Maxima 矩阵及矢量运算 3
- Maxima 矩阵及矢量运算 4
- maxima 学习笔记(coeff 函数的应用)
- maxima 代数表达式变换
- maxima 学习笔记(基本微积分)
- maxima 代数方程求解
- Maxima 中的复数运算
- Maxima 的三角函数化简功能
- Maxima 的基本微积分操作
- 利用 gnuplot 绘制时间序列图
- gnuplot 入门教程 1
- gnuplot 入门教程 2
- gnuplot 入门教程 3
- gnuplot 入门教程 4
- gnuplot 读取逗号分隔的数据文件
- scilab 读取处理 wav 文件
- scilab 读取处理 wav 文件 (2)
- Scilab 处理声音数据(补充)
- 利用 SCILAB 设计 FIR 滤波器(窗函数法)
- 利用 SCILAB 设计 FIR 滤波器(Minimax法)
- 利用 SCILAB 设计 iir 滤波器设计(模拟滤波器双线性变换法)
- Scilab 的绘图函数(1)
- Scilab 的绘图函数(2)
- Scilab 的绘图函数(3)
- Scilab 的绘图函数(4)