当前位置:首页 > DSP硬件实验 - 图文
实验二:有限冲击响应低通滤波器(FIR)实验
一、实验目的
1.掌握用窗函数法设计FIR数字滤波器的原理和方法; 2.熟悉线性相位FIR数字滤波器特性; 3.了解各种窗函数对滤波特性的影响。
二、实验设备
计算机、CCS 软件、DSP仿真器、EXPIII+实验箱
三、实验原理
1.有限冲击响应数字滤波器的基础理论;
2.模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、贝塞尔滤波器); 3.数字滤波器系数的确定方法。
四、实验步骤
1.复习如何设计FIR数字滤波。阅读本实验原理,掌握设计步骤; 2.阅读本实验所提供的样例子程序;
3.运行CCS软件,对样例程序进行跟踪,分析结果; 4.填写实验报告。
5.样例程序实验操作说明
五、源代码
【C程序.Exp-FIR-AD.c】
;* 文件名称 : Exp-FIR-AD.c ;* 适用平台 : EXPIII+实验系统 ;* CPU类型 : DSP TMS320VC54X
45
;* 软件环境 : CCS3.1 (5000系列)
;* 试验接线 : 1、实验箱的拨码开关SW2.4置OFF(54x的译码有效);54x CPU板的跳线J2的1、2短接
;* (HPI 8位模式);SW1的2、6置ON,其余置OFF(HPI使能;DSP工作微处理器方式;
;* CPU_CS=0);SW2全部置ON(FLASH工作在数据空间,LED灯D5的工作状态处于灭状态);
;* 2、SW2的sw2=ON,sw1=OFF;对应2X的pdpinta和5X的int1中断分配给AD中断使用;JP3的
;* 3、6位置ON,其余置OFF; ;* 3、用导线连接\信号源\号孔\信号源1\和\单元\号孔\;置拨码开关S23的第
;* 1位拨到OFF,用示波器分别观测模拟信号源单元的2号孔\信号源1\和\信号源2\输出的
;* 模拟信号,分别调节信号波形选择、信号频率、信号输出幅值等旋钮,直至满意,置
;* 拨码开关S23的第1位拨到ON,两信号混频输出; ;* 试验现象 : 用图形观察窗口观察fir结果.
;*************************************************************/ #pragma CODE_SECTION(vect,\
#include \#include \#define pi 3.1415927
#define IMR *(pmem+0x0000) #define IFR *(pmem+0x0001) #define PMST *(pmem+0x001D) #define SWCR *(pmem+0x002B) #define SWWSR *(pmem+0x0028) #define AL *(pmem+0x0008)
#define CLKMD 0x0058 /* clock mode reg*/ #define Len 256 #define FLen 51
double npass,h[FLen], x[Len], y[Len], xmid[FLen]; void firdes (double npass); unsigned int *pmem=0;
ioport unsigned char port8008; int in_x[Len]; int m = 0;
int intnum = 0; double xmean=0; int i=0;
int flag = 0;
double fs,fstop,r,rm;
46
int i,j,p,k=0; void cpu_init() {
*(unsigned int*)CLKMD=0x0; //switch to DIV mode clkout= 1/2 clkin while(((*(unsigned int*)CLKMD)&01)!=0);
*(unsigned int*)CLKMD=0x27ff; //switch to PLL X 10 mode PMST=0x3FA0; SWWSR=0x7fff; SWCR=0x0000; IMR=0; IFR=IFR; }
interrupt void int2() {
in_x[m] = port8008; in_x[m] &= 0x00FF; m++;
intnum = m;
if (intnum == Len) {
intnum = 0; xmean = 0.0;
for (i=0; i xmean = in_x[i] + xmean; } xmean = 1.0*xmean/Len; for (i=0; i x[i] = (double)(in_x[i] - xmean); } for (i=0; i for (p=0; p xmid[FLen-p-1] = xmid[FLen-p-2]; } xmid[0] = x[i]; r = 0; rm= 0; for (j=0; j r = xmid[j] * h[j]; rm = rm + r; 47 } y[i] = rm; } m=0; flag = 1; IMR=0x0000; } } void firdes(double npass) { int t; for (t=0; t h[t] = sin((t-(FLen-1)/2.0)*npass*pi)/(pi*(t-(FLen-1)/2.0)); } if (t == ((FLen-1)/2)) h[t]=npass; } void set_int() { asm(\ IMR=IMR|0x0002; asm(\} void main(void) { cpu_init(); fs = 250000; fstop = 20000; npass = fstop/fs; for (i=0; i xmid[i]=0; } firdes(npass); set_int(); for(;;) { if (flag == 1) { 48
共分享92篇相关文档