CCS中滤波器的设计(DSP)
- 格式:pdf
- 大小:440.50 KB
- 文档页数:7
DSP 实验报告实验一 FIR 滤波器的设计1.实验目的利用所学DSP 知识,在CCS3.3平台上,对TMS320VC5416DSP 设计,编程实现FIR 滤波器。
从而学会使用CCS 软件和TMS320VC5416实验板。
2.实验要求设计一个10阶的FIR 滤波器,要求 =2.5kHZ ,定点实现。
并对 =8kHZ 的多正弦波合成文件进行滤波测试,显示出输入和输出信号。
3.实验原理一个截止频率为 的理想数字低通滤波器,其传递函数的表达式为:⎪⎩⎪⎨⎧≤≤≤=-πωωωωωτωc c j jd ee H ,0,)(这个滤波器是物理不可实现的。
为了产生有限长度的冲激响应函数,我们取样响应为)(n h ,长度为N 。
)(n h 表示截取)(n h d 后的冲激响应,即)()()(n h n n h d ω=,其中)(n ω即为窗函数,窗长为N 。
一般的FIR 滤波器差分方程如下:1()()()n k y n h k x n k -==-∑进行Z 变换得到FIR 的系统函数为:∑-=-=10)()(N n nz n h z HN 阶滤波器通常采用N 个延迟单元、N 个加法器与N+1个乘法器组成。
因此可以得到FIR 滤波器的结构图如图1所示。
图1 FIR 滤波器直接结构图4.设计思路对于FIR滤波器的设计,其系数()h n是关键。
由于matlab自带滤波器设计工具箱和滤波器设计函数,故借用matlab工具,设计满足条件的滤波器并导出系数以备编写滤波器程序时使用。
实验需要用到的输入数据是多正弦波合成文件,对于输入信号的设计,这里也借助matlab编程生成dat文件。
然后用C语言编写FIR滤波器的主程序,输入文件在程序运行后导入。
5.实验内容(1)滤波器系数的设计由于实验只给出滤波器条件为N=10,=2.5kHZ,并没有给出和,所以这里调用matlab工具箱函数fir1实现窗函数法设计滤波器。
fir1的调用格式为 ( ,),返回值为6dB截止频率为的N阶(单位脉冲响应h(n)长度=N+1)的FIR低通滤波器的系数向量(为标量),默认选用哈明窗。
课程设计说明书目录1引言 (1)2 MATLAB及CCS软件介绍 (2)2.1 MATLAB的介绍 (2)2.2 CCS的介绍 (2)3 FIR 数字低通滤波器的设计 (4)3.1 FIR滤波器参数设定 (4)3.1.1 输入方波Matlab设计 (5)3.1.2 正弦叠加信号Matlab设计 (6)3.2 FIR滤波器的设计 (6)3.3 FIR滤波器性能验证 (9)3.3.1 Matlab的仿真验证 (9)3.3.2 CCS的仿真结果 (10)4 IIR 数字低通滤波器的设计 (13)4.1IIR滤波器设计流程图 (13)4.3 IIR滤波器性能验证 (14)4.3.1 Matlab的仿真验证 (14)4.3.2 CCS的仿真结果 (15)5设计总结 (18)参考文献 (19)附录 (20)1引言当今,数字信号处理(DSP:Digtal Signal Processing)技术正飞速发展,它不但自成一门学科,更是以不同形式影响和渗透到其他学科:它与国民经济息息相关,与国防建设紧密相连;它影响或改变着我们的生产、生活方式,因此受到人们普遍的关注。
数字滤波技术是数字信号分析、处理技术的重要分支[2-3]。
无论是信号的获取、传输,还是信号的处理和交换都离不开滤波技术,它对信号安全可靠和有效灵活地传输是至关重要的。
在所有的电子系统中,使用最多技术最复杂的要算数字滤波器了。
数字滤波器的优劣直接决定产品的优劣。
在数字信号处理中,滤波占有极其重要的地位。
数字滤波是语音信号处理、图像处理、模式识别、频谱分析等应用的基本处理算法。
用DSP芯片实现数字滤波除了具有稳定性好、精确度高、不受环境影响等优点外,还具有灵活性好等特点。
本设计的题目是低通滤波器的设计,主要针对DSP芯片进行程序设计,要求采用汇编语言编写程序。
通过此次课程设计,熟悉DSP芯片的硬件结构,加深对DSP芯片的认识;掌握对DSP芯片编程方法,掌握间接寻址方法的使用,重点掌握算法的设计。
2.1 系统功能介绍一个本质的应用系统中,总存在各种搅乱。
数字滤波器在语音信号办理、信号频谱估计、信号去噪、无线通信中的数字变频以及图像信号等各种信号办理中都有广泛的应用,数字滤波器也是使用最为广泛的信号办理算法之一。
在本设计中,使用MATLAB模拟产生合成信号,尔后利用CCS 进行滤波。
设定模拟信号的采样频率为48000Hz,。
设计一个 FIR 低通滤波器,其参数为:滤波器名称:FIR 低通滤波器采样频率:Fs=48000Hz通带截止频率:15000Hz阻带截止频率:16000Hz通带最大衰减:阻带最少衰减:80dB滤波器系数:由 MATLAB依照前述参数求得。
2.2 整体设计方案流程图使用 MATLAB 编写程序产使用MATLAB滤波器的设生待滤波数据计/解析工具 FDATOOL设计 FIR 滤波器使用 CCS编写程序实现滤波功能查察程序运行后的输入输出波形并比较滤波收效图 1 整体设计方案主要内容和步骤3.1 滤波器原理对于一个 FIR 滤波器系统,它的冲击响应总是又限长的,其系统函数可记为:N 1H zh n z n其中 Nn 01是 FIR 的滤波器的阶数, z n 为延时结, h n 为端口信号函数。
最基本的 FIR 滤波器可用下式表示:N 1y nh k x nk其中 x nk 0k 输入采样序列, h k 是滤波器系数, N 是滤波器的阶数 Y n 表示滤波器的输出序列,也可以用卷积来表示输出序列 y n 与 x n 、 h n 的关系,如下:y n x n h n3.2 操作步骤( 1)打开 FDATOOL , 依照滤波要求设置滤波器种类、通带截止频率、指定阶数、采样频率等。
指定完设计参数后单击按钮Design Filter ,生成滤波器系数。
( 2)把生成的滤波器系数传到目标 DSP 。
选择菜单 Targets->Export to CodeComposer Studio(tm)IDE ,打开 Export to C Header File 对话框,选择 C headerfile ,指定变量名 ( 滤波器阶数和系数向量 ) ,输出数据种类可选浮点型或 32 b ,16 b整型等,依照自己安装选择目标板板号和办理器号,单击OK ,保存该头文件,需指定文件名 (filtercoeff .h)和路径 ( 保存在 c : \ti\myprojects\fir 工程中 ) 。
高通滤波器设计报告学号:172030085 :徐军一、实验目的:1、了解FIR滤波器的原理及使用方法;2、了解使用Matlab语言设计FIR滤波器的方法;3、了解用DSP来实现FIR滤波器的设计及编程方法;4、熟悉在CCS环境下对FIR滤波器的调试方法。
二、实验要求:设计一个FIR高通滤波器,输入信号是频率为25Hz,50Hz的合成等幅信号,要求滤去25Hz信号成分,保留50Hz的信号成分。
三、实验设计:本实验要求滤去25Hz的信号成分,保留50Hz的信号,根据耐特斯特准侧,采样频率需要大于最高频率的2倍,即设计的采样频率至少为100Hz的高通滤波器。
先在MATLAB中验证设计思路,将得到的滤波器参数调用到DSP程序中,这样可以简化编译汇编连接的过程。
然后通过图形仿真查看滤波前后的波形和频谱图。
四、实验步骤:1、滤波器的MATLAB语言设计2、在MATLAB中确定滤波器的各种参数3、滤波器的程序设计4、在CCS环境下调试程序5、比较滤波前后的效果、观测滤波前后的波形五、实验程序及结果:(1)MATLAB程序:main.mf1=50;%信号频率Hzf2=25;%信号频率Hzfs=1000;%采样频率HzN=200;%采样点数t=(0:N-1)/fs;%采样时间ssignal1=sin(2*pi*f1*t);signal2=sin(2*pi*f2*t);y=signal1+signal2;%%原始信号时域波形图figure(1);plot(y);%%axis([ 0 100 -2.5 2.5]);hold on;plot(signal1,'r');legend('被污染的信号','理想信号'); %%原始信号频谱图fy=fftshift(fft(y));f=linspace(-fs/2,fs/2,N);figure(2);plot(f,abs(fy));title('原始信号频谱');xlabel('f/Hz');ylabel('幅度');axis([ 0 100 0 150]);%%滤波后的时域波形图figure(3);Hd = high;output=filter(Hd,y);plot(output);title('滤波后的波形');%%滤波后的频域波形图fy=fftshift(fft(output));f=linspace(-fs/2,fs/2,N);figure(4);plot(f,abs(fy));title('滤波后信号频谱');xlabel('f/Hz');ylabel('幅度');axis([ 0 100 0 150]);high.mfunction Hd = high%HIGH Returns a discrete-time filter object.% MATLAB Code% Generated by MATLAB(R) 8.3 and the Signal Processing Toolbox 6.21.% Generated on: 12-Jul-2018 09:57:59% Equiripple Highpass filter designed using the FIRPM function.% All frequency values are in Hz.Fs = 1000; % Sampling FrequencyFstop = 25; % Stopband FrequencyFpass = 50; % Passband FrequencyDstop = 0.0001; % Stopband AttenuationDpass = 0.0575********; % Passband Rippledens = 20; % Density Factor [N, Fo, Ao, W] = firpmord([Fstop, Fpass]/(Fs/2), [0 1], [Dstop, Dpass]);b = firpm(N, Fo, Ao, W, {dens});Hd = dfilt.dffir(b);实验结果:Matlab环境下的滤波前后的时域波形:滤波前的时域信号(左),滤波后的时域信号(右)Matlab环境下的滤波前后的频谱图形:滤波前的频域信号(左),滤波后的频域信号(右)(2)DSP在CCS下的程序:源程序:#include<stdio.h>#include<math.h>#include<stdio.h>#include<math.h>#include<stdint.h>#include"fdacoefs.h"#define pi3.14159#define N30#define length256long yn;int input[length];int output[length];void main(){int m,n;int*x;for(n=0;n<=length-1;n++){input[n]=0;output[n]=0;}for(n=0;n<=length-1;n++)input[n]=50*sin(2*pi*n*25/200)+50*sin(2*pi*n*50/200);for(n=0;n<=length-1;n++){x=&input[n];yn=0;for(m=0;m<=N-1;m++)yn+=B[m]*(*x++)+*x;output[n]=yn>>15;}while(1);}fdacoefes.h如下:* Filter Coefficients (C Source) generated by the Filter Design and Analysis Tool * Generated by MATLAB(R) 9.0 and the Signal Processing Toolbox 7.2.* Generated on: 27-Jul-2016 11:32:00*//** Discrete-Time FIR Filter (real)* -------------------------------* Filter Structure : Direct-Form FIR* Filter Length : 43* Stable : Yes* Linear Phase : Yes (Type 1)*//* General type conversion for MATLAB generated C-code */#include "tmwtypes.h"* Expected path to tmwtypes.h* D:\Program Files\MATLAB\R2016a\extern\include\tmwtypes.h*//** Warning - Filter coefficients were truncated to fit specified data type.* The resulting response may not match generated theoretical response. * Use the Filter Design & Analysis Tool to design accurate* int16 filter coefficients.*/const int BL = 29;const int16_T B[29] = {-106, 390, -296, -338, , 619, 281, -782, -1127,335, 2277, 1564, -3308, -9698, 20109, -9698, -3308, 1564, 2277, 335, -1127, -782, 281, 619, , -338, -296,390, -106};(3)滤波器的仿真测试新建工程并编译成功后会在“工程所在目录/debeg”文件夹下产生sheji2.out文件,在CCS软件的Run→Load→Load Program里打开这个.out 文件,单击OK。
基于CCS软件的数字滤波器实验设计姜恩华;袁广宇;陈得宝;杨一军【期刊名称】《长春师范学院学报(自然科学版)》【年(卷),期】2015(034)003【摘要】本文借助CCS软件完成IIR和FIR滤波器实验设计. 设计过程主要包括三个步骤:首先,输入序列x( n)设计. 其次,通过求解IIR滤波器的系统函数H( z) ,求得IIR滤波器的常系数差分方程;FIR滤波器的单位脉冲响应h( n)设计. 再次,通过求解IIR常系数差分方程,计算出IIR滤波器的输出序列y(n);通过计算x(n)和h(n)的线性卷积,求得FIR滤波器的输出序列y(n). 并借助time/frequency菜单观察输出序列y( n)的时域波形和频谱.%With the aid of CCS software, the experimental design of the IIR and FIR filter is finished. The experimental design process mainly include the three steps:Firstly, input sequence x( n) is designed. Secondly, the constant-coefficient difference equation of the IIR filter is obtained by solving the system function H( z);the unit impulse responseh( n) of the FIR filter is designed. Thirdly, the out-put sequence y( n) of the IIR filter is obtained by solving the constant-coefficient difference equation;the output sequence y( n) of the FIR filter is obtained by solving the linear convolution of the x(n) and the h(n). The time domain waveform and the spectrum of the y( n) is observed by the time/frequency menu.【总页数】5页(P29-33)【作者】姜恩华;袁广宇;陈得宝;杨一军【作者单位】淮北师范大学物理与电子信息学院,安徽淮北235000;淮北师范大学物理与电子信息学院,安徽淮北235000;淮北师范大学物理与电子信息学院,安徽淮北235000;淮北师范大学物理与电子信息学院,安徽淮北235000【正文语种】中文【中图分类】TN911.7【相关文献】1.基于 CCS软件的IIR滤波器实验设计 [J], 姜恩华;李素文;窦德召;陈得宝;邵芬2.基于CCS软件的数字信号处理课程实验设计 [J], 姜恩华;杨一军;陈得宝;周正;赵庆平3.基于CCS软件的FIR滤波器实验设计 [J], 姜恩华;李素文;崔少华;陈得宝4.基于CCS软件的数字信号处理课程实验设计 [J], 姜恩华;杨一军;陈得宝;周正;赵庆平;5.基于CCS软件的数字滤波器实验设计 [J], 姜恩华;袁广宇;陈得宝;杨一军;因版权原因,仅展示原文概要,查看原文内容请购买。
实验六IIR滤波器一、实验目的1.熟悉IIR滤波器C54X实现的编程方法.2.测试IIR滤波器的单位冲击响应曲线.3.检查IIR滤波器的频率特性。
二、实验条件1.已经设计出四阶IIR滤波器的参数如下:·通带:0—200Hz·过渡带宽:200Hz-500Hz·通带内波动:<0。
5dB·阻带衰减:<—20dB·采样频率Fs:3600Hz·脉冲传递函数H(z):·差分方程式为:y(n)=*x(n)+*x(n—1)+*x(n-2)+*x(n-3)+*x(n-4)+*y(n-1)+*y (n-2)+*y(n-3)+*y(n-4)其中:A1=-3.4647 A2=4。
4615 A3=—2.8518 A4=0。
6739B0=0.0951 B1=-0。
3139 B2=0。
4460 B3=-0.3139 B4=0。
0951生成正弦数据文件的高级语言程序。
程序名为sin_flt。
exe.2.直接形式二阶IIR滤波器程序Lab6.asm以及链接命令文件Lab6.cmd。
三、实验内容1.消化直接形式二阶滤波器程序iir3.asm以及链接命令文件iir3。
cmd.2.修改Lab6。
asm。
①定义循环缓冲区:X:Y:B: A:相应的汇编命令为:X 。
usect ”X”,5Y 。
usect ”Y”,5B .usect "B",5A 。
usect ”A",5②修改系数表:初始值y(n—4)- y(n-1)以及x(n-4)- x(n-1)均设置为0。
凡绝对值≥1的系数需化成绝对值〈1的系数。
这样,系数表示为:。
word 3116 ;B4=0。
0951.word -10286 ;B3=-0.3139.word 14615 ;B2=0.4460。
word -10286 ;B1=—0。
3139。
word 3116 ;B0=0.0951.word —22082 ;A4=-0.6739.word 31149 ;A3/3=2。
实验一CCS基本使用1.预习内容复习汇编语言指令内容,汇编语言与C语言的混合编程,CCS的基本概念.2.实验目的(1).掌握DSP的程序的开发流程;(2).掌握汇编程序的书写规范,学会汇编指令的运用;(3). 掌握命令连接文件的编写,合理分配存储器空间;(4).学习CCS的各种调试工具,如断点,寄存器,存储器.3.实验要求(1).用.set定义四个立即数.(2).在.bss段建立几个存储空间.(3).合理分别存储空间,并使用CCS观察数据.一、建立工程128页每页64K.title "myadd.asm".mmregsSTACK .usect "STACK",10h.bss a,4.bss x,4.bss y,1.def start.datatable .word 1,2,3,4.word 8,6,4,2.textstart STM #0,SWWSRSTM #STACK+10H,SPSTM #a,AR1RPT #7MVPD table,*AR1+CALL SUMB endSUM STM #a,AR3STM #x,AR4RPTZ A,#3MAC *AR3+,*AR4+,ASTL A,yRETend .end.global _c_int100V AL1 .set 012h ;18 V AL2 .set 034h ;52.bss temp,1.bss temp1,1.bss temp2,1;result register.bss add_result,1.bss mpy_i_h,1.bss mpy_i_l,1.text_c_int00ld #temp,DPst #V AL1,temp1st #V AL2,temp2;------test ADD--------ld temp1,aadd temp2,astl a,add_resultnopst #V AL1,temp1st #V AL2,temp2;----------test MPY-----------rsbx FRCTld temp1,Tmpy temp2,asth a,mpy_i_hstl a,mpy_i_lnopend:b end.endMEMORY{PAGE 0: IPROG: origin=0x2000, len=0x1000PAGE 1: IDA TA: origin=0x80, len=0x1000}SECTIONS{.text: {}>IPROG PAGE 0.bss: {}>IDA TA PAGE 1}实验三FIR滤波器设计1.预习内容复习DSP的寻址方式.2.实验目的(1).了解数据文件的编辑方法;(2).掌握CCS探针工具;(3).掌握使用MAC指令和循环寻址方法实现FIR滤波器;(4).学习如何从程序存储齐搬移到数据存储器.3.实验要求(1).设计一个FIR滤波器.(2).过滤方波信号的高频成分.(3). 使用CCS观察信号.部分代码ld #100,bmvdm #t_ar5,ar5fir:pshm st1pshm st0pshm bkpshm ar7pshm ahpshm alpshm ar0pshm ar2pshm ar3pshm ar4mvdm #t_ar2,ar2mvdm #t_ar3,ar3mvdm #t_ar4,ar4ld new_ad,-2,astl a,*ar5+stm #1,ar0stm #N,bkstl a,*ar3+0%rptz a,#(N-1),mac *ar2+0%,*ar3+0%,a mvmd ar3,#t_ar3mvmd ar2,#t_ar2stm #1,ar0stm #100,bkstl a,*ar4+0%mvmd ar4,#t_ar4con_fir:popm ar4popm ar3popm ar2popm ar0popm alpopm ahpopm ar7popm bkpopm st0popm st1sub #1,bbc fir,bneqld #100,bnopb,fir输入代码建立链接文件MEMORY{PAGE 0: IPROG: origin=0x0100, len=0x1000 PAGE 1: IDA TA: origin=0x1200, len=0x1000 }SECTIONS{.text: {}>IPROG PAGE 0}编译、连接、加载文件打开.out文件File file O/I设置参数点击右下角Add probe point最后replace 确定确定打开view graph time…设置观察参数数据类型长度等。
【关键字】设计基于MATLAB与CCS的FIR滤波器设计与实现摘要当前,数字信号处理技术受到了人们的广泛关注,其理论及算法随着计算机技术和微电子技术的发展得到了飞速的发展,并被广泛应用于语音和图像处理、数字通信、频谱分析、模式识别和自动控制,以及雷达、军事、航空航天、医疗和家用电器等众多领域。
数字滤波器是数字信息处理中最重要的组成部分之一,几乎出现在所有的数字信号处理系统中。
按照数字滤波器的特性,它可以被分成线性与非线性、因果与非因果、无限长冲激响应(IIR)与有限长冲激响应(FIR)等等。
本课题通过对FIR滤波器的基本理论及其算法的深入理解,根据规定指标完成基于MATLAB的FIR滤波器的理论设计,再将设计好的滤波器系数调入到CCS 中,完成FIR滤波器在DSP上的实现。
比对CCS与MATLAB中的仿真结果,以此发现DSP程序的不足。
关键词MATLAB;DSP;CCS;数字滤波器;FIR滤波器研究要求:根据要求设计低通FIR滤波器,分别使用MATLAB和CCS实现仿真,对仿真结果进行比对分析。
要求:采样频率48KHZ,通带频率15KHZ,阻带截至频率18KHZ,阻带衰减60dB。
研究内容:一、FIR滤波器的理论基础及算法介绍(一)数字滤波器数字滤波器是种用来过滤时间离散信号的数字系统,通过对抽样数据进行数学处理来达到频域滤波的目的。
可以设计系统的频导响应,让它满足一定的要求,从而对通过该系统的信号的某些特定的频率成分进行过滤,这就是滤波器的基本原理。
如果系统是一个连续系统,则滤波器称为模拟滤波器。
如果系统是一个离散系统,则滤波器称为数字滤波器。
信号f(t)通过线性系统后,其输出Y(t)就是输入信号f(t)和系统冲激响应h(t)的卷积。
除了h(t)=S(t)外,y(t)的波形将不同于输入波形f(t)。
从频域分析来看,信号通过线性系统后,输出信号的频谱将是输入信号的频谱与系统传递函数的乘积。
除非F(jw)为常数,否则输出信号的频谱将不同于输入信号的频谱,某些频率成分|H(jw)|有较大的模,因此,F(jw)中这些频率成分将得到加强,而另外一些频率成分处H(jw)的模很小甚至为零,F(jw)中这部分频率分量将被削弱或消失。
DSP 硬件课程实验报告实验一:常用指令实验一、实验目的1.熟悉DSP开发系统的连接2.了解DSP开发系统的组成和结构和应用系统构成3.熟悉常用C54X系列指令的用法(程序寻址,寄存器,I/O口,定时器,中断控制)。
二、实验设备计算机,CCS 2.0版软件,DSP仿真器,实验箱。
三、实验操作方法1、系统连接进行DSP实验之前,先必须连接好仿真器、实验箱及计算机,连接方法如下所示:在硬件安装完成后,接通仿真器电源或启动计算机,此时,仿真盒上的“红色小灯”应点亮,否则DSP开发系统与计算机连接有问题。
2、运行CCS程序先实验箱上电,然后启动CCS,此时仿真器上的“绿色小灯”应点亮,并且CCS正常启动,表明系统连接正常;否则仿真器的连接、JTAG接口或CCS 相关设置存在问题,掉电,检查仿真器的连接、JTAG接口连接,或检查CCS 相关设置是否正确。
四、实验步骤与内容(一)简单指令程序运行实验1、实验使用资源实验通过实验箱上的XF指示灯观察程序运行结果2、实验过程启动CCS 2.0,并加载“exp01.out”;加载完毕后,单击“Run”运行程序;实验结果:可见XF灯以一定频率闪烁;单击“Halt”暂停程序运行,则XF 灯停止闪烁,如再单击“Run”,则“XF”灯又开始闪烁;关闭所有窗口,本实验完毕。
源程序查看:用下拉菜单中Project/Open,打开“Exp01.pjt”,双击“Source”,双击“exp01.asm”可查看源程序。
源程序注释如下:(二)资料存储实验1、实验使用资源本实验指导书是以TMS32OVC5410为例,介绍相关的内部和外部内存资源。
对于其它类型的CPU请参考查阅相关的资料手册。
下面给出TMS32OVC5410的内存分配表:对于存储空间而言,映像表相对固定。
值得注意的是内部寄存器与存储空间的映像关系。
因此在编程应用时这些特定的空间不能作其它用途。
对于程序存储空间而言,其映像表和CPU的工作模式有关。
《DSP原理及应用》课程设计报告课题名称:FIR帯通滤波器设计院(系):电气信息学院专业:电子信息工程2011级姓名:学号:指导老师:日期:2 0 1 4. 6. 2 9一、功能描述基于CCS设计一个FIR帯通滤波器,上边带频率为1400HZ,下边带频率为3200HZ,通带波纹小于1Db;阻带频率分别为900HZ和3700HZ,阻带衰减大于40dB;采样频率为15000HZ。
二、算法研究1.1、FIR的原理和参数生成公式N阶有限冲激响应滤波器(FIR)公式:Y(n)=N=0,1,2…..FIR设计原理:根据系数h是偶对称,为了简化运算产生如下计算方法:如果一个FIR滤波器有一个冲激响应,h(0),h(1),…,h(N-1)和x(n)描绘输入的时常滤波n,输出滤波y(n)的n给出以下方程式:Y(n)=h(0)x(n)+ h(1)x(n-1)+ h(2)x(n-2)+…+ h(N-1)x[n-(n-1)]1.2、利用MATLAB计算滤波系数用来设计标准频率响应的基于窗函数的FIR滤波器,可实现加窗线性相位FIR数字滤波器的设计。
语法:b=fir1(n,Wn)b=fir1(n,Wn,’ftype’)b=fir1(n,Wn,Window)b=fir1(n,Wn,’ftype’,Window)n:滤波器的阶数;Wn:滤波器的截止频率;ftype:用来决定滤波器的类型,当ftype=high时,可设计高通滤波器。
当ftype=stop时,可设计带阻滤波器。
Window:用来指定滤波器采用的窗函数类型,其默认值为汉明(Hamming)窗。
用汉明窗设计帯通滤波器:在b=fir1(n,Wn)中,当Wn=[W1,W2]时,可得到帯通滤波器,其通带为W1<w<W2,W1和W2分别为帯通的下限频率和上限频率。
格式如下:b=fir1(n,[W1 W2])三、参数计算用MATLAB对帯通滤波器的滤波系数进行设计:上边带频率为1400HZ,下边带频率为3200HZ,通带波纹小于1Db;阻带频率分别为900HZ和3700HZ,阻带衰减大于40dB;采样频率为15000HZ。
DSP技术及应用课程设计1、设计题目:FIR滤波器的设计2、设计任务:能够熟练运用CCS软件进行FIR滤波器的设计,并且进行仿真验证。
设计一个FIR低通滤波器,通带边界频率为2000HZ;通带波纹小于1dB;阻带边界频率为2500HZ,阻带衰减大于40dB采样频率为8000HZ。
FIR滤波器的设计可以用MATLAB窗函数实现。
3、设计方案:软件实现FIR滤波器的设计,在MATLAB中编写计算滤波系数的程序实现,并且需要在编写滤波器输入信号的程序,输入信号包含两种的正弦信号,一种信号频率小于1000HZ,一种信号频率大于1000HZ。
将MZTLAB中生成的.inc文件,和.txt文件,最后将生成的文件加载到CCS软件中。
4、设计方案的功能描述设计方案的功能通过在CCS软件下实现低通滤波器的仿真,具体是将输入信号包含两种的正弦信号的叠加,通过FIR低通滤波器,将正弦信号频率高的滤除。
5、设计中用到的算法研究设计中运用的算法是MATLAB中编写产生低通滤波器的系数,产生.inc文件,具体编写程序实现如下:fid=fopen('yang.inc','wt');a=round(fir1(32,1000/8000*2)*32768);for i=1:1:32if(a(i)<0)b=uint16(32768+a(i))+32767;fprintf(fid,'.word 0x%x\n ',b);elsefprintf(fid,'.word 0x%x\n ',a(i));endend在MATLAB中编写产生滤波器输入信号,生成.txt文件,具体编写程序实现如下:fid=fopen('yang.txt','wt');for i=0:1:255b=int16((sin(2*3.14*i*600/8000)+sin(2*3.14*i*3000/8000))*32768/2);if(b<0)a=uint16(32768+(b))+32767;fprintf(fid,'0x%x\n',a);elsefprintf(fid,'0x%x\n',b);endend编写实现了产生滤波器输入信号后将.txt文件转化为.dat文件,需要在.txt文件中加一句1651 1 0 1 0语句。
数字滤波系统设计(综合实验)一、实验目的1.学习数字滤波器的DSP实现原理和C54x的编程技巧;2.通过CCS图形显示工具观察输入/输出信号波形以及频谱变化;二、实验原理数字滤波的作用是滤除信号中某一部分频率分量。
信号经过滤波处理,就相当于信号频谱与滤波器的频率响应相乘的结果。
从时域来看,就是输入信号与滤波器的冲激响应作卷积和。
数字滤波器在各种领域由广泛的应用,例如数字音响、音乐和语音合成、躁声消除、数据压缩、频率合成、谐波消除、过载检测、相关检测等。
1. 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 指令可以方便地实现上面的计算。
图10.1说明了使用循环寻址实现FIR 滤波器的方法。
为了能正确使用循环寻址,必须先初始化BK,块长为N。
同时,数据缓冲区和冲激响应(FIR 滤波器的系数)的开始地址必须是大于N 的2 的最小幂的倍数。
例如,N=11,大于N 的最小2 的幂为16,那么数据缓冲区的第一个地址应是16 的倍数,因此循环缓冲区起始地址的最低4 位必须是0。
在图10.1中,滤波系数指针初始化时指向h(N-1),经过一次FIR 滤波计算后,在循环寻址的作用下,仍然指向h(N-1)。
而数据缓冲区指针指向的是需要更新的数据,如x(n)。
在写入新数据并完成FIR 运算后,该指针指向x(n-(N-1))。
所以,使用循环寻址可以方便地完成滤波窗口数据的自动更新.使用带MAC 指令的循环寻址模式实现FIR 滤波器,程序片段如下:(输入数据在AL 中,滤波结果在AH 中)STM #1,AR0 ;AR0=1STM #N,BK ;BK=N,循环寻址BUFFER 大小为NSTL A,*FIR_DATA_P+% ;更新滤波窗口中的采样数据RPTZ A,#(N-1) ;重复MAC 指令N 次,先将A 清零MAC *FIR_DATA_P+0%,*FIR_COFF_P+0%,A ;完成滤波计算。
DSP实验报告院系:哈尔滨理工大学荣成校区专业:电子信息工程实验二有限冲击响应滤波器(FIR)算法实验一、实验目的1.掌握用窗函数发设计FIR数字滤波器的原理和方法;2.熟悉线性相位FIR数字滤波器特性;3.了解各种窗函数对滤波特性的影响;二、实验设备1.计算机,CCS 3.1版软件,实验箱,DSP仿真器,连接线。
三、实验原理1.有限冲击响应数字滤波器的基础理论;2.模拟滤波器原理(巴特沃斯滤波器、且比学府滤波器、贝塞尔滤波器);3.数字滤波器系数的确定方法。
四、实验步骤1、复习如何设计FIR数字滤波;阅读本实验原理,掌握设计步骤;2、阅读本实验所提供的样例子程序;3、运行CCS软件,对样例程序进行跟踪,分析结果;4、填写实验报告。
5、样例程序实验操作说明A.实验前准备:①实验箱和CPU配置:SW2的2、4置ON,1、3置OFF;S2全置ON,S23置ON,JP3拨码开关的3、6位置ON,其余置OFF;S2全部置OFF.②用到西安连接“信号源”2号孔“信号源1”和“A/D单元”2号孔“ADIN1”;B.实验启动CCS 3.1,打开文件Exp_fir.pjt工程文件;在i=0处设置断点;打开VIEW/GRAPH/TIME/FREQUENCY打开窗口,进行如下改动(参照图片),其中x,y分别表示经A/D转换后的输入混叠信号(输入信号)和对该信号进行FIR滤波的结果;五、成果展示及代码单击“Animate”运行程序,在实验箱上调整观察窗口并观察滤波的效果(滤波效果明显);实验代码#include <math.h> //数学计算定义//-------------------------------------------------------------//---------------------------------------------------------------/* ****************** 宏定义*************************************************************************** */#define UCHAR unsigned char#define UINT16 unsigned int#define UINT32 unsigned long#define TRUE 1#define FALSE 0//---------------------------------------------------------//----------------定义寄存器地址--------------#define IODIR_ADDR 0x3400#define IODATA_ADDR 0x3401//---------------定义寄存器操作--------------#define IODIR *(ioport unsigned int *)IODIR_ADDR#define IODATA *(ioport unsigned int *)IODATA_ADDR#define IER0 (*(volatile unsigned int*)0x0000) //Interrupt Enable Register 0 #define IFR0 (*(volatile unsigned int*)0x0001) //Interrupt Flag Register 0 #define IER1 (*(volatile unsigned int*)0x0045) //Interrupt Enable Register 1 #define IFR1 (*(volatile unsigned int*)0x0046) //Interrupt Flag Register 1#define AD_Addr 0x20008#define AD_in (*(unsigned int *)AD_Addr) //AD输入//----------------------------------------------------------/* 全局变量定义*///---------------------------------------------------------#define Len 256#define FLen 51#define pi 3.1415927//-----------------------------------------------------------void firdes (double npass);interrupt void int1_isr();//-----------------------------------------------------------double npass,h[FLen], x[Len], y[Len], xmid[FLen];int in_x[Len];int m = 0;int intnum = 0;double xmean=0;int i=0;int flag = 0;double fs,fstop,r,rm;int i,j,p,k=0;//--------------------------------------------------------------------// 函数名称: void firdes(double npass)// 函数说明:// 输入参数:// 输出参数: 无//--------------------------------------------------------------------void firdes(double npass){int t;for (t=0; t<FLen; t++){h[t] = sin((t-(FLen-1)/2.0)*npass*pi)/(pi*(t-(FLen-1)/2.0));if (t == ((FLen-1)/2)) h[t]=0.08;}}//************************************void main(){Sys_Initial();IODIR|=0x0080; //设置IO口中GPIO7为输出IODATA|=0x0080; //设置GPIO7输出高电平IODIR|=0x0040; //设置IO口中GPIO6为输出IODATA&=0x00bf; //设置GPIO6输出低电平IODIR|=0x0010; //设置IO口中GPIO4为输出IODATA&=0x00ef; //设置GPIO4输出低电平IFR0 = IFR0;IFR1 = IFR1; //清除中断标志IER0 = 0;IER1 = 0; //禁止所有可屏蔽中断IER1|= 0x0001; //使能外部中断1//--------初始化数组in_x[i] =0--------------------- fs = 250000;fstop = 20000;npass = fstop/fs;for (i=0; i<FLen; i++){xmid[i]=0;}firdes(npass);asm( " bit(ST1,#11) = #0 "); //打开总中断//-----------等待AD7822中断-------------------------- while(1){asm(" nop ");}}//********************************************** //- 函数名称: interrupt void int1_isr()//- 函数说明://- 输入参数: 无//- 输出参数: 无//- 补充说明://*********************************************interrupt void int1_isr(){in_x[m] = AD_in;in_x[m] &= 0x00FF;m++;intnum = m;if (intnum == Len){intnum = 0;xmean = 0.0;for (i=0; i<Len; i++){xmean = in_x[i] + xmean;}xmean = 1.0*xmean/Len;for (i=0; i<Len; i++){x[i] = (double)(in_x[i] - xmean);}for (i=0; i<Len; i++){for (p=0; p<FLen; p++){xmid[FLen-p-1] = xmid[FLen-p-2];}xmid[0] = x[i];r = 0;rm= 0;for (j=0; j<FLen; j++){r = xmid[j] * h[j];rm = rm + r;}y[i] = rm;}m=0; //在这里设置断点}}。
实验三 IIR数字滤波器一、实验目的本实验学习数字滤波器的DSP实现原理和C54X编程技巧。
进一步熟悉使用CCS调试程序的方法。
二、实验要求1.用MATLAB设计满足要求的IIR滤波器;2.用C语言编写产生滤波器输入信号的文件;3. IIR数字滤波器的汇编源程序的编写;4. IIR滤波器链接命令文件的编写;5. 在CCS中观察输入、输出信号的波形及频谱。
三、实验内容本实验要求设计一个采样频率Fs为16000Hz,输入信号频率为4000Hz和6500Hz的合成信号,通过设计的带通滤波器将6500Hz信号滤掉,余下4000Hz信号。
要求设计一个三阶的切比雪夫Ⅰ型带通数字滤波器,其采样频率Fs =16KHZ,其通频带3.2KHz<f<4.8KHz,内损耗不大于1dB;f<2.4KHz和f>5.6KHz为阻带,其衰减大于20dB。
四、实验步骤1. IIR滤波器的设计在MATLAB中设计IIR滤波器,程序为:wp=[3.2,4.8];ws=[2.4,5.6];rp=1;rs=20[n,wn]=cheb1ord(wp/8,ws/8,rp,rs)[b,a]=cheby1(n,rp,wn)在设计IIR滤波器时,会出现一个或一个以上系数≥1的情况,为了用Q15定点小数格式表示系数,可以用大数去除所有的系数。
为避免在累加过程中出现≥1情况,将系数进一步缩小,为此,在MATLAB中:B=round(b/6*2^15);A=round(a/6*2^15);2.产生滤波器输入信号的文件在使用CCS的Simulator进行滤波器特性的测试时,需要输入时间信号x(n)。
以下是一个产生输入信号的C语言程序,文件名为iirinput.c#include <stdio.h>#include <math.h>void main(){int i;double f[256];FILE *fp;if((fp=fopen("iirin.inc","wt"))==NULL){printf("can't open file! \n");return;}fprintf(fp,"INPUT: .sect %cINPUT %c\n",'"','"');for(i=0;i<=255;i++){f[i]=sin(2*3.14159*i*4000/16000)+sin(2*3.14159*i*6500/16000);fprintf(fp," .word %1d\n",(long)(f[i]*32768/2)); }fclose(fp);}该程序将产生名为iirin.inc的输入信号程序。
“DSP原理与应用”实验报告学院:电气与新能源学院学号:2009111222姓名:梅亚敏实验一CCS集成开发环境的熟悉11.运行程序,查看并记录相关结果。
点击菜单Debug-Run或按功能键F5运行程序。
①查看数据的保存情况。
点击菜单View-Memory,会出现图1-6 (a)所示的“Memory Window Options”对话框,按图1-6 (a)设置Address=0x1000(为什么要设置成Address=0x1000?),Page=Data。
点击OK按钮,观察出现的如图1-6 (b)所示的“Memory ”对话框,这个对话框显示的是变量在数据存储器中的地址与值。
请思考:为什么.bss的地址是0x1000,变量y的地址是0x1005,变量x的地址又是多少呢?图1-6 (a) ( b)\答:将地址设置为0x1000是由于在编译命令文件中SPRAM:org=1000H len=1000H /*定义SPRAM区,起始地址1000H,长度1000H*/和.bss :>SPRAM PAGE 1 /*将.text段映射或定位到PAGE1的SPRAM区*/将.bss定位到PAGE1的SPRAM区,因为SPRAM区的起始地址是Ox1000,所以.bss的地址是0x1000 因为x数组的长度为5,所以y的地址为Ox1000+Ox0005=Ox1005.变量x的地址为Ox1000到Ox1004②查看程序的保存情况。
点击菜单View-Memory,按图1-7 (a)设置Address=0x0090(为什么要设置成Address=0x0090?),Page=Program。
点击OK按钮,观察出现的如图1-7 (b)所示的“Memory ”对话框,这个对话框显示的是可执行程序在程序存储器中的地址与指令代码。
请思考:为什么.text段的地址是0x0090?标号end的地址是0x009C?标号SUM的地址是0x009E?标号loop的地址是0x00A2?.data段的地址是0x00A8?图1-7 (a) (b)答:因为在example2.cmd中,将程序存储区的起始地址设置为Ox0090,所以Address要设置成Address=Ox0090EPROM:org=0090H len=0F70H /*定义EPROM区,起始地址0090H,长度0F70H*/.text :>EPROM PAGE 0 /*将.text段映射或定位到PAGE0的EPROM区*由于程序占程序存储器空间,所以,.end的位置在0x009C,后面的位置依次类推。