DSP技术及应用实验报告 实验四

更新时间:2023-10-26 02:33:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

DSP技术及应用实验报告 姓名: 学号:

实验四 FIR数字滤波器

一、实验目的:

1.学习数字滤波器的DSP实现原理和C54X编程技巧; 2.通过CCS的图形显示工具观察输入/输出信号波形以及频谱的变化。 二、实验原理:

在数字信号处理中,滤波占有极其重要的作用。数字滤波是谱分析、通信信号处理等应用中的基本处理算法,数字滤波是DSP最基本的应用领域。

1. FIR滤波器的基本原理

数字滤波是将输入的信号序列,按规定的算法进行处理,从而得到所期望的输出序列。一个线性位移不变系统的输出序列y[n]和输入序列x[n]之间的关系,应满足常系数线性差分方程。FIR滤波器的差分方程为:

y(n)??bix(n?i)

i?0N?1FIR滤波器的传递函数为:

Y(z)N?1?i??biz H(z)?X(z)i?0

由上面的公式可知,FIR滤波算法实际上是一种乘法累加运算。它不断地从输入端读入样本值x[n],经延时(z?1)后做乘法累加,输出滤波结果y[n]。 2. FIR滤波器的设计

FIR滤波器的设计方法主要有窗函数法和频率采样法,其中,窗

第 1 页

DSP技术及应用实验报告 姓名: 学号:

函数法是最基本的方法。具体设计方法可参见《数字信号处理》。DSP设计者可以利用功能强大的MATLAB工具很方便的设计出逼近理想特性的FIR滤波器,然后将此FIR系数放入DSP程序中。 3. FIR滤波器的DSP实现

FIR滤波器的输出表达式为

y[n]?b0x[n]?b1x[n?1]??bn-1x[n?N?1]

式中,bi为滤波器系数;x[n]为滤波器在n时刻的输入;y[n]为n时刻的输出。可见,FIR滤波器不断地对输入样本x[n]进行n-1延时后,再进行乘法累加,最后输出滤波结果y[n],因此FIR滤波器实际上是一种乘法累加运算。

在DSP中FIR是将待滤波的数据序列与滤波系数序列相乘后再相加,同时要模仿FIR结构中的延迟线将数据在存储器中滑动。为了实现FIR滤波器的延迟线z?1,C54x可以通过两种方法实现,即线性缓冲区法和循环缓冲区法。本实验采用循环缓冲区法。

循环缓冲区方法实现N阶FIR滤波器时,需要在数据存储器中开辟一个称为滑窗的N个单元的缓冲区,用来存放最新的N个输入样本。每当输入新的样本时,以新样本改写滑窗中最老的数据,而滑窗的其他数据不需要移动。因此,在循环缓冲区新老数据不很直接明了,但它不用移动数据,不需要在一个机器周期中要求进行一次读和一次写的数据存储器,因此,可将循环缓冲区定位在数据存储器的任何位置,而不像线性缓冲区要求定位在DARAM中那样。

实现循环缓冲区间接寻址的关键问题是,如何使N个循环缓冲区单元首尾单元相邻,这就需要采用C54x所提供的循环寻址方式来实现。采用循环寻址,须注意以下两点:

第一,必须采用BK(循环缓冲区长度)寄存器按模间接寻址来实现。

在实现N阶FIR时,设定BK的值为FIR的阶数,就能保证循环缓冲区的指针ARx始终指向循环缓冲区,实现循环缓冲区顶部和底部的相邻。

例如:(BK)= N=8,(AR1)=0060h,用“*AR1+%”间接寻址。

第 2 页

DSP技术及应用实验报告 姓名: 学号:

第1次间接寻址后,AR1指向0061h单元; 第2次间接寻址后,AR1指向0062h单元; ……

第8次间接寻址后,AR1指向0068h单元; 再将BK按8取模,AR1又回到0060h。

第二,为使循环寻址正常进行,所开辟的循环缓冲区的长度必须是2k>N,其中k是整数,N是FIR滤波器的级数,而且循环缓冲区的起始地址必须对准2k的边界,即循环缓冲区的基地址的k个最低有效位必须为0,如N=31时,由于25=32>31,k=5,该地址的最低5位为0,所以循环缓冲区必须从二进制地址xxxx xxx0 0000B开始。

可见,在循环寻址实现FIR滤波器时,首先将N加载到BK寄存器中,然后指定一个辅助寄存器ARx指向循环缓冲区,并根据ARx的低k位作为循环缓冲区的偏移量进行所规定的寻址操作。寻址完成后,根据循环寻址算法(即以BK寄存器中的值为模对ARx的值进行取模运算)修正这个偏移量,并返回ARx的低k位。下面是利用循环缓冲区和双操作数寻址方法实现的FIR滤波器的汇编语言程序。

设N?7,FIR滤波器的算法为:

y[n]?b0x[n]?b1x[n?1]?b2x[n?2]?b3x[n?3]?b4x[n-4]+b5x[n-5]+b6x[n-6] 存放输入数据的循环缓冲区和系数表均设在DARAM中,利用MAC指令,实现双操作数的相乘和累加运算。如:

RPTZ A, #6 ;累加器A清0,设置迭代次数 MAC *AR2+0%, *AR3+0%, A ;完成乘法-累加并移位 STH A, @y ;暂存y[n] 三、实验内容:

1. 设计一个FIR低通滤波器,通带边界频率为1500Hz,通带波纹小于1dB,阻带边界频率为2000Hz,阻带衰减大于40dB,采样频率为8000Hz。并用C54x汇编语言实现。

2. 在使用CCS的Simulator进行滤波器特性测试时,需要输入时间信号x(n)。用C语言程序产生信号频率为1000Hz和2500Hz的正弦波合成波形,作为滤波器输入信号。

3. 通过CCS的图形显示工具观察输入/输出信号波形以及频谱的变

第 3 页

DSP技术及应用实验报告 姓名: 学号:

化。 四、实验设备:

1.PC机一台;2.CCS开发软件一套; 五、实验步骤:

(1) 利用MATLAB工具箱设计FIR滤波器,这里选择Hamming窗函数法进行设计,并建立DSP汇编程序的FIR滤波器系数文件。 (2) 编写程序产生滤波器输入信号的文件

在使用CCS的Simulator进行滤波器特性测试时,需要输入时间信号x(n)。下面给出一个产生输入信号的C语言程序,这个信号是频率为1000Hz和2500Hz的正弦波合成的波形,文件名为firinput.c。该程序将产生名为firin.inc的输入信号程序。

#include #include void main() {

int i;

double f[256]; FILE *fp;

if((fp=fopen(\ {printf(\ return;}

fprintf(fp,\for(i=0;i<=255;i++)

{f[i]=sin(2*3.14159*i*1000/8000)+sin(2*3.14159*i*2500/8000);

fprintf(fp,\fclose(fp); }

(3)编写应用FIR数字滤波器对正弦波合成信号滤波的汇编程序。见参考程序。

(4)创建工程, 编译/连接/调试上述程序,并利用图形显示窗口观察产生的波形和频谱。

第 4 页

DSP技术及应用实验报告 姓名: 学号:

时域输出图:

频域输出图:

实验程序:

* 201216104.asm *

.mmregs

.def _c_int00 INDEX .set 1 KS .set 256

.copy \ .data

OUTPUT .space 1024 ;输出在数据区0x2400 COFFTAB .usect \N DATABUF .usect \ N

.text

.asg AR0, INDEX_PSTACK

第 5 页

DSP技术及应用实验报告 姓名: 学号:

.asg AR4, DATA_P .asg AR5, COFF_P .asg AR6, INBUF_P .asg AR7, OUTBUF_P _c_int00:

B start start:

STM #COFFTAB, COFF_P RPT #N-1

MVPD #COFF_FIR, *COFF_P+ ;传送抽头系数,从PM到DM STM #INDEX, INDEX_PSTACK STM #DATABUF, DATA_P RPTZ A, #N-1

STL A, *DATA_P+ STM #(DATABUF+N-1), DATA_P STM #COFFTAB, COFF_P FIR_TASK:

STM #INPUT, INBUF_P

STM #OUTPUT, OUTBUF_P STM #KS-1, BRC

RPTBD LOOP-1 ;此外层循环求整个输出 ;y[n],n=0,1,...,255 STM #N, BK LD *INBUF_P+, A FIR_FILTER:

STL A, *DATA_P+%

RPTZ A, #N-1 ;此内层循环求每一个输出y[n] MAC *DATA_P+0%, *COFF_P+0%, A ;实现y(n)??bix(n?i)

i?0N?1 STH A, *OUTBUF_P+ LOOP: B LOOP .end

――――链接命令文件201216104.cmd――――

MEMORY {

PAGE 0: ROM1(RIX) :ORIGIN=0080h,LENGTH=1000h

第 6 页

DSP技术及应用实验报告 姓名: 学号:

PAGE 1: INTRAM1(RW) :ORIGIN=2400h,LENGTH=0200h INTRAM2(RW) :ORIGIN=2600h,LENGTH=0100h INTRAM3(RW) :ORIGIN=2700h,LENGTH=0100h INTRAM4(RW) :ORIGIN=2800h,LENGTH=0040h B2B(RW) :ORIGIN=0070h,LENGTH=10h }

SECTIONS {

.text : {}>ROM1 PAGE 0 .data : {}>INTRAM1 PAGE 1 FIR_COFF : {}>INTRAM2 PAGE 1 FIR_BFR : {}>INTRAM3 PAGE 1 FIR_VARS : {}>INTRAM4 PAGE 1 .stack : {}>B2B PAGE 1

}

六.实验总结

通过本次实验的学习,让我更好的了解到硬件设施和软件设施要紧密结合才能让他们发挥更大的作用!

第 7 页

本文来源:https://www.bwwdw.com/article/oks2.html

Top