当前位置:文档之家› DSP的FIR设计(低通滤波)C语言编写

DSP的FIR设计(低通滤波)C语言编写


三、FIR 滤波器的 MATLAB 实现
MATLAB 辅 助 DSP 实 现 FIR , 其总体过程为在 DSP 中编写 处理程序 ,在 MATLAB中利用滤波器设计、 分析工具( FDATOOL) ,根据指定的滤波器性能快速 设计一个FIR ,再把滤波器系数以头文件形式导入CCS 中,头文件中MATLAB 辅 助DSP 实现FIR 数字滤波器含滤波器阶数和系数数组,在MATLAB中调试、运行 DSP 程序并显示、分析处理后的数据。使用该方法,便于采用汇编语言来实现程 序。头文件名不变,当MATLAB中设计的滤波器系数改变时,相应头文件中系数也 改变,方便程序调试、仿真。 (1)输入信号的产生 首先利用 Matlab 产生导入 CCS 的 dat 文件,具体实现如下代码所示 sl=500; %有效信号 ns1=3000; %高频噪声 ns2=8000; %高频噪声 fs=20000; %采样频率 N=1000; T=1/fs; n=0:N; signal=sin(2*pi*sl*n*T); noise1=0.7*sin(2*pi*ns1*n*T); noise2=0.4*sin(2*pi*ns2*n*T); x=(signal+noise1+noise2);%待滤波信号 figure(1) plot(x) figure(2) y=abs(fft(x));%待滤波频谱 df=n*(fs/N); plot(df,y) figure(3) plot(signal) figure(4) ysignal=abs(fft(signal));%滤波后频谱 df=n*(fs/N); plot(df,ysignal) %滤波数据导出 xout=x/max(x); %归一化
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
0
200
400
600
800
1000
1200
图 输出时域波形
频谱如图所示
500
450
400
350
300
250
200
150
100
50
0
0
0.2
0.4
0.6
8
1
1.2
1.4
1.6
1.8 x 10
2
4
图 输出频谱
(2)滤波器的设计 MATLAB 集成了一套功能强大的滤波器设计工具 FDATool(Filter Design & Analysis Tool) ,可以完成多种滤波器的设计、分析和性能评估。 a.打开 Filter Design & Analysis Tool 单击 MATLAB 主窗口下方的“Start”按钮,选择菜单“ToolBox” →“Filter Design” →“Filter Design & Analysis Tool(FDATool) ”命令,打开 FDATool, 如图所示。
分别观察滤波前后的时域波形图
图 滤波前时域波形
图 滤波后时域波形
五、FIR 滤波器的 DSP 实现
(1)DSP 中滤波器的 z 算法实现 FIR 滤波器的输出表达式为
y (n) h(i )x(n i )
n 0 N 1 N / 2 1 n 0
1
h(i)s(n i)
式中,为滤波器系数;x(n)表示滤波器在 n 时刻的输入;y(n)为 n 时刻的输出。 它的基本算法是一种乘法-累加运算,即不断地输入样本 x(n),经过延时后, 再进行乘法-累加,最后输出滤波结果 y(n)。 1)线性缓冲区法:线性缓冲区法又称延迟线法,其特点: (a)对于 N 级的 FIR 滤波器, 在数据存储器中开辟一个 N 单元的缓冲区 (滑 窗) ,用来存放最新的 N 个输入样本; (b)从最老样本开始取数,每取一个样本后,将此样本向下移位; (c)读完最后一个样本后,输入最新样本存入缓冲区的顶部。 2)循环缓冲区法:循环缓冲区法的特点如下: (a)对于 N 级 FIR 滤波器,在数据存储器中开辟一个 N 单元的缓冲区(滑 窗) ,用来存放最新的 N 个输入样本; (b)从最新样本开始取数; (c)读完最后一个样本(最老样本)后,输入最新样本来代替最老样本, 而其他数据位置不变; (d)用片内 BK(循环缓冲区长度)寄存器对缓冲区进行间接寻址,使循环 缓冲区地址首尾相邻。本次设计的 FIR 滤波器所采用的就是循环缓冲区法。 (2)C 语言实现 FIR
f( ) argH(e j ) 是使频率产生严重的非线性的原因。但是在图像处理、数据传
输等波形传递系统中都越来越多的要求信道具有线性的相位特性。 在这方面 FIR 滤波器具有它独特的优点,设 FIR 滤波器单位脉冲响应 h(n)长度为 N,其系统函 数 H(z)为
H ( z ) h( n) z n
图 fadatool 的启动
b.产生滤波器 (chebyshev) , 阶数为 81 阶, 这里应填 80, 比阶数少 1。 窗函数选择切比雪夫型 采样频率为 20000Hz,通带截止频率为 750Hz。
图 滤波器的幅频特性
图 滤波器的相位特性
c.产生滤波器系数和头文件
图 滤波器系数
图 头文件的产生
采用 C 语言算法在 DSP 平台上实现了 FIR 低通数字滤波器,C 语言算法相 比于汇编算法可移植性很强。这里是在 TMS320VC5510DSP 为平台编写的 C 语 言算法, 此算法可以稍加改动用在其他 DSP 芯片上, 而汇编算法则不然。 这种方 法具有以下优点: (a) 程序的入口和出口由 C 语言自动管理,不必手工编写汇编程序实现。 (b) 程序结构清晰,可读性强。 (c) 程序调试方便。由于 C 程序中的变量全部由 C 语言来定义,因此采用 C 源码调试器可以方便地观察 C 语言变量。 (d) 可移植性较强,通用性较好。 具体代码如下: #include"stdio.h" #include"fdacoefs.h" //头文件包含滤波器的系数 #define N 81 //定义滤波器的阶数为 81 阶 #define Length 200 //定义缓冲区数组大小为 200 long yn; int input[Length]; //存放输入数据 int output[Length]; //存放输出数据 void main() { int m,n; int *x; for(n=0;n<Length-1;n++) //循环导入数据 { x=&input[n]; //指针指向每次导入的数据 yn=0; //每做完一次乘累加后,把值赋给 output 数组后,从新归 0 for(m=0;m<N-1;m++) yn+=B[m]*(*(x++)); //做 N 次的乘累加 output[n]=yn; 把值赋给 output 数组 } while(1); //做完滤波后使程序保持在本循环中 } (3)CSS 仿真调试 CCS 是 TI 推出的用于开发其 DSP 芯片的继承开发调试工具, 集编辑、编 译、 链接、 软件仿真、 硬件调试及实时跟踪等功能于一体, 极大地方便了 DSP 程 序的设计与开发, 此外还提供图形显示功能, 方便用户观察特定地址的波形。此 外, 还需向工程中添加 Link. cmd 文件(源码见附录) 。 在 CCSV3.3 中建立工程,把 c 源代码和.cmd 文件导入后,外加 rts. lib 文件, 它是 TI 提供的运行时支持库, 如果是 C 代码写的源程序, 必须要包含该库,该库
y ( n) a k x ( n k )
k 0 N 1
对上式进行Z变换得到FIR滤波器的传递函数为:
H z Y z N 1 k bk z X z i 0
由上式可以看出,H(z)是 z 1 的N-1次多项式,它在z平面内有N-1个零点,同 时在原点处有N-1个重极点。 N阶滤波器通常采用N个延迟单元、 N个加法器与N+1 个乘法器,取图中(a)、(b)两种结构。
切比雪夫逼近理论,这样的多项式是存在的,且是唯一的,并指出了构造这种最 佳一致逼近多项式的方法,就是有名的“交错点组定理”。 切比雪夫逼近理论解决了p(x)的存在性、唯一性和如何构造等问题。 J.H.McClellan、 T.W.Parks、L.R.Rabiner 等人应用切比雪夫逼近理论提出了一
种设计FIR滤波器的计算机辅助算法。 这种算法由于是在一致意义上对 H d e jw 作 最佳逼近, 因而获得了较好的通带和阻带性能,并能准确地指定通带和阻带的边 缘。但它的效率依赖于初始极值频率点的估计,且通带和阻带内波纹数较多,这 是Chebyshev方法的两个主要缺点。
n 0
N 1
H(z)是 z 1 的(N-1)次多项式,它在 z 平面上有(N-1)个零点,原点 z=0 是(N-1)阶重 极点。因此,H(z)永远稳定,它可以在幅度特性随意设计的同时,保证精确、严 格的线性相位。 (2)FIR 滤波器的基本结构 数字滤波是将输入的信号序列,按规定的算法进行处理,从而得到所期望的 输出序列,FIR滤波器的差分方程为:
图 FIR滤波器的一般结构
因为FIR滤波器的单位抽样响应是有限长的,所以它永远是稳定的。另外, 若对 h(n)提出一些约束条件,那么可以很容易地使 H(z)具有线性相位,这在信 号处理的很多领域是非常重要的。FIR滤波器的设计任务,是要决定一个转移函 数H(z),使它的频率响应满足给定的要求。这里所说的要求,除了通带频率 p 、 阻带频率及两个带上的最大和最小衰减 p 和 s 外,很重要的一条是保证H(z)具 有线性相位。 (3)Chebyshev逼近法 窗函数法和频率采样法设计出的滤波器的频率特性都是在不同意义上对所 给理想频率特性 H d e jw 的逼近。由数值逼近理论可知,对某个函数f(x)的逼近 一般有以下三种方法: 插值法(Interpolating Way) 最小平方逼近法(Least Square Approaching Way) 一致逼近法(Consistent Approaching Way) 切比雪夫最佳一致逼近的基本思想是,对于给定区间[a,b]上的连续函数
相关主题