dsp滤波要点说明

  • 格式:doc
  • 大小:963.50 KB
  • 文档页数:22

下载文档原格式

  / 45
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字信号处理

综合设计性实验报告

学院:电子信息工程学院

班级:自动化0706班

电子0701班

指导教师:高海林

学生:越07213056

冠宇07214004

交通大学电工电子教学基地

2010年1月20日

利用DSP实现信号滤波

一:实验目的

实现离散信号滤波是DSP的基本功能,本实验中我们尝试实现分别了设计FIR 和IIR滤波器实现低通,高通,带通,带阻四种滤波器对正弦离散信号进行滤波。(1)学会编写滤波程序和输入信号程序。

(2)熟悉CCS集成开发环境,熟悉DSK板的使用。

(3)通过实验比较FIR和IIR在设计上和滤波效果上的区别。

二:FIR滤波器的设计

例:设计一个采样频率Fs为8000Hz,输入信号频率为1000HZ、2500HZ与4000HZ 的合成信号,通过设计FIR滤波器分别实现低通,高通,带通,带阻的滤波功能。

一:实验原理

一个线性位移不变系统的输出序列y(n)和输入序列x(n)之间的关系,应满

足常系数线性差分方程:

x(n): 输入序列,y(n): 输出序列,ai、bi : 滤波器系数,N: 滤波器的阶数。在式上式中,若所有的ai 均为0,则得FIR 滤波器的差分方程:

对上式进行z 变换,可得FIR 滤波器的传递函数:

FIR 滤波器的结构

FIR 滤波器的单位冲激响应h(n)为有限长序列。

若h(n)为实数,且满足偶对称或奇对称的条件,则FIR 滤波器具有线性相位特性。在数字滤波器中,FIR 滤波器具有如下几个主要特点:

① FIR 滤波器无反馈回路,是一种无条件稳定系统;

② FIR 滤波器可以设计成具有线性相位特性。

本实验程序设计的就是一种偶对称的线性相位滤波器。

程序算法实现采用循环缓冲区法。

二:算法原理:

①在数据存储器中开辟一个N个单元的缓冲区(滑窗),用来存放最新的N个输入样本;

②从最新样本开始取数;

③读完最老样本后,输入最新样本来代替最老样本,而其他数据位置不变;

④用BK 寄存器对缓冲区进行间接寻址,使缓冲区地址首尾相邻。

三:实验程序设计步骤

1.FIR滤波器设计

利用MATLAB中的FDA工具导出正确的参数。

2.产生滤波器输入信号文件

以下是一个产生输入信号的C语言程序,信号是频率为1000Hz、2500Hz和4000Hz 的正弦波合成的波形:

#include

#include

void main()

{

int i;

double f[256];

FILE *fp;

if((fp=fopen("in.inc","wt"))==NULL)

{

printf("can't open file! \n");

return;

}

for(i=0;i<=255;i++)

{

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

3.14159*4000/8000);

fprintf(fp," .word %1d\n",(long)(f[i]*32768/3));

}

fclose(fp);

}

该文件会生成一个.inc的文件,由于比较冗长,在此不再赘述。然后,在DSP汇编语言过.copy汇编命令将生成的数据文件iirin.inc复制到汇编程序中,作为IIR滤波器的输入数据。此过程的作用相当于把信号通过了AD转换。

由此即可得到16位二进制数据表示的离散数据文件,即离散的三频谱叠加的正

弦信号。

3.编写滤波器的汇编源程序

(1)低通滤波器

**********一个FIR低通滤波器程序lowpass.asm************

**************使用线性缓冲区法************************

.mmregs

.global start

.def start,_c_int00

KS .set 256 ;输入样本数据个数

N .set 46 ;FIR滤波器阶数

COEF_FIR .sect "COEF_FIR" ;FIR滤波器系数

.word 297, 226, 180, 24, -213, -451, -585, -532, -271

.word 125, 505, 686, 535, 40, -651, -1260, -1456, -979

.word 248, 2064, 4092, 5839, 6848, 6848, 5839, 4092, 2064

.word 248, -979, -1456, -1260, -651, 40, 535,

686, 505

.word 125, -271, -532, -585, -451, -213, 24, 180, 226, 297

.data

INPUT .copy "lowpass.inc" ;输入数据在数据区0x2400 OUTPUT .space 1024 ;输出数据在数据区0x2500 DATABUF .usect "FIR_BFR",N

BOS .usect "STACK",0Fh

TOS .usect "STACK",1

.text

.asg AR4,DATA_P ;数据x(n)缓冲区指针

.asg AR6,INBUF_P ;模拟输入数据指针

.asg AR7,OUTBUF_P ;FIR滤波器输出数据指针

_c_int00

b start

nop

nop

start: SSBx FRCT ;小数乘法编程时,设置FRCT(小

数方式)位

STM #DATABUF,DATA_P ;数据缓冲区清零

RPTZ A,N-1

STL A,*DATA_P+

FIR_TASK:

STM #DATABUF,DATA_P

STM #INPUT,INBUF_P

STM #OUTPUT,OUTBUF_P

STM #KS-1,BRC

RPTB LOOP-1

LD *INBUF_P+,A ;装载输入数据

FIR_FILTER: ;FIR滤波运算

STL A,*DATA_P ;输入样本值x(n)

STM #(DATABUF+N-1),DATA_P ;数据缓冲区指针指向

x[n-(N-1)]

RPTZ A,N-1

MACD *DATA_P-,COEF_FIR,A ;FIR滤波运算

MAR *DATA_P+ ;调整DATA_P指针指向DATABUF

第一个单元

STH A,*OUTBUF_P+

LOOP:

EEND B EEND

.end