打印
[DSP编程]

请教一下关于FIR滤波器的公式?

[复制链接]
3041|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sdtsd|  楼主 | 2014-8-16 15:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
zhangmangui| | 2014-8-16 16:18 | 只看该作者
实验1 有限冲激响应滤波器(FIR)的实现
【实验目的】
1、 熟悉FIR滤波器的特点和结构
2、 掌握FIR滤波器的matlab设计
3、 实现FIR滤波器在DSP中的实现和3.5TFT屏上的波形显示
【实验设备】
        计算机、数字信号处理双核实验箱、TDS510仿真器
【实验原理】
1. FIR滤波器的特点和结构
有限冲激响应滤波器是信号处理中常用的一种滤波器,这种滤波器有如下优点:
Ø 容易实现线性相位:只要保证系数的偶对称,就很容易实现线性相位;
Ø 可以实现任意形状滤波器:通过窗函数法可以方便的实现多通道、多阻带滤波器;
Ø 稳定性好:因为FIR滤波器没有反馈,是自然稳定的。
FIR滤波器也有一些缺点:
Ø 设计FIR滤波器无法直接设定阻带衰减指标:为了达到阻带衰减指标往往要多次更改设计参数,直到通带、阻带性能达到要求;
Ø 阶数较大:要满足理想的滤波器性能需求比无限冲激响应滤波器更长的阶数;
Ø 过渡带性能和实时性之间存在矛盾:要使FIR滤波器的过渡带尽量小就需要较长的阶数,这就需要在过渡带性能和实时性之间寻求平衡。
2. FIR滤波器差分方程
file:///C:\Users\ZMG\AppData\Local\Temp\ksohtml\wps3684.tmp.png为输入序列,file:///C:\Users\ZMG\AppData\Local\Temp\ksohtml\wps3685.tmp.png为输出序列,file:///C:\Users\ZMG\AppData\Local\Temp\ksohtml\wps3686.tmp.png为滤波器系数,N为滤波器阶数。
file:///C:\Users\ZMG\AppData\Local\Temp\ksohtml\wps3687.tmp.png
【实验内容】
按要求设计低通FIR滤波器,要求通带边缘频率10KHz,阻带边缘频率22KHz,阻带衰减75dB,采样频率50KHz
【实验步骤】
1. 参数计算
窗函数选定:阻带衰减75dB,选择blackman窗;截止频率:2pi*(10+(22-10)/2)/50=0.64pi
窗函数长度:blackman窗的过渡带宽为5.98,单位为2pi/N,而要设计的低通滤波器的过度带宽为2pi*12/50=0.48pi,两者相等,得N=24.9,取25
2. 滤波器的脉冲响应
理想低通滤波器脉冲响应:
h1[n] = sin(nΩ1)/n/pi = sin(0.64pi*n)/n/pi
窗函数为:
w[n] = 0.42 - 0.5cos(2pi*n/24) + 0.8cos(4pi*n/24)
则滤波器脉冲响应为:
h[n] = h1*w[n]    |n|<=12
h[n] = 0               |n|>12
3. 滤波器的差分方程
根据滤波器的脉冲响应计算出h[n],然后将脉冲响应值移位为因果序列,下面将利用matlab计算h[n]的值,具体如下:
>> Window=blackman(25);
>> b=fir1(24,0.64,Window);
>> freqz(b,1)
>> b=roundn(b,-3)    %任意位四舍五入
b =
  Columns 1 through 8
        0      0    0.0010   -0.0020   -0.0020    0.0100   -0.0090   -0.0180
  Columns 9 through 16
    0.0490   -0.0200   -0.1100    0.2800    0.6400    0.2800   -0.1100   -0.0200
  Columns 17 through 24
    0.0490   -0.0180   -0.0090    0.0100   -0.0020   -0.0020    0.0010     0
  Column 25
     0
最后得到滤波器的差分方程为:
y[n] =   0.001x[n-2] - 0.002x[n-3] - 0.002x[n-4] + 0.01x[n-5] - 0.009x[n-6] - 0.018[n-7]
+ 0.049x[n-8] -0.02x[n-9] - 0.11x[n-10] + 0.28x[n-11] + 0.64x[n-12] + 0.28x[n-13] - 0.11[n-14] - 0.02x[n-15] + 0.049x[n-16] - 0.018x[n-17] - 0.009x[n-18] + 0.1x[n-19] - 0.002x[n-20] - 0.002x[n-21] + 0.001x[n-22]

使用特权

评论回复
板凳
zhangmangui| | 2014-8-16 16:20 | 只看该作者
x()就是你要处理的数据啊   一次一次送入的数据

使用特权

评论回复
地板
sdtsd|  楼主 | 2014-8-16 16:22 | 只看该作者
zhangmangui 发表于 2014-8-16 16:18
实验1 有限冲激响应滤波器(FIR)的实现【实验目的】1、 熟悉FIR滤波器的特点和结构2、 掌握FIR滤波器的matla ...

最后得到滤波器的差分方程为:
y[n] =   0.001x[n-2] - 0.002x[n-3] - 0.002x[n-4] + 0.01x[n-5] - 0.009x[n-6] - 0.018[n-7]
+ 0.049x[n-8] -0.02x[n-9] - 0.11x[n-10] + 0.28x[n-11] + 0.64x[n-12] + 0.28x[n-13] - 0.11[n-14] - 0.02x[n-15] + 0.049x[n-16] - 0.018x[n-17] - 0.009x[n-18] + 0.1x[n-19] - 0.002x[n-20] - 0.002x[n-21] + 0.001x[n-22]

这个最后得到的差分方程,n=0时,y[n]是多少?x[-2]是多少?x数组里面标号最小是0吧,怎么会有负数?麻烦版主解释一下

使用特权

评论回复
5
sdtsd|  楼主 | 2014-8-16 16:24 | 只看该作者
zhangmangui 发表于 2014-8-16 16:20
x()就是你要处理的数据啊   一次一次送入的数据

可是我的要处理的数据是一个数组,是x[0],x[1],x[2].....这样一个从AD采样来的数据,按照你上面的公式,当要得到y[0]时,x的标号就成了负数,怎么回事呢

使用特权

评论回复
6
zhangmangui| | 2014-8-16 16:40 | 只看该作者
sdtsd 发表于 2014-8-16 16:22
最后得到滤波器的差分方程为:
y[n] =   0.001x[n-2] - 0.002x[n-3] - 0.002x[n-4] + 0.01x[n-5] - 0.009 ...

AD采集的数据一次一次送入计算    当n等于10时   前面送入的1-9不就有了吗

使用特权

评论回复
7
sdtsd|  楼主 | 2014-8-16 16:59 | 只看该作者
zhangmangui 发表于 2014-8-16 16:40
AD采集的数据一次一次送入计算    当n等于10时   前面送入的1-9不就有了吗

那且不是没有y[0]了,输出数组y是从y[10]开始了?

使用特权

评论回复
8
yubsh| | 2014-8-16 17:32 | 只看该作者
最初N个输入数据,是不完全滤波,不能这样带入公式。同样,最后N个数据点也是不完全滤波。
至于这些个点怎么求解,我也很想知道。希望你有结果了,公布一下。

使用特权

评论回复
9
icekoor| | 2014-8-17 09:35 | 只看该作者
开始时,n为0时,x(0)之前全为零。FIR滤波器是多个x乘上系数决定了y,x不断被新采集的数据覆盖,从何y也断跟着变化。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

26

帖子

0

粉丝