基于DSP的FIR滤波器设计.docx
- 文档编号:23466596
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:14
- 大小:137.32KB
基于DSP的FIR滤波器设计.docx
《基于DSP的FIR滤波器设计.docx》由会员分享,可在线阅读,更多相关《基于DSP的FIR滤波器设计.docx(14页珍藏版)》请在冰豆网上搜索。
基于DSP的FIR滤波器设计
DSP课程设计
选题名称:
基于DSP的FIR滤波器的设计与仿真
摘要:
DSP作为一门新兴学科,越来越引起人们的关注,目前已广泛应用在各个领域。
20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。
本文主要介绍基于DSP数字滤波器设计,使用CCS实现FTSK数据输入,使用FIR滤波器对FTSK调制信号进行处理,输出需要波形与频谱。
文中采用线性缓冲区和带移位双操作寻址方法实现FIR滤波器。
以窗函数法设计线性相位FIR数字滤波器为例,介绍用MATLAB工具软件设计数字滤波器的方法和在定点DSP上的实现,实现时,先在CCS仿真开发,然后加载。
利用DSP来快速设计FIR数字滤波器的方法,寻找系数的快速传递,MATLAB中调试仿真DSP程序。
关键词:
数字滤波器,Matlab,FIR,CCS
一.实验设计
1.设计目的和要求
本文主要介绍基于DSP数字滤波器设计,使用CCS5000Simulator实现FTSK数据输入,使用FIR滤波器对FTSK调制信号进行处理,输出需要波形与频谱。
文中采用线性缓冲区和带移位双操作寻址方法实现FIR滤波器。
通过课程设计,加深对DSP芯片TMS320C54x的结构、工作原理的理解,获得DSP应用技术的实际训练,掌握设计较复杂DSP系统的基本方法。
通过使用汇编语言编写具有完整功能的图形处理程序或信息系统,使学生加深对所学知识的理解,进一步巩固汇编语言讲法规则。
学会编制结构清晰、风格良好、数据结构适当的汇编语言程序,从而具备解决综合性实际问题的能力。
2系统功能介绍
一个实际的应用系统中,总存在各种干扰。
数字滤波器在语音信号处理、信号频谱估计、信号去噪、无线通信中的数字变频以及图像信号等各种信号处理中都有广泛的应用,数字滤波器也是使用最为广泛的信号处理算法之一。
在本设计中,使用MATLAB模拟产生合成信号,然后利用CCS进行滤波。
设定模拟信号的采样频率为32000Hz,。
设计一个FIR低通滤波器,其参数为:
滤波器名称:
FIR低通滤波器
采样频率:
Fs=40000Hz通带:
4000Hz~4500Hz
过渡带:
2500Hz~3000Hz,3500Hz~4000Hz
带内波动:
0.5dB阻带衰减:
50dB
滤波器级数:
N=154
滤波器系数:
由MATLAB根据前述参数求得。
3总体设计方案流程图
二.设计原理及操作步骤
1滤波器原理
对于一个FIR滤波器系统,它的冲击响应总是又限长的,其系统函数可记为:
其中N-1是FIR的滤波器的阶数,
为延时结,
为端口信号函数。
最基本的FIR滤波器可用下式表示:
其中
输入采样序列,
是滤波器系数,N是滤波器的阶数Y(n)表示滤波器的输出序列,也可以用卷积来表示输出序列y(n)与x(n)、h(n)的关系,如下:
y(n)=x(n)*h(n)
2DSP实现FIR滤波的关键技术
(1)用线性缓冲区实现FIR滤波器
(2)用循环缓冲区实现FIR滤波器
3.操作步骤
(1)打开matlab软件,根据滤波要求设置滤波器类型、通带截止频率、指定阶数、采样频率等设计相关的matlab语言。
指定完设计参数后运行得出波形。
(2)把生成的滤波器系数传到目标DSP。
编译CCS程序,如果有错误,按错误进行修改;没错误,则往下执行。
(3)加载初始化DATA数据。
运行程序,查看输入输出波形,修改相应参数进行调试
4程序流程
在本实验中使用MATLAB模拟产生信号,观察滤波前的时域波形和频域波形。
MATLAB仿真后,使用得到的滤波器参数,进行DSP编程,在DSP中实现带通滤波,并使用CCS的频谱分析功能,查看DSP的滤波效果。
(1)MATLAB程序流程图如图1所示
初始化
产生需要虑波信号
画出原始信号频谱图
生成fir滤波器
进行滤波
画出滤波后信号频谱图
2.CCS汇编程序流程图如图2所示
初始化
输入原始信号
定义滤波器系数
为原始信号和系数指定寄存器
做滤波算法
本次滤波结束待滤波系数减一
是
滤波结束
三.设计结果及波形图
MATLAB辅助DSP实现FIR,其总体过程为在DSP中编写处理程序,在MATLAB中利用滤波器设计、分析工具(FDATOOL),根据指定的滤波器性能快速设计一个FIR,然后把滤波器系数以头文件形式导入CCS中,头文件中MATLAB辅助DSP实现FIR数字滤波器含滤波器阶数和系数数组,在MATLAB中调试、运行DSP程序并显示、分析处理后的数据。
使用该方法,便于采用汇编语言来实现程序。
头文件名不变,当MATLAB中设计的滤波器系数改变时,相应头文件中系数也改变,方便了程序调试、仿真。
(一)在MATLAB中先编写程序,查看待滤波和已滤波的信号的时域和频域波形,如图1和图2所示。
已滤波的信号的时域和频域波形,如图5和图6所示。
(二)在CCS中进行调试,实现带通滤波的功能。
将显示类型,图形名称,起始地址,抽样点数,数据类型等分别进行设置,输出各种波形。
输出滤波前的信号时域波形。
上图为滤波前的信号,波形很杂乱,从时域上很难看出信号的周期性
修改相应设置,输出如下图所示滤波前信号频谱。
经过滤波后,时域波形如图12所示。
总结
通过本次课程设计,我进一步了解了数字滤波是信号处理技术,掌握了数字滤波器的基本理论知识以及它实现方法,学习了数字滤波器的结构、设计理论,还掌握了其他数字滤波器的原理和特性,并且复习了MATLAB的相关知识,掌握了CCS环境下的程序开发方法、调试工具的使用及优化级别的选择等,利用MATLAB与CCS设计了低通滤波器以及高通滤波器。
在设计中我们利用DSP来快速设计FIR数字滤波器的方法,寻找系数的快速传递,MATLAB中调试仿真DSP程序,并且解决了在实验设计中遇到的各种问题和错误,如采样频率设置的过小,截止频率大于采样频率的一半,运行的时候图形出现错误。
在CCS中未定义标号,程序运行错误等等,真的学到了很多东西,锻炼了动手能力。
DSP是以众多学科为理论基础的,它所涉及的范围极其广泛。
所以在今后的工作和学习生活中,我们要多多综合运用模拟电子、数字电子和DSP基本原理等课程中所学的理论知识去独立完成一个项目的设计。
参考文献
[1]基于MATLAB的系统分析与设计西安电子科技大学出版社楼顺天,李博函著
[2]基于MatLab与DSP的滤波器的快速设计方法.现代计算机王秀芳,关凌涛著
[3]基于定点DSP的FIR数字滤波器的研究与设计.曲阜师范大学赵秀玲等著
[4]MATLAB在数字信号处理中的应用「M].北京:
机械工业出版社罗军辉,罗勇江等著.
附件:
汇编程序清单:
Fir.asm内容:
.title"fir.asm";为汇编源程序取名
.mmregs;定义存储器映像寄存器
.global_c_int00
ORDER.set154
D_LEN.set1024;TheLengthofInputData
xn.usect"xn",(ORDER-1)
a0.usect"a0",(ORDER-1)
input.usect"input",D_LEN
output.usect"output",D_LEN
.copy"HM.h";Getcoefsfrom"coef.h"
.text;定义文本代码段
.asgAR0,FIR_INDEX
.asgAR2,FIR_DATA
.asgAR3,FIR_COEF
.asgAR5,DATA_IN
.asgAR6,DATA_OUT
_c_int00:
SSBXFRCT
STM#a0,FIR_COEF;Copya0(coefs)toFIR_COEF(AR3)
RPT#ORDER-1;从程序数据器到数据存储器
MVPD#coeff,*FIR_COEF+;重复传送地址
STM#1,FIR_INDEX
STM#xn,FIR_DATA;Copyxn(data)toFIR_DATA(AR2)
RPTZA,#ORDER-1;将A清零,重复执行下条指令155次
STLA,*FIR_DATA+;将A的低字内容送到数据存储里
STM#(xn+ORDER-1),FIR_DATA
STM#(a0+ORDER-1),FIR_COEF
STM#input,DATA_IN;Getdatafrom"input"
STM#output,DATA_OUT;Writedatato"output"
STM#D_LEN-1,BRC
RPTBDnext-1
STM#ORDER,BK
LD*DATA_IN+,A
FIR:
STLA,*FIR_DATA+%;将A的低字内容放到程序存储里面
RPTZA,(ORDER-1)
MAC*FIR_DATA+0%,*FIR_COEF+0%,A;FIRS;执行乘法并累加,结果放在A中
STHA,*DATA_OUT+;将A的高字内容放到输出的数据存储里面
next
FIR_END:
BFIR_END
.end
FIR.m的程序如下:
fs=40000;%/采样Hz
N=1024%数据个数
T=1/fs;%采样周期
n=0:
N-1;
df=n*(fs/N)
%待滤波信号波形
xin=randn(1,1024)
figure
(1)
plot(xin)
%待滤波信号频谱
xinff=abs(fft(xin));
figure
(2)
plot(df,xinff)
%滤波后信号波形
y_filter_out=filter(B,1,xin)%Y=FILTER(B,A,X)
figure(3)
plot(y_filter_out)%滤波后信号频谱
yff=fft(y_filter_out);
figure(4)
plot(df,yff)
xin=xin/max(xin);%归一化
xto_ccs=round(32767*xin)%取整
fid=fopen('input1.dat','w');%打开文件
fprintf(fid,'16511000\n');%输出文件头
fprintf(fid,'%d\n',xto_ccs);%输出
fclose(fid);
Fir.m内容:
f11=2500;%/Hz
f12=5500;%/Hz
f13=9000;
fs=32000;%/采样Hz
N=500%数据个数
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)
y_f_out=filter(B,1,x_base);
y_f_fft=abs(fft(y_f_out));
figure(3)
plot(y_f_out)
figure(4)
plot(df,y_f_fft)
xout=x_base/max(x_base);%归一化
xto_ccs=round(32767*xout)
fid=fopen('input129.dat','w');%打开文件
fprintf(fid,'16511000\n');%输出文件头
fprintf(fid,'%d\n',xto_ccs);%输出
fclose(fid);
lhm.c的程序如下:
#include"stdio.h"
#include"LHM.h"
#defineN111
#defineLEN501
longyn;
intinput[LEN];
intoutput[LEN];
voidmain()
{
inti,j;
int*x;
for(j=0;j { x=&input[j]; yn=0; for(i=0;i yn+=B[i]*(*x++); output[j]=yn>>15; } while (1); } 忽略此处..
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 DSP FIR 滤波器 设计