收藏 分销(赏)

FIR-CCS-实验报告.doc

上传人:Fis****915 文档编号:552458 上传时间:2023-12-06 格式:DOC 页数:7 大小:229.50KB 下载积分:6 金币
下载 相关 举报
FIR-CCS-实验报告.doc_第1页
第1页 / 共7页
FIR-CCS-实验报告.doc_第2页
第2页 / 共7页


点击查看更多>>
资源描述
《DSP原理及应用》――FIR滤波器的C54X实现 一、 实验目的 用matlab获得FIR滤波器的抽头系数,用汇编语言实现FIR滤波器。产生一混频信号,用所设计的滤波器进行滤波,查看滤波器输出。 二、实验仪器 1.PC一台(win7系统); 2.Code Composer Studio 3.1 软件; 3.MATLAB 2009; 4.Dev C++ 6.0 软件。 三、实验要求 1.设计一个FIR低通滤波器,通带边界频率为2500Hz,通带波纹小于1dB;阻带边界频率为3000Hz,阻带衰减大于40dB;采样频率为10000Hz。 2.设计一个采样频率Fs为10000Hz,输入信号频率为2000Hz和3250Hz的合成信号,通过设计的低通滤波器将3250Hz信号滤掉,余下2000Hz信号。 3.用循环缓冲区和双操作数寻址方法编写实现FIR滤波的程序。 四、实验原理 如果FIR 滤波器的冲激响应为h(0),h(1), ...,h(N-1)。X(n)表示滤波器在n 时刻的输入,则n 时刻的输出为: y(n) = h(0)x(n) + h(1)x(n-1) + ... + h(N-1)x[n-(N-1)] 使用MAC 或FIRS 指令可以方便地实现上面的计算。 图1 说明了使用循环寻址实现FIR 滤波器的方法。为了能正确使用循环寻址,必须先初始化BK,块长为N。同时,数据缓冲区和冲激响应(FIR 滤波器的系数)的开始地址必须是大于N 的2 的最小幂的倍数。例如,N=11,大于N 的最小2 的幂为16,那么数据缓冲区的第一个地址应是16 的倍数,因此循环缓冲区起始地址的最低4 位必须是0。 在图1 中,滤波系数指针初始化时指向h(N-1),经过一次FIR 滤波计算后,在循环寻址的作用下,仍然指向h(N-1)。而数据缓冲区指针指向的是需要更新的数据,如x(n)。在写入新数据并完成FIR 运算后,该指针指向x(n-(N-1))。所以,使用循环寻址可以方便地完成滤波窗口数据的自动更新。 五、实验内容及步骤 1.FIR滤波器的设计 FIR滤波器的设计可以用MATLAB软件的窗函数法进行,这里选择Hamming窗,程序为: b=fir1(16,1500/8000*2) 得到FIR数字滤波器系数b为: b0 = 0 b9 = 0.2834 b1 = 0.0048 b10 = 0.0973 b2 = 0.008 b11 = -0.029 b3 = -0.0089 b12 = -0.0429 b4 = -0.0429 b13 = -0.0089 b5 = -0.029 b14 = 0.008 b6 = 0.0973 b15 = 0.0048 b7 = 0.2834 b16 = 0 b8 = 0.3745  在DSP汇编语言中,不能直接输入十进制小数,在MATLAB中进行如下转换: h=round(b*2^15) 将系数转换为Q15的定点小数形式,为: h0 = 0 h9 = 9287 h1 = 158 h10 = 3187 h2 = 264 h11 = -951 h3 = -290 h12 = -1406 h4 = -1406 h13 = -290 h5 = -951 h14 = 264 h6 = 3187 h15 = 158 h7 = 9287 h16 = 0 h8 = 12272  2.产生滤波器输入信号文件 以下是一个产生输入信号的C语言程序,信号是频率为1000Hz和2500Hz的正弦波合成的波形。文件名为firinput.c 。 #include <stdio.h> #include <math.h> void main() {  int i;  double f[256];  FILE *fp;  if((fp=fopen("firin.inc","wt"))==NULL)  {   printf("can't open file! \n");   return;  }  for(i=0;i<256;i++)  {   f[i]=sin(2*3.14159*i*1000/8000)+sin(2*3.14159*i*2500/8000);   fprintf(fp," .word  %ld\n",(long)(f[i]*32768/2));  }  fclose(fp); } 该程序产生名为firin.inc 的输入信号程序。Firin.inc文件的部分内容如下:  .word  0  .word  26722  .word  4798  .word  5315  .word  16384 : :  .word  -5319  .word  -4793  .word  -26721 在DSP汇编语言程序中通过.copy汇编命令将生成的数据文件firin.inc 复制到汇编程序中,作为FIR滤波器的输入数据。 3.编写FIR数字滤波器的汇编源程序 FIR数字滤波器汇编程序fir.asm如下:    .mmregs    .global start    .def   start,_c_int00              INDEX   .set  1 KS  .set   256   ;模拟输入数据缓冲区大小 N        .set    17                 COFF_FIR .sect  "COFF_FIR" ;FIR滤波器系数    .word  0    .word  158    .word  264    .word  -290    .word  -1406    .word  -951    .word  3187    .word  9287    .word  12272    .word  9287    .word  3187    .word  -951    .word  -1406    .word  -290    .word  260    .word  158    .word  0       .data INPUT      .copy  "firin.inc"  ;模拟输入在数据存储区0x2400 OUTPUT  .space 1024   ;输出数据在数据区0x2500         COFFTAB     .usect "FIR_COFF",N DATABUF  .usect "FIR_BFR",N BOS   .usect "STACK",0Fh TOS   .usect "STACK",1    .text    .asg AR0,INDEX_P    .asg AR4,DATA_P ;输入数据x(n)循环缓冲区指针    .asg AR5,COFF_P ;FIR系数表指针    .asg  AR6,INBUF_P ;模拟输入数据指针     .asg AR7,OUTBUF_P;FIR滤波器输出数据指针 _c_int00   b start   nop   nop start:   ssbx  FRCT     STM  #COFFTAB,COFF_P   RPT  #N-1    ;将FIR系数从程序存储器移动   MVPD #COFF_FIR,*COFF_P+ ;到数据存储器      STM #INDEX,INDEX_P    STM #DATABUF,DATA_P   RPTZ A,#N-1   STL A,*DATA_P+  ;将数据循环缓冲区清零      STM #(DATABUF+N-1),DATA_P  ;数据缓冲区指针指向x[n-(N-1)]   STM #COFFTAB,COFF_P   FIR_TASK:          STM #INPUT,INBUF_P            STM  #OUTPUT,OUTBUF_P             STM #KS-1,BRC          RPTBD LOOP-1          STM #N,BK   ;FIR循环缓冲区大小          LD *INBUF_P+,A  ;装载输入数据 FIR_FILTER:    STL A,*DATA_P+%    RPTZ A,N-1    MAC *DATA_P+0%,*COFF_P+0%,A    STH A,*OUTBUF_P+ LOOP: EEND B  EEND    .end 4.编写FIR滤波器链接命令文件 对应以上汇编程序的链接命令文件fir.cmd如下: firasm.obj -m  fir.map -o fir.out MEMORY {  PAGE 0: ROM1(RIX) :ORIGIN=0080H,LENGTH=100H              PAGE 1: INTRAM1(RW) :ORIGIN=2400H,LENGTH=0200H                     INTRAM2(RW) :ORIGIN=2600H,LENGTH=0100H       INTRAM3(RW) :ORIGIN=2700H,LENGTH=0100H        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   STACK   :   {}>B2B      PAGE 1  } 5.在Code Composer Studio 3.1 软件中将有关程序运行并调试。 六、实验结果及分析 1.观察输入信号的波形,如图2所示。   2.观察输入信号的频谱,如图3所示。   3.观察输出信号的波形,如图4所示。   4.观察输出信号的频谱,如图5所示。   七、实验总结 这次实验完成了FIR滤波器在DSP上仿真实现,对FIR滤波器有更深入的了解,进一步掌握对CCS软件的使用方法,巩固了对DSP汇编语言的理解,对以后深入学习有很大帮助。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服