logo资料库

使用Matlab和CCS实现FIR滤波器的设计.pdf

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
FIR 滤波器的设计 ——使用 Matlab 和 CCS 摘要: 本文通过使用 Matlab 软来辅助 CCS 设计 FIR 滤波器,图文并茂,讲解详细, 思路清晰。 设计流程如下图 用 Matlab 中 Fdatool 设计滤波器 导出滤波器系数表 用 Matlab 产生待滤 波数据 在 CCS 中设计 FIR 滤波器程序 输出滤波并观 察波形 By Craftor
1、使用 Matlab 中的 Fdatool 设计滤波器(本文以 FIR 带通 滤波器为例) 1.1、在 Matlab 的 Start 菜单中选择 Toolboxes -> Filter Design -> Filter Design & Analysis Tools(fdatool),或者在命令行中输入 fdatool 来启动滤波器设计分析器。 启动成功后界面如图 1-1 所示。 图 1-1 1.2、在选项中选择或输入滤波器参数,然后点击“Design Filter”按钮,完成滤 波器的设计。具体参数及设计成功后的结果如图 1-2 图 1-2 By Craftor
1.3、从 Matlab 中导出 FIR 滤波器系数。 a.在 Fdatool 中,选择 Targets -> Code Composer Studio (tm) IDE,如图 1-3。 b.在出现的对话框中选择输出文件类型为 C header file,输出系数类型为 signed 16-bit integer,如图 1-4 所示。 c.点击 Generate 按钮,选择路径,即可输出前一步设计出的 FIR 滤波器的系 数表。(假设生成的系数表文件为 fdacoefs.h) 图 1-3 图 1-4 By Craftor
2、利用 Matlab 产生噪声信号用于滤波器测试 将下面代码另存为 M 文件,在 Matlab 中运行后将会生成 input.dat 文件。该 数据文件中含有 500Hz、3000Hz、8000Hz 三种频率的信号,用于滤波器滤波效 果测试。信号的时域图和频谱分别图 2-1、图 2-2 所示。 f11=500; %/Hz f12=3000; %/Hz f13=8000; %/Hz fs=10000; %/采样 Hz N=1000 %数据个数 T=1/fs; %采样周期 n=0:N; x11=sin(2*pi*f11*n*T); x12=0.7*sin(2*pi*f12*n*T); x13=0.5*sin(2*pi*f13*n*T); x_base=(x11+x12+x13); %待滤波信号波形 figure(1) plot(x_base) %待滤波信号频谱 figure(2) yff=abs(fft(x_base)) df=n*(fs/N) plot(df,yff) xout=x_base/max(x_base);%归一化 xto_ccs=round(32767*xout) fid=fopen('input.dat','w');%打开文件 fprintf(fid,'1651 1 0 0 0\n');%输出文件头 fprintf(fid,'%d\n',xto_ccs);%输出 fclose(fid); By Craftor
2.5 2 1.5 1 0.5 0 -0.5 -1 -1.5 -2 -2.5 0 500 450 400 350 300 250 200 150 100 50 0 0 200 400 600 800 1000 1200 图 2-1 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 图 2-2 By Craftor
3、在 CCS 中编写 FIR 滤波器程序(本文以 C 语言为例) //输入缓冲,在仿真时将从内存载入 //输出缓冲,直接存放在内存中 //FIR 滤波器的级数+1,本例中滤波器级数为 80 //待滤波的数据长度 3.1、新建工程,作者是以 C54x Simulator 为例,新建工程的过程就不再赘述。 3.2、编写 C 语言源代码并导入工程,如下: #include "stdio.h" #include "fdacoefs.h" //fdacoefs.h 为 Matlab 生成的系数表头文件 //如运行不通过,请修改 fdacoefs.h 中的代码,将”#include”这行修改为如下: //#include "d:\MATLAB7\extern\include\tmwtypes.h" //也就是自己机器上的 Matlab 安装的绝对路径 #define N 81 #define LEN 200 long yn; int input[LEN]; int output[LEN]; void main() { } 3.3、cmd 文件如下,其实是从 CCS 软件中的例子里复制过来的 MEMORY { PAGE 0: EPROG: origin = 0x1400, len = 0x7c00 VECT: origin = 0xff80, len = 0x80 PAGE 1: USERREGS: origin = 0x60, len = 0x1c BIOSREGS: origin = 0x7c, len = 0x4 IDATA: origin = 0x80, len = 0x1380 int i,j; int *x; for(j=0;j>15; yn += B[i]*(*x++); By Craftor
EDATA: origin = 0x1400, len = 0x8000 EDATA1: origin = 0x9400, len = 0x4c00 } SECTIONS { .vectors: {} > VECT PAGE 0 .sysregs: {} > BIOSREGS PAGE 1 .trcinit: {} > EPROG PAGE 0 .gblinit: {} > EPROG PAGE 0 frt: {} > EPROG PAGE 0 .text: {} > EPROG PAGE 0 .cinit: {} > EPROG PAGE 0 .pinit: {} > EPROG PAGE 0 .sysinit: {} > EPROG PAGE 0 .bss: {} > IDATA PAGE 1 .far: {} > IDATA PAGE 1 .const: {} > IDATA PAGE 1 .switch: {} > IDATA PAGE 1 .sysmem: {} > IDATA PAGE 1 .cio: {} > IDATA PAGE 1 .MEM$obj: {} > IDATA PAGE 1 .sysheap: {} > IDATA PAGE 1 .stack: {} > IDATA PAGE 1 } 3.4、另外还要导入 rts.lib 文件,在…\ti\c5400\cgtools\lib 文件夹下。 By Craftor
4、滤波器仿真测试 4.1、在第 3 部分编译成功后会在”<工程所以目录>/debug”文件夹下产生*.out 文 件,在 CCS 软件的 File->Load Program 里打开这个.out 文件(图 4-1) 4.2、将滤波器设计文件载入到内存中 4.2.1、选择 File->Data->Load…打开之前 Matlab 生成的 input.dat 文件(图 4-2) 图 4-1 4.2.2、将 Address 设置为 input,Length 设置为 200,Page 设置为 Data(图 4-3) 图 4-2 图 4-3 By Craftor
分享到:
收藏