基于DSP的FIR数字滤波器设计实验汇编语言
基于DSP的FIR 滤波器的设计
1 前言本课程是电子信息工程专业的专业基础课,目的为通过对课程设计任务的完成,使学生理解课程教学的理论内容,并且能够掌握和熟悉DSP的开发流程和基本的编程方法。
FIR滤波器具有严格的线性相位特性,由于图像处理、数据传输等以波形携带的信息系统。
在数字信号处理中,滤波占有极其重要的地位。
数字滤波是数字信号处理的一个基本方法。
一个DSP芯片执行数字滤波算法的能力,反应了这种芯片的功能大小。
本文介绍了数字滤波器的工作原理,给出了采用窗函数法设计FIR,并利用MATLAB软件进行辅助设计,同时使用CCS应用软件来对一段音频信号进行低通滤波的仿真与调试.从而实现DSP数字低通滤波的设计方法。
FIR数字滤波器广泛地应用于数字信号处理领域,本文对FIR滤波器的工件原理和设计方法进行了简单的介绍。
文中采用窗函数法设计FIR数字滤波器,给出了TMS320VC5402的编程语句及其仿真波形。
2 FIR滤波器基本原理一个截止频率为ωc(rad/s)[1]的理想数字低通滤波器,其表达式是:这个滤波器在物理上是不可实现的,因为冲激响应具有无限性和因果性。
为了产生有限长度的冲激响应函数过截短保留冲激响应,可以加窗函数将其截短,通过截短保留冲激响应的中心部分,就可以获得一个线性相位的FIR滤波器。
例如,使用一个简单的矩形窗设计一个长度N=127,截止频率ωc=π/2的低通滤波器,冲激响应h(n)可表示为:一般来说,FIR数字滤波器输出y(n)的Z变换形式Y(z)与输入x(n)的Z 变换形式之间的关系如下:实现结构如图1所示。
从上面的Z变换和结构图可以很容易得出FIR滤波器的差分方程表示形式。
在实际的FIR滤波器的设计中,一般采用计算机辅助设计。
Matlab是一套功能强大的适应于科学工程计算的可视化高性能语言,他提供了2种窗函数方法设计FIR 滤波器:一种是标准通带滤波器的设计FIR1;一种是多带FIR滤波器的设计FIR2。
函数FIR1只能设计标准的低通、高通、带通和带阻线性相位FIR滤波器。
基于DSP的FIR数字滤波器_(设计实验)(汇编语言)
基于DSP 的FIR 数字滤波器 (设计实验)一、实验目的1.了解FIR (Finite Impulse Response 有限冲激响应)滤波器的原理及使用方法;2.了解使用MATLAT 语言设计FIR 滤波器的方法;3.了解DSP 对FIR 滤波器的设计及编程方法;4.熟悉在CCS 环境下对FIR 滤波器的调试方法; 二、实验原理数字滤波是DSP 的最基本应用,利用MAC (乘、累加)指令和循环寻址可以方便地完成滤波运算。
两种常用的数字滤波器:FIR (有限冲激响应)滤波器和IIR (无限冲激响应)滤波器的DSP 实现。
设FIR 滤波器的系数为h(0),h(1), ...,h(N-1),X(n)表示滤波器在n 时刻的输入,则n 时刻的输出为: FIR 数字滤波器的结构如图3.1所示。
1、线性缓冲区法又称延迟线法。
其方法是:对于n=N 的FIR 滤波器,在数据存储器中开辟一个N 单元的缓冲区,存放最新的N 个样本;滤波时从最老的样本开始,每读一个样本后,将此样本向下移位;读完最后一个样本后,输入最新样本至缓冲区的顶部。
以上过程,可以用N=6的线性缓冲区示意图来说明,如图3-2所示图3-2 N=6的线性缓冲区示意图2、循环缓冲区法图3-3说明了使用循环寻址实现FIR 滤波器的方法。
对于N 级FIR 滤波器,在数据存储区开辟一个称为滑窗的具有N 个单元的缓冲区,滑窗中存放最新的N 个输入样本值。
每次输入新的样本时,新的样本将改写滑窗中最老的数据,其他数据则不需要移动。
10()()()(0)()(1)(1)(1)[(1)]N i y n h i x n i h x n h x n h N x n N -==-=+-+---∑Z -1Z -1Z -1y(n)图3-3 FIR滤波器循环缓冲区存储器图三、实验内容与步骤设计一个FIR低通滤波器,通带边界频率为1500Hz,通带波纹小于1dB;阻带边界频率为2000Hz,阻带衰减大于40dB;采样频率为8000Hz。
数字信号处理课程设计--基于DSP 的 FIR 数字滤波器的设计
数字信号处理课程设计报告设计题目:基于DSP 的 FIR 数字滤波器的设计专业班级学号学生姓名指导教师教师评分目录一、摘要 (1)二、概述 (2)三、系统设计 (3)3.1 DSP 系统原理框图 (3)3.2 DSP 系统各部分分析 (4)四、硬件设计 (5)4.1 硬件整体电路及框图 (5)4.2 硬件各部分组成简介 (6)五、软件设计 (10)5.1 FIR 数字滤波器的基本网络结构 (10)5.2 FIR 数字滤波器的设计 (10)5.2.1 FIR 滤波器的主要特点 (10)5.2.2 FIR 滤波器设计方法 (10)5.2.3 窗函数法设计的基本思想 (11)5.2.4 用窗函数设计FIR滤波器的步骤 (12)5.3 FIR数字滤波器的MATLAB的实现 (13)5.3.1 Matlab软件介绍 (13)5.3.2 用Matlab实现FIR数字滤波器的几种方法 (13)5.4 FFT参数的计算 (17)5.5 DSP程序流程图 (17)六、实验结果 (19)七、个人总结 (21)八、参考文献 (22)附件: (23)数字信号处理课程设计一、摘要数字滤波器是数字信号处理中最重要的组成部分之一,数字滤波器是由数字乘法器、加法器和延时单元组成的一种算法或装置,可作为应用系统对信号的前期处理。
DSP芯片实现的数字滤波器具有稳定性好、精确度高、灵活性强及不受外界影响等特性。
因此基于DSP实现的数字滤波器广泛应用于语音图像处理、数字通信、频谱分析、模式识别、自动控制等领域,具有广阔的发展空间。
本文首先介绍了数字滤波器的概念及分类,以及数字滤波器的实现方法。
在理解FIR 滤波器的工作原理及其设计方法的基础上,在MATLAB环境下利用矩形窗设计实现FIR滤波器。
然后通过DSP结合CCS2.0软件进行编程,最终实现了基于DSP的FIR数字低通滤波器的设计。
仿真结果表明,基于DSP实现的滤波器具有稳定性好、精确度高、灵活性强等优点,并能实现对信号的实时滤波。
TMS320C54x汇编语言编程实现FIR滤波器
已知一低通滤波器的采样率为8KHz,通带为1500Hz,阻带为2000 Hz,带内波动3dB,带外衰减-50dB,滤波器的相位具有线性特性。
具体幅频特性见下图。
要求用等波纹方法设计出该FIR滤波器,然后用TMS320C54x汇编语言编程实现该FIR滤波器。
使用MATLAB设计语言设计滤波器:[n,fo,mo,w] = remezord( [500 600], [1 0], [0.01 0.1], 2000 );b = remez(n,fo,mo,w);其中,b为FIR滤波器系数,本题系数的具体设计结果为:-0.0119(FE7AH) 0.0406(0532H) -0.0178(FDB9H) -0.0315(FBF8H) 0.0087(011DH) 0.0498(0660H) 0.0066(00D8H) -0.0826(F56DH) -0.0488(F9C1H) 0.1779(16C5H) 0.4142(3504H) 0.4142(3504H) 0.1779(16C5H) -0.0488(F9C1H) -0.0826(F56DH) 0.0066(00D8H) 0.0498(0660H) 0.0087(011DH) -0.0315(FBF8H) -0.0178(FDB9H) 0.0406(0532H) -0.0119(FE7AH)频响如图1所示图1 滤波器频响图DSP设计代码:.title "FIR.asm".mmregs.global _c_int00PA0 .set 0PA1 .set 1size .set 22.bss count,2.bss x,22.bss y,64.dataCOEF: .word 0FE7Ah ; H0----H21 .word 0532h.word 0FDB9h.word 0FBF8h.word 011Dh.word 0660h.word 00D8h.word 0F56Dh.word 0F9C1h.word 16C5h.word 3504h.word 3504h.word 16C5h.word 0F9C1h.word 0F56Dh.word 00D8h.word 0660h.word 011Dh.word 0FBF8h.word 0FDB9h.word 0532h.word 0FE7Ah.text_c_int00: SSBX FRCTST #0, *(count)STM #x+22,AR1STM #y,AR2STM #21 ,AR0LD #x+1 ,DPPORTR PA1,@x+1fir: RPTZ A,#21MACD *AR1-,COEF,ASTH A,*AR1PORTW *AR1+,PA0STH A,*AR2+ADDM #1,*(count)CMPM *(count),1024BC done, TCBD firPORTR PA1,*AR1+0done: B done.end通过CCS观察滤波器频响如图2所示,图2 滤波器频响输入信号为正弦波,频率为1000Hz,输入文件sin_1000.dat,输出文件out_1000.dat,波形如图3所示图3 输入信号频率为1000Hz时的输出结果输入信号为正弦波,频率为2500Hz,输入文件sin_2500.dat,输出文件out_2500.dat,波形如图4所示图4 输入信号频率为2500Hz时的输出结果Matlab分析代码见Lowpass_FIR\annaly\FIR_annaly.m文件,分析结果如图所示:图5 输入信号频率为1000Hz 时的分析结果图6 输入信号频率为2500Hz 时的分析结果0.0020.0040.0060.0080.010.0120.014-4-22441000Hz 输入信号-4-22441000Hz 输出信号42500Hz 输入信号00.0020.0040.0060.0080.010.0120.01442500Hz 输出信号。
DSP实验报告——FIR和IIR滤波器设计
DSP 实验报告——FIR 和 IIR 滤波器设计
4、设计思路
图 1 FIR 滤波器直接结构图
对于 FIR 滤波器的设计,其系数 h(n) 就是关键。由于 matlab 自带滤波器设计
DSP 实验报告——FIR 和 IIR 滤波器设计
DSP 实验报告
实验一 FIR 滤波器的设计
1、实验目的
利用所学 DSP 知识,在 CCS3、3 平台上,对 TMS320VC5416DSP 设计,编程实 现 FIR 滤波器。从而学会使用 CCS 软件与 TMS320VC5416 实验板。
2、实验要求
图8
(a) 时域图
DSP 实验报告——FIR 和 IIR 滤波器设计
(b) 频域图 图 9 输入信号 1 波形图
(a) 滤波结果时域图
(b) 滤波结果频域图 图 10 信号 1 滤波结果图 (a) 时域图
(b)频域图 图 11 输入信号 2 波形图
(a) 滤波结果时域图
DSP 实验报告——FIR 和 IIR 滤波器设计
取样响应为 h(n) ,长度为 N。 h(n) 表示截取 hd (n) 后的冲激响应,即 h(n) (n)hd (n) ,
其中(n) 即为窗函数,窗长为 N。一般的 FIR 滤波器差分方程如下:
n1
y(n) h(k)x(n k) k 0
进行 Z 变换得到 FIR 的系统函数为:
N 1
H (z) h(n)z n n0
DSP 实验报告——FIR 和 IIR 滤波器设计
图 7 CCS3、3 程序窗口
FIR 数字滤波器(DSP实验报告)
FIR 数字滤波器一、实验目的数字滤波的作用是滤除信号中某一部分频率分量。
信号经过滤波处理,就相当于信号频谱与滤波器的频率响应相乘的结果。
从时域来看,就是输入信号与滤波器的冲激响应作卷积和。
数字滤波器在各种领域由广泛的应用,例如数字音响、音乐和语音合成、躁声消除、数据压缩、频率合成、谐波消除、过载检测、相关检测等。
本实验主要学习数字滤波器的DSP 实现原理和C54X 编程技巧,并通过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指令可以方便地实现上面的计算。
使用带MAC 指令的循环寻址模式实现FIR 滤波器,程序片段如下:(输入数据在AL 中,滤波结果在AH中)STM #1,AR0 ;AR0=1STM #N,BK ;BK=N,循环寻址BUFFER 大小为N STL A,*FIR_DATA_P+% ;更新滤波窗口中的采样数据RPTZ A,#(N-1) ;重复MAC指令N次,先将A清零MAC *FIR_DATA_P+0%,*FIR_COFF_P+0%,A ;完成滤波计算。
注意FIR滤波系数存放在;数据存储区另一种方法是利用C54x 系列芯片的提供的FIRS 指令来实现FIR 滤波器。
为一种有限单位冲激响应呈现对中心点对称的FIR 滤波器。
长度为N的线性相位FIR,使用带FIRS 指令的循环寻址模式实现FIR 滤波器,程序片段如下:(输入数据在AL 中,滤波结果在B 中) STM #1,AR0 ;AR0=1STM #(N/2),BK ;BK=N/2,循环寻址BUFFER大小为NMVDD *ar2, *ar3 ;更新Buffer2STL A, *ar2+% ;更新滤波窗口中的采样数据ADD *ar2+0% , *ar3+0% ;初始化ARPTZ B, #(N/2-1) ;重复FIRS指令N/2次,先将B清零FIRS *ar2+0%, *ar3+0%,filter_coff+N/2 ;完成滤波计算。
【VIP专享】通用DSP实现FIR滤波器实验报告
1
带通滤波器的频响特性
0.5
-500
-1000
-1500 0
0 0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 Hertz
0
1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 Hertz
I
6.培养学生观察、思考、对比及分析综合的能力。过程与方法1.通过观察蚯蚓教的学实难验点,线培形养动观物察和能环力节和动实物验的能主力要;特2征.通。过教对学观方察法到与的教现学象手分段析观与察讨法论、,实对验线法形、动分物组和讨环论节法动教特学征准的备概多括媒,体继课续件培、养活分蚯析蚓、、归硬纳纸、板综、合平的面思玻维璃能、力镊。子情、感烧态杯度、价水值教观1和.通过学理解的蛔1虫.过观适1、察于程3观阅 六蛔寄.内列察读 、虫生出蚯材 让标容生3根常蚓料 学本教活.了 据见身: 生,师的2、解 问的体巩鸟 总看活形作 用蛔 题线的固类 结雌动态业 手虫 自形练与 本雄学、三: 摸对 学动状习人 节蛔生结4、、收 一人 后物和同类 课虫活构请一蚯集 摸体 回并颜步关 重的动、学、蚓鸟 蚯的 答归色学系 点形教生生让在类 蚓危 问纳。习从 并状学理列学平的害 题线蚯四线人 归、意特出四生面体以形蚓、形类 纳大图点常、五观玻存 表及动的鸟请动文 本小引以见引、察璃现 ,预物身类 3学物明 节有言及的、导巩蚯上状 是防的体之生和历 课什根蚯环怎学固蚓和, 干感主是所列环史 学么据蚓节二样生练引牛鸟 燥染要否以举节揭 到不上适动、区回习导皮类 还的特分分蚯动晓 的同节于物让分答。学纸减 是方征节布蚓物起 一,课穴并学蚯课生上少 湿法。?广的教, 些体所居归在生蚓前回运的 润;4泛益学鸟色生纳.靠物完的问答动原 的4蛔,处目类 习和活环.近在成前题蚯的因 ?了虫以。标就 生体的节身其实端并蚓快及 触解寄上知同 物表内特动体结验和总利的慢我 摸蚯生适识人 学有容点物前构并后结用生一国 蚯蚓在于与类 的什,的端中思端线问活样的 蚓人飞技有 基么引进主的的考?形题环吗十 体生行能着 本特出要几变以动,境?大 节活的1密 方征本“特节化下物.让并为珍 近习会形理切 法。课生征有以问的小学引什稀 腹性态解的 。2课物。什游题主.结生出么鸟 面和起结蛔关观题体么戏:要利明蚯?类 处适哪构虫系察:的特的特用确蚓等 ,于些特适。蛔章形殊形征板,这资 是穴疾点于可虫我态结式。书生种料 光居病是寄的们结构,五小物典, 滑生?重生鸟内学构,学、结的型以 还活5要生类部习与.其习巩鸟结的爱 是如原活生结了功颜消固类构线鸟 粗形何因的存构腔能色化练适特形护 糙态预之结的,肠相是系习于点动鸟 ?、防一构现你动适否统。飞都物为结蛔。和状认物应与的行是。主构虫课生却为和”其结的与题、病本理不蛔扁的他构特环以生?8特乐虫形观部特8征境小理三页点观的动位点梳相组等、这;,哪物教相,理适为方引些2鸟,育同师.知应单面导鸟掌类结了;?生识的位学你握日构解2互.。办特生认线益特了通动手征观识形减点它过,抄;察吗动少是们理生报5蛔?物,与的解.参一了虫它和有寄主蛔与份解结们环些生要虫其。蚯构都节已生特对中爱蚓。会动经活征人培鸟与飞物灭相。类养护人吗的绝适这造兴鸟类?主或应节成趣的为要濒的课情关什特临?就危感系么征灭来害教;?;绝学,育,习使。我比学们它生可们理以更解做高养些等成什的良么两好。类卫动生物习。惯根的据重学要生意回义答;的3.情通况过,了给解出蚯课蚓课与题人。类回的答关:系线,形进动行物生和命环科节学动价环值节观动的物教一育、。根教据学蛔重虫点病1.引蛔出虫蛔适虫于这寄种生典生型活的线结形构动和物生。理二特、点设;置2.问蚯题蚓让的学生生活思习考性预和习适。于穴居生活的形态、结构、生理等方面的特征;3.线形动物和环节动物的主要特征。
基于DSP的FIR数字滤波器的设计与仿真毕业设计论文
基于DSP的FIR数字滤波器的设计与仿真毕业设计论文研究背景数字信号处理在现代通信、音视频处理、图像处理等领域中起着至关重要的作用,数字滤波器是数字信号处理中的重要内容。
其中FIR数字滤波器是一种常用的滤波器,其具有线性相位和稳定性等特点,在数字信号处理中应用广泛。
因此,本毕业设计将以FIR 数字滤波器为研究对象,结合DSP平台,进行数字滤波器的设计与仿真研究。
研究目标本文旨在设计一种基于DSP的FIR数字滤波器,并且研究其性能和仿真效果。
主要目标包括:1. 掌握DSP平台的开发流程和设计方法,包括硬件平台和软件开发技术。
2. 研究FIR数字滤波器的原理和特点,掌握其设计方法和计算技巧。
3. 基于DSP平台设计实现FIR数字滤波器,包括硬件和软件两个方面,满足设计要求。
4. 仿真FIR数字滤波器的性能和效果,验证设计的正确性和可行性。
5. 撰写毕业设计论文,总结设计过程和结果,体现出自己的设计思路和方法。
研究方法本研究采用如下方法:1. 研究DSP平台的开发流程和设计方法,包括使用硬件平台和软件开发技术。
2. 研究FIR数字滤波器的原理和特点,掌握其设计方法和计算技巧。
3. 基于DSP平台设计实现FIR数字滤波器,采用Verilog语言描述硬件电路,C语言编写软件程序。
4. 利用模拟工具对FIR数字滤波器进行仿真,测试性能和效果。
5. 撰写毕业设计论文,总结设计过程和结果,体现出自己的设计思路和方法。
预期结果本研究预期可以达到如下结果:1. 掌握DSP平台的开发流程和设计方法,能够应用于数字信号处理和嵌入式系统开发等领域。
2. 研究FIR数字滤波器的原理和特点,掌握其设计方法和计算技巧,能够进行数字信号处理相关工作。
3. 基于DSP平台设计实现FIR数字滤波器,满足设计要求,具有较好的性能和稳定性。
4. 仿真FIR数字滤波器的性能和效果,能够验证设计的正确性和可行性。
5. 撰写毕业设计论文,总结设计过程和结果,体现出自己的设计思路和方法,具有较好的表达和撰写能力。
dsp实验报告 fir实验
dsp实验报告 fir实验
DSP实验报告 FIR实验
一、实验目的
本实验旨在通过设计一种FIR滤波器,加深对数字信号处理中FIR滤波器的理解,并掌握FIR滤波器的设计方法和实现过程。
二、实验原理
FIR滤波器是一种常见的数字滤波器,其特点是无需考虑系统的稳定性问题,且具有线性相位特性。
FIR滤波器的传递函数为:
H(z) = b0 + b1z^(-1) + b2z^(-2) + ... + bMz^(-M)
其中,b0、b1、b2...bM为滤波器的系数。
FIR滤波器的设计主要包括窗函数法、频率采样法和最优化法等。
三、实验步骤
1. 确定滤波器的通带截止频率和阻带截止频率;
2. 根据通带截止频率和阻带截止频率选择合适的窗函数;
3. 计算窗函数的系数;
4. 将窗函数的系数作为FIR滤波器的系数;
5. 利用MATLAB或其他数学软件进行FIR滤波器的模拟实现;
6. 对设计的FIR滤波器进行性能评估,包括幅频特性、相频特性、群延迟等。
四、实验结果
经过实验设计和模拟实现,得到了满足要求的FIR滤波器。
通过对滤波器的性
能评估,得到了其幅频特性、相频特性和群延迟等性能指标。
实验结果表明,
设计的FIR滤波器具有良好的滤波效果,能够满足通带截止频率和阻带截止频
率的要求。
五、实验总结
通过本次实验,加深了对FIR滤波器的理解,掌握了FIR滤波器的设计方法和实现过程。
同时,也了解了数字信号处理中滤波器的重要性,以及如何根据实际需求设计出满足要求的滤波器。
希望通过本次实验,能够对数字信号处理的相关知识有更深入的了解和掌握。
基于DSP的FIR数字滤波器设计及实现
() 2
可以看出 。 数字滤 波 器 的功能 就是 把输 入 序列 通过 一定 的 运算 变换成输 出序列 … 。 数字滤波器依据 冲激 响应 的宽 度划 分为有 限长单 位 冲 激响应 ( I 滤波 器 和无 限长单 位 冲激 响应 (I 滤波 器 。 FR) I R) 从结构类型来看 , 在系 统传 递 函数 表现 为 : 果 全部 = 如
第5 卷第 4期 21 0 0年 1 2月
江 西 蓝 天 学 院 学 报
J URNAL OF JANG L E S Y O I XIB U K UNI RST VE I Y
Vo 1 No 4 5. .
De e e . 0 0 c mb b 2 1
基 于 D P的 FR数 字 滤 波 器 设 计 及 实现 S I
盯
,
,
着信 息时代和数字 世界 的 到来 , 字信 号处 理 已成 为 当今 数
一
日( )=— z
乏
~
() 1
门极其 重要的学科和技术 领域 , 它在 通信 、 语音 、 图像 、 自
1一
口 z“ ^
动控 制、 雷达 、 军事 、 空航天 、 航 医疗 和家用 电器 等众 多领域 直接 由此 式可得出表示输入输 出关 系的常 系数线性 差分 方 得 到了广泛的应 用 。而在 数字 信号 处 理应用 中, 字滤 波 程为 : 数
中图分类号:P1 T31
文献标识码: A
文章鳊号: 3 21 )4 08 0 1 (00 0 — 2 — 4 2
在一个实 际的应 用 系统 中 , 由于 设备 本 身和 外界 环境 1 FR滤 波器 的 M T A I A L B设计 的原 因 , 总存在各种干扰 , 号 中掺杂 了噪声 。譬 如音 频 使信
dsp实验报告 fir实验报告
dsp实验报告 fir实验报告DSP实验报告:FIR实验报告引言:数字信号处理(Digital Signal Processing,DSP)是一门研究如何对数字信号进行处理和处理的学科。
其中,滤波器是数字信号处理中最常用的技术之一。
本实验报告旨在介绍FIR(Finite Impulse Response)滤波器的原理、设计和实现过程,并通过实验验证其性能。
一、FIR滤波器的原理FIR滤波器是一种线性时不变系统,其输出信号仅由输入信号的有限个历史样本决定。
其基本原理是将输入信号与滤波器的冲激响应进行卷积运算,以实现对输入信号的滤波处理。
二、FIR滤波器的设计方法1. 理想低通滤波器设计方法理想低通滤波器的频率响应在截止频率之前为1,在截止频率之后为0。
通过对理想低通滤波器的频率响应进行采样和离散化,可以得到FIR滤波器的系数序列。
2. 窗函数法设计FIR滤波器窗函数法是一种常用的FIR滤波器设计方法。
其基本思想是将理想低通滤波器的频率响应与一个窗函数进行乘积,从而得到实际可实现的FIR滤波器的系数序列。
常用的窗函数有矩形窗、汉宁窗、汉明窗等。
三、FIR滤波器的实现FIR滤波器可以通过直接形式和间接形式两种方式实现。
直接形式是按照滤波器的差分方程进行计算,而间接形式则是利用FFT(Fast Fourier Transform)算法将滤波器的系数序列转换为频域进行计算。
四、FIR滤波器的性能评估1. 幅频响应幅频响应是评估FIR滤波器性能的重要指标之一。
通过绘制滤波器的幅频响应曲线,可以直观地观察滤波器在不同频率下的衰减情况。
2. 相频响应相频响应是评估FIR滤波器性能的另一个重要指标。
相频响应描述了滤波器对输入信号的相位延迟情况,对于某些应用场景,相频响应的稳定性和线性性非常重要。
3. 稳态误差稳态误差是指FIR滤波器在达到稳态后输出信号与理想输出信号之间的差异。
通过对滤波器的输入信号进行模拟或实际测试,可以计算出滤波器的稳态误差,并评估其性能。
实验FIR数字滤波器DSP编程实现
实验4: FIR 数字滤波器的DSP 编程实现一、实验目的:㈠ 了解一个FIR 数字滤波器DSP 程序的设计、编写和建立的过程。
㈡ 学习使用simulator 调试滤波器程序的方法。
了解使用simulator 进行程序调试,如何输入测试信号,观察输出结果。
二、实验原理:㈠ FIR 滤波器的结构和数据存储方式对于一个FIR 滤波器,假定其冲激响应为)12,1,0(-=N i b i ,输入信号为x (n ),则有以下差分方程:∑-=-=1)()(N i i i n x b n y其对应的滤波器传递函数为:i N i i z b z H --=∑=1)(可以用横截型(又称直接型或卷积型)FIR 数字滤波器的结构图表示(图8-6-1)。
)1+N图8-6-1 横截型FIR 滤波器的结构图由上面的公式和结构图可知,FIR 滤波算法实际上是一种乘法累加运算。
它不断地从输入端读入样本值x (n ),经延时(1-z ),做乘法累加,再输出滤波结果y (n )。
在实际编程中,1-z 的实现方法有两种:线性缓冲区法和循环缓冲区法。
本实验采用了循环缓冲区法。
循环缓冲区法的主要特点是:对于N 级FIR 滤波器,在数据存储区开辟一个称为滑窗的具有N 个单元的缓冲区,滑窗中存放最新的N 个输入样本值。
每次输入新的样本时,新的样本将改写滑窗中最老的数据,其它数据则不需要移动。
编写程序时利用片内BK (循环缓冲区长度)寄存器对滑窗进行间接寻址,因而循环缓冲区地址是首尾相邻的。
如图8-6-2所示,图中假定N=6。
数据存储器数据存储器数据存储器循环缓冲区顶部循环缓冲区底部x(n)x(n-1)x(n-1)x(n-1)x(n)x(n)x(n-2)x(n-2)x(n-2)x(n-3)x(n-3)x(n-3)x(n-4)x(n-4)x(n+2)x(n-5)x(n+1)x(n+1)↓←XAR↓←XAR↓←XAR 图8-6-2 利用循环缓冲区法实现1-z假定第一次执行完∑=-=5) ()(iiinxbny后,间接寻址的辅助寄存器ARx指向x(n-5)。
DSP的FIR设计C语言编写
DSP的FIR设计C语言编写FIR(Finite Impulse Response)滤波器是数字信号处理中常用的一种滤波器类型。
它具有有限的冲激响应,只对有限长度的输入信号做出响应。
低通滤波器是一种能够通过滤除高频分量而保留低频分量的滤波器。
FIR低通滤波器的设计可以通过数字滤波器设计方法来实现,其中一种常用的方法是窗函数法。
以下是一个用C语言编写的FIR低通滤波器设计实例:```c#include <stdio.h>#include <stdlib.h>#include <math.h>//FIR低通滤波器设计函数void fir_lowpass_filter_design(float *filter, int order, float cutoff_freq, float sampling_freq)int i;float omega_c = 2 * M_PI * cutoff_freq / sampling_freq;//计算滤波器系数for (i = 0; i <= order; i++)if (i == (order / 2))filter[i] = omega_c / M_PI;filter[i] = sin(omega_c * (i - (order / 2))) / (M_PI * (i - (order / 2)));}int mainint order = 51; // 滤波器阶数float cutoff_freq = 1000.0; // 截止频率float sampling_freq = 8000.0; // 采样频率float *filter = malloc((order + 1) * sizeof(float)); // 分配滤波器系数数组内存//调用FIR低通滤波器设计函数fir_lowpass_filter_design(filter, order, cutoff_freq, sampling_freq);//打印滤波器系数printf("Filter Coefficients:\n");for (int i = 0; i <= order; i++)printf("h[%d] = %f\n", i, filter[i]);}free(filter); // 释放滤波器系数数组内存return 0;上述代码中的`fir_lowpass_filter_design`函数用于计算滤波器系数,其参数`filter`是一个指向滤波器系数数组的指针,`order`是滤波器阶数,`cutoff_freq`是截止频率,`sampling_freq`是采样频率。
基于DSP的数字滤波系统源程序(汇编语言)
基于DSP的数字滤波系统源程序(汇编语言) .title " test vc5402'bootloader...".def _c_int00.mmregsgpiocr .set 3chgpiosr .set 3dhdxr10 .set 23hdrr10 .set 21hspsa0 .set 38hspcr10 .set 39hspcr20 .set 39hxcr10 .set 39hpcr0 .set 39hdxr11 .set 43hspsa1 .set 48hspcr11 .set 49hspcr21 .set 49hxcr11 .set 49hpcr1 .set 49hsrgr1 .set 49hsrgr2 .set 49hswcr .set 2bhtimer_count .set 060hmcbsp_init .set 061hwave_ptr .set 062his_new_data .set 063hnew_ad .set 064hout_wave_ptr .set 065ht_ar2 .set 066ht_ar3 .set 067htemp .set 068hwave_buf .set 0900hout_wave_buf .set 01000hN .set 38 ; FIR tapsfir_coef_buf .set 100h ; FIR coef bufferfir_data .set 200h ; FIR windows data buffer !.textrs b _c_int00nopnopnmi b __retnopnopsint17 b __retnopnopsint18 b __retnopnopsint19 b __retnopnopsint20 b __ret.word 0,0 sint21 b __ret.word 0,0 sint22 .word 01000h .word 0,0,0 sint23 .word 0ff80h .word 0,0,0 sint24 .word 01000h .word 0,0,0 sint25 .word 0ff80h .word 0,0,0 sint26 .word 01000h .word 0,0,0 sint27 .word 0ff80h .word 0,0,0 sint28 .word 01000h .word 0,0,0 sint29 .word 0ff80h .word 0,0,0 sint30 .word 01000h .word 0,0,0 int0 b __retnopnopint1 b __retnopnopint2 b __retnopnoptint b timernopnopbrint0 b receivenopnopbxint0 bd transmitnopnoptrint b __retnopnoptxint b __retnopnopint3 b __retnopnophpint b __retnopnopq26 .word 0ff80h .word 0,0,0 q27 .word 01000h.word 0,0,0q28 .word 0ff80h.word 0,0,0q29 .word 01000h.word 0,0,0q30 .word 0ff80h.word 0,0,0q31 .word 01000h.word 0,0,0_c_int00:stm #2020h,pmst ; vector table start: 0x2000ssbx intm ; close all int ! (ssbx intm)ssbx sxm ; extend sign !ssbx frct ; faction multiplystm #10h,26h ; stop TIMER0 !stm #10h,36h ; stop TIMER1 !stm #0ffh,sp ; sp= 0x0ffld #0,dp ; dp=0stm #0ffffh,ifr ; clear all int !stm #20h,imr ; bit5->BXINT0, bit4->BRINT0, enable BXINT0stm #02492h,swwsr ; all 2 waits !stm #0,swcrstm #0,58hwait_pll:ldm 58h,aand #1,abc wait_pll,aneqstm #87ffh,58h ; switch pll*9 -> 90M clkrpt #1000nop;***********************************************************************; initalize RAM, Variable....;***********************************************************************stm #wave_buf,ar6stm #1,ar0rpt #24mvpd wave_data,*ar6+0 ; move wave data to wave_buf -> 0x6000hstm #wave_buf,wave_ptr ; save wave buffer'ptrstm #out_wave_buf,out_wave_ptr ; save out wave buffer'ptr, because use ; circular address, so when save out_wave; date,must ++ !stm #fir_coef_buf,ar6rpt #N-1mvpd fir_coef,*ar6+ ; move fir coef to fir_coef_buf(in data mem) stm #fir_coef_buf,t_ar2 ;stm #fir_data,t_ar3stm #0aa55h,mcbsp_init ; when mcbsp_init==0xaa55, transmit for init ac01 stm #5,timer_count ; init variable timer_count !stm #0,is_new_data ; if is_new_data ==1 , has new AD data by slave ac01 ! stm #1000h,ar0stm #1800h,ar5stm #400h,bkld *ar0,tld #0,b;******************************************************************; The following codes are used to initalize McBSP0 !;******************************************************************stm #0,spsa0 ; choose SPCR10stm #2000h,spcr10 ; receive sign_extend in DRRstm #1,spsa0 ; choose SPCR20stm #0c0h,spcr20 ; fs -> int !stm #2,spsa0 ; choose RCR10stm #40h,39hstm #3,spsa0 ; choose RCR20stm #0,39hstm #4,spsa0 ; choose XCR10stm #40h,xcr10stm #5,spsa0 ; choose XCR20stm #0,39hstm #0eh,spsa0 ; choose PCR0stm #0dh,pcr0 ; fs is low active, rise edge of clkx, falling edge ; of clkrstm #7h,spsa0stm #8000h,39hrpt #0ffffhnopstm #00h,dxr10ldm 22h,astm #1,38hstm #0c1h,39h ; start McBSP0 send !ld #603h,arsbx intm ; enable all int !;----------------------------------------------------------------------; The following codes are initalized AC01, ALL AC01 setup same !;----------------------------------------------------------------------idle 1idle 1idle 1idle 1 ; reset two AC01 by software !ld #600h,aidle 1 ; wait for int .....ld #3,aidle 1 ; send #3ld #00105h,a ; fs=10M/2/A/B= 25k; flp=10M/2/40/A= 25k (all pass); fhp=fs/200= 125Hz (not use !); A=05,B=40(0x28)idle 1 ; send 1th regs -> 05hld #3,aidle 1 ; send #3ld #00228h,aidle 1 ; send 2th regs -> 28hld #3,aidle 1 ; send #3ld #00300h,aidle 1 ; send 3th regs -> 00hld #3,aidle 1 ; send #3ld #00405h,aidle 1 ; send 4th regs -> 05h (AD & DA 0 dB)ld #3,aidle 1 ; send #3ld #00505h,aidle 1 ; send 5th regs -> 05h (highpass filter disable) ld #3,aidle 1 ; send #3ld #00600h,aidle 1 ; send 6th regs -> 00hld #3,aidle 1 ; send #3ld #00700h,aidle 1 ; send 7th regs -> 0ld #3,aidle 1 ; send #3ld #800h,aidle 1 ; send 8th regs -> 0ld #0h,astm #0,38hstm #2001h,39h ; start MCbsp0 receive !stm #30h,imr ; bit5->BXINT0, bit4->BRINT0, enable BXINT0;******************************************************************; The following codes are used to initalize TIMER !;******************************************************************stm #10h,tcr ; stop TIMER !stm #0ffffh,prd ;stm #0fh,tcr ; TIMER start, each about 100HZ ....orm #8,imr ; enable TIMER INT !again:bitf is_new_data,#1 ; test is_new_data == 1 ?cc fir,tc ; ==1, then call fir ! new AD data in new_ad(0x64) b again;*********************************************************************; The following codes are serived for McBSP0' transmit !;********************************************************************* transmit:pshm st1pshm st0pshm bkpshm ar7pshm ahpshm alcmpm mcbsp_init,#0aa55hbc init,tcstm #25,bk ; each AC01 has 25 dots to D/A !mvdm #wave_ptr,ar7 ; restore wave buffer ptr !nopld *ar7+%,anopstlm a,dxr10 ; send wave data ! Master AC01 make source wave, ; Slave AC01 make filter result wave !bd wave_make_endmvmd ar7,#wave_ptr ; save wave buffer ptr !init:stlm a,dxr10bitf dxr10,#800h ; if setup last reg of AC01, set mcbsp_init=0 ! bc wave_make_end,ntc ; not equal ,jump !stm #0,mcbsp_init ; when mcbsp==0 or 1, transmit for make wave ! wave_make_end:popm alpopm ahpopm ar7popm bkpopm st0popm st1__ret:rete;********************************************************************; The following codes are serived for McBSP0' receive ! use AR5,BK!;********************************************************************* receive:pshm st1pshm st0ld #0,dpmvkd drr10,*ar5 ; save AD datapshd *ar5+% ; save AD data in AD_buffer(0x1800-0x1c00)popd new_adstm #1,is_new_data ; has new AD datapopm st0popm st1rete;********************************************************************; The following codes are serived for vc5402' TIMER !;********************************************************************* timer:pshm ahpshm alldm timer_count,asub #1,abc not_show_led,aneq ; if a != 0 ,jump !bitf st1,#2000h ; test XF?bc show_led,tcssbx xf ; set xf=1b show_conshow_led:rsbx xf ; set xf=0show_con:ld #5,a ;not_show_led:stlm a,timer_countpopm alpopm ahrete;************************************************************************ ; The following codes is used to FIR, new AD DATA in new_ad(0x64); FIR buffer coff-> 0x100(ar2), FIR window buffer -> 0x200(ar3);************************************************************************fir:pshm st1pshm st0pshm bkpshm ar7pshm ahpshm alpshm ar0pshm ar2pshm ar3mvdm #t_ar2,ar2 ; restore ar2mvdm #t_ar3,ar3 ; restore ar3ld new_ad,-2,a ; new AD data -> a, remove two LSBsstm #1,ar0stm #N,bk ; set circular addressing sizestl a,*ar3+%rptz a,#(N-1) ; 0 -> a, then repeat 34 timesmac *ar2+0%,*ar3+0%,a ; done FIR filter, result in ahmvmd ar3,#t_ar3 ; save ar3mvmd ar2,#t_ar2 ; save ar2stm #1,ar0stm #100h,bk ; each AC01 has 25 dots to D/A !mvdm #out_wave_ptr,ar7 ; restore wave buffer ptr !sth a,-2,temp ; save FIR result in templd temp,2,a ; shift 2 bit for AC01 D/A !stl a,*ar7+0% ; save FIR result to wave buffer !stl a,tempmvmd ar7,#out_wave_ptr ; save wave buffer ptr !stm #0,is_new_data ; new AD data has been processed !ld #0,dpcmpm out_wave_ptr, 1000hbc con_fir,ntcccs_show:nop ; if out_wave_ptr == 0xc00,nop ; may show out_wave in CCS !!! show 128 dots ! ; input buffer -> 0x1800; output buffer -> 0x1000 (show from 0x1020)con_fir:popm ar3popm ar2popm ar0popm alpopm ahpopm ar7popm bkpopm st0popm st1ret;************************************************************************; The following data is used by make wave ! when using, must copy to; wave buffer -> 0x6000;************************************************************************wave_data: ; freq about 1k Hz.word 03ffch ; +2 volt.word 03ffch.word 03ffch.word 03ffch.word 03ffch.word 03ffch.word 03ffch.word 03ffch.word 03ffch.word 03ffch.word 03ffch.word 03ffch.word 03ffch.word 0c000h ; -2 volt.word 0c000h.word 0c000h.word 0c000h.word 0c000h.word 0c000h.word 0c000h.word 0c000h.word 0c000h.word 0c000h.word 0c000h.word 0c000h;************************************************************************ ; Filter Type Lowpass; Filter Length 38; Sampling Frequency 25.00000000; Upper Band Edge 1.20000005; Lower Band Edge 2.79999995;********************************************************************** fir_coef:.word 34 ;C037.word 235 ;C036.word 500 ;C035.word 735 ;C034.word 808 ;C033.word 587 ;C032.word 0 ;C031.word -914 ;C030.word -1972 ;C029.word -2854 ;C028.word -3163 ;C027.word -2518 ;C026.word -662 ;C025.word 2432 ;C024.word 6516 ;C023.word 11078 ;C022.word 15431 ;C021.word 18849 ;C020.word 20728 ;C019.word 20728 ;C018.word 18849 ;C017.word 15431 ;C016.word 11078 ;C015.word 6516 ;C014.word 2432 ;C013.word -662 ;C012.word -2518 ;C011.word -3163 ;C010.word -2854 ;C009.word -1972 ;C008.word -914 ;C007.word 0 ;C006.word 587 ;C005.word 808 ;C004.word 735 ;C003.word 500 ;C002.word 235 ;C001.word 34 ;C000.end命令链接文件:MEMORY{PAGE 0: PROG: origin = 2000h, length = 2000hPAGE 1: DATA: origin = 0c00h, length = 100hPAGE 2: DATA: origin = 0d00h, length = 200h PAGE 3: DATA: origin = 0f00h, length = 100h}SECTIONS{.text > PROG PAGE 0.bss > DATA PAGE 1.data > DATA PAGE 2}。
基于DSP的数字滤波系统设计 (综合实验)(汇编语言)
数字滤波系统设计(综合实验)一、实验目的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数字滤波器的设计
实验五FIR数字滤波器的设计杨阳04011003一、实验目的(1)掌握用窗函数法,频率采样法及优化设计法设计FIR滤波器的原理及方法,熟悉响应的matlab编程;(2)熟悉线性相位FIR滤波器的幅频特性和相频特性;(3)了解各种不同窗函数对滤波器性能的影响。
二、实验内容(1)N=45,计算并画出矩形窗、汉明窗、布莱克曼窗的归一化的幅度谱,并比较各自的主要特点。
答:matlab作图如下:分析:(2)N=15,带通滤波器的两个通带边界分别是πω3.01=,πω5.02=。
用汉宁(Hanning )窗设计此线性相位带通滤波器,观察它的实际3dB 和20dB 带宽。
N=45,重复这一设计,观察幅频和相位特性的变化,注意长度N 变化的影响。
答:matlab 作图如下: 所设计滤波器的h(n):相应的幅频相频特性曲线:分析:(3)分别改用矩形窗和Blackman窗,设计(2)中的带通滤波器,观察并记录窗函数对滤波器幅频特性的影响,比较三种窗的特点。
答:N=45时,三种窗设计的滤波器的h(n)分别如下:相应的幅频曲线如下:分析:(4)用Kaiser 窗设计一专用线性相位滤波器,N=40,)( j d e H 如图,当β=4、6、10时,分别设计、比较它们的幅频和相频特性,注意β取不同值时的影响。
答:matlab 作图如下:分析:(5)用频率采样法设计(4)中的滤波器,过渡带分别设一个过渡点,令H(k)=0.5。
比较两种不同方法的结果。
答:matlab作图如下:分析:(6)用雷米兹(Remez)交替算法设计(4)中的滤波器,并比较(4)、(5)、(6)三种不同方法的结果。
fa=[0 .175 .2 .4 .425 .575 .6 .8 .825 1];mag=[0 0 1 1 0 0 1 1 0 0];b=remez(40,fa,mag);[h1,w1]=freqz(b,1);plot(w1/pi,20*log10(abs(h1)));plot(w1/pi,angle(h1));运行结果如下:分析:(7)利用雷米兹(Remez)交替算法,设计一个线性相位高通FIR 数字滤波器,其指标为:Hz f c 800=,dB 1=δ, Hz f r 500=,dB At 40=,Hz f s 5000=。
基于DSP的FIR 滤波器
第1章绪论1.1课程设计(论文)目的通过课程设计,加深对DSP芯片TMS320C54x的结构、工作原理的理解,获得DSP应用技术的实际训练,掌握设计较复杂DSP系统的基本方法。
通过使用汇编语言编写具有完整功能的图形处理程序或信息系统,使学生加深对所学知识的理解,进一步巩固汇编语言讲法规则。
学会编制结构清晰、风格良好、数据结构适当的汇编语言程序,从而具备解决综合性实际问题的能力。
1.2任务和要求任务:设计一个基于DSP的FIR 滤波器要求:1. 总体方案设计;2. 设计出软件编程方法,并写出源代码;3. 仿真与结果分析;4. 论文格式要符合学院的统一规定,结构要合符逻辑,表达要得体。
第2章系统方案设计2.1系统功能介绍任何一个实际的应用系统中,都存在着各种各样的干扰。
数字滤波器是使用最为广泛的信号处理算法之一。
数字滤波器在语音信号处理、信号频谱估计、信号去噪、无线通信中的数字变频以及图像信号等各种信号处理中都有广泛的应用。
在本设计中,先使用MATLAB模拟产生合成信号,然后再利用CCS进行滤波处理。
将模拟信号的采样频率设定为32000Hz,设计一个FIR低通滤波器,其参数为:滤波器名称:FIR低通滤波器采样频率:Fs=40000Hz通带:4000Hz~4500Hz过渡带:2500Hz~3000Hz,3500Hz~4000Hz带内波动:0.5dB阻带衰减:50dB滤波器级数:N=154滤波器系数:由MATLAB根据前述参数求得。
2.2系统方案设计流程图(如图2.1)图2.1 系统方案设计流程图2.3设计主要内容及步骤2.3.1滤波器的原理对于任何一个FIR滤波器系统,它的冲击响应总是有限长的,其系统函数可记为:其中N-1是FIR 滤波器的阶数,为延时结,为端口信号函数。
下式为最基本的FIR滤波器表示:其中表示输入采样序列,表示滤波器系数,N表示滤波器的阶数,Y(n)表示滤波器的输出序列,也可以用下式利用卷积来表示输出序列y(n)与x(n)、h(n)的关系:y(n)=x(n)*h(n) 2.3.2DSP 实现FIR滤波的关键技术用线性缓冲区来实现FIR滤波器其程序清单如下:.title “FIR1.ASM”.mmregs.def startx .usect “x”,8PA0 .set 0PA1 .set 1.dataCOEF:.word 1*32768/10.word 2*32768/10.word -4*32768/10.word 3*32768/10.word -4*32768/10.word 2*32768/10.word 1*32768/10.textstart: SSBX FRCTSTM #x+7,AR2STM #6,AR0LD #x+1,DPPORTR PA1,@x+1FIR1: RPTZ A,#6MACD *AR2-,COEF,ASTH A,*AR2PORTW *AR2+,PA0BD FIR1PORTR PA1,*AR2+0.end用循环缓冲区来实现FIR滤波器其程序清单如下:.title “FIR2.ASM”.mmregs.def start.bss y,1xn .usect “xn”,7b0 .usect “b0”,7PA0 .set 0PA1 .set 1.datatable: .word 1*32768/10.word 2*32768/10.word 3*32768/10.word 4*32768/10.word 5*32768/10.word 6*32768/10.word 7*32768/10.textstart: SSBX FRCTSTM #b0,AR1RPT #6MVPD table,*AR1+STM #xn+6,AR2STM #b0+6,AR3STM #7,BKSTM #-1,AR0LD #xn,DPPORTR PA1,@xnFIR2: RPTZ A,#6MAC *AR2+0%,*AR3+0%,ASTH A,@yPORTW @y,PA0BD FIR2PORTR PA1,*AR2+0%.end2.3.3具体的操作步骤(1)打开FDATOOL,根据滤波要求设置滤波器的类型、通带截止频率、指定阶数、采样频率等。
基于DSP的FIR滤波器的设计报告
u 目录1概述................................................................ -0 -1.1数字滤波器的研究现状 ......................................... -0 -2系统硬件设计........................................................ -1 -2.1系统设计方案................................................... -1 -2.2主控模块....................................................... -3 -3系统软件设计........................................................ -4 -3.1软件整体设计................................................. -4 -3.2测量模块....................................................... -7 -4系统测试与总结...................................................... -8 -4.1系统测试 ....................................................... -8 -4.2总结体会...................................................... -10 -参考文献 .............................................................. -11 - 附录 .................................................................. -12 -1 概述1.1 数字滤波器的研究现状20 世纪60年代起由于计算机技术、集成工艺和材料工业的发展,滤波器发展上了一个新台阶,并且朝着低功耗、高精度、小体积、多功能、稳定可靠和价廉方向努力,其中小体积、多功能、高精度、稳定可靠成为70 年代以后的主攻方向。
通用DSP实现FIR滤波器实验报告
一、实验目的:1、了解FIR 滤波器的DSP 实现方法;2、了解用FIR 滤波器实现模拟信号滤波的全过程;3、掌握FIR 滤波器直接型结构的实现方法。
二、实验原理:FIR 滤波器是有限长单位脉冲响应数字滤波器,其系统函数一般式为:FIR 滤波器的通用DSP 实现法与前面介绍的IIR 滤波器结构的实现方法类似, 用FIR 滤波器对模拟信进行滤波的结构图所示。
数字滤波器对模拟信号滤波的原理图本实验中在以通用DSP(TMS320)为核心的DSP 平台上采用窗函数设计法分别设计了50阶的高通、低通、带通FIR 滤波器,其幅频特性分别如下列图形所示:10()()N n n H z h n z--==∑010002000300040005000600070008000900010000-2000-1500-1000-5000Frequency (Hz)P h a s e (d e g r e e s )010002000300040005000600070008000900010000-150-100-50050Frequency (Hz)M a g n i t u d e (d B )01000200030004000500060007000800090001000000.511.5Hertz M a g n i t u d e R e s p o n s e10002000300040005000600070008000900010000-4000-3000-2000-100001000HertzP h a s e (d e g r e e s )0100020003000400050006000700080009000100000.511.5Hertz M a g n i t u d e R e s p o n s e 010002000300040005000600070008000900010000-1500-1000-5000Hertz P h a s e (d e g r e e s )实验名称:通用DSP实现FIR滤波器姓名:刘宇()同组人:石龄佳()三.实验原理图:图2-5 实验原理图四.实验仪器稳压电源一台,双踪示波器一台, 信号源一台,实验板一块五、实验内容及步骤:1、按实验连接图检查连线是否正确,然后依次打开信号源﹑示波器﹑实验装置的电源开关。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于DSP 的FIR 数字滤波器 (设计实验)一、实验目的1.了解FIR (Finite Impulse Response 有限冲激响应)滤波器的原理及使用方法;2.了解使用MATLAT 语言设计FIR 滤波器的方法;3.了解DSP 对FIR 滤波器的设计及编程方法;4.熟悉在CCS 环境下对FIR 滤波器的调试方法; 二、实验原理数字滤波是DSP 的最基本应用,利用MAC (乘、累加)指令和循环寻址可以方便地完成滤波运算。
两种常用的数字滤波器:FIR (有限冲激响应)滤波器和IIR (无限冲激响应)滤波器的DSP 实现。
设FIR 滤波器的系数为h(0),h(1), ...,h(N-1),X(n)表示滤波器在n 时刻的输入,则n 时刻的输出为:FIR 数字滤波器的结构如图3.1所示。
图3.1 FIR 数字滤波器的结构图1、线性缓冲区法又称延迟线法。
其方法是:对于n=N 的FIR 滤波器,在数据存储器中开辟一个N 单元的缓冲区,存放最新的N 个样本;滤波时从最老的样本开始,每读一个样本后,将此样本向下移位;读完最后一个样本后,输入最新样本至缓冲区的顶部。
以上过程,可以用N=6的线性缓冲区示意图来说明,如图3-2所示图3-2 N=6的线性缓冲区示意图2、循环缓冲区法图3-3说明了使用循环寻址实现FIR 滤波器的方法。
对于N 级FIR 滤波器,在数据存储区开辟一个称为滑窗的具有N 个单元的缓冲区,滑窗中存放最新的N 个输入样本值。
每次输入新的样本时,新的样本将改写滑窗中最老的数据,其他数据则不需要移动。
1()()()(0)()(1)(1)(1)[(1)]N i y n h i x n i h x n h x n h N x n N -==-=+-+---∑Z -1Z -1Z -1h(0)h(1)h(2)h(N-2)h(N-1)y(n)图3-3 FIR滤波器循环缓冲区存储器图三、实验容与步骤设计一个FIR低通滤波器,通带边界频率为1500Hz,通带波纹小于1dB;阻带边界频率为2000Hz,阻带衰减大于40dB;采样频率为8000Hz。
FIR滤波器的设计可以用MATLAB窗函数法进行。
本实验设计一个采样频率Fs为8000Hz,输入信号频率为1000Hz和2500Hz的合成信号,通过设计的低通滤波器将2500Hz信号滤掉,余下1000Hz信号。
1、MATLAB设计FIR滤波器FIR滤波器的设计可以用MATLAB窗函数法进行,选择Hamming窗,其程序为:b=fir1(16,1500/8000*2);得到FIR数字滤波器系数b为:b0=0.00000000 b9=0.28342322b1=0.00482584 b10=0.09725365b2=0.00804504 b11=-0.02903702b3=-0.00885584 b12=-0.04291741b4=-0.0429174 b13=-0.00885584b5=-0.02903702 b14=0.00804504b6=0.09725365 b15=0.00482584b7=0.28342322 b16=0.00000000B8=0.37452503在DSP汇编语言中,不能直接输入十进制小数,在MATLAB中进行如下转换:h=round(b*2^15)将系数转换为Q15的定点小数形式,为:h(0)=0 h(9)=9287h(1)=158 h(10)=3187h(2)=264 h(11)=-951h(3)=-290 h(12)=-1406h(4)=-1406 h(13)=-290h(5)=-951 h(14)=264h(6)=3187 h(15)=158h(7)=9287 h(16)=0h(8)=122722、编写FIR数字滤波器的汇编程序;一个FIR滤波器源程序 fir.asm.mmregs.global start.def start,_c_int00INDEX .set 1KS .set 256 ;模拟输入数据缓冲区大小N .set 17COFF_FIR .sect "COFF_FIR" ;FIR滤波器系数.word 0.word 158.word 264.word -290.word -1406.word -951.word 3187.word 9287.word 12272.word 9287.word 3187.word -951.word -1406.word -290.word 260.word 158.word 0.dataINPUT .copy "firin.inc" ;模拟输入在数据存储区0x2400 OUTPUT .space 1024 ;输出数据在数据区0x2500 COFFTAB .usect "FIR_COFF",NDATABUF .usect "FIR_BFR",NBOS .usect "STACK",0FhTOS .usect "STACK",1.text.asg AR0,INDEX_P.asg AR4,DATA_P ;输入数据x(n)循环缓冲区指针.asg AR5,COFF_P ;FIR系数表指针.asg AR6,INBUF_P ;模拟输入数据指针.asg AR7,OUTBUF_P;FIR滤波器输出数据指针_c_int00b startnopnopstart: SSBX FRCTSTM #COFFTAB,COFF_PRPT #N-1 ;将FIR系数从程序存储器移动MVPD #COFF_FIR,*COFF_P+ ;到数据存储器STM #INDEX,INDEX_PSTM #DATABUF,DATA_PRPTZ A,#N-1STL A,*DATA_P+ ;将数据循环缓冲区清零STM #(DATABUF+N-1),DATA_P ;数据缓冲区指针指向x[n-(N-1)]STM #COFFTAB,COFF_P ;FIR_TASK:STM #INPUT,INBUF_PSTM #OUTPUT,OUTBUF_PSTM #KS-1,BRCRPTBD LOOP-1STM #N,BK ;FIR循环缓冲区大小LD *INBUF_P+,A ;装载输入数据FIR_FILTER:STL A,*DATA_P+%RPTZ A,N-1MAC *DATA_P+0%,*COFF_P+0%,ASTH A,*OUTBUF_P+LOOP:END B EEND.end3、编写FIR滤波器命令文件对应以上汇编程序的命令文件fir.cmd如下:fir.obj-m fir.map-o fir.outMEMORY{PAGE 0: ROM1(RIX) :ORIGIN=0080H,LENGTH=100HPAGE 1: INTRAM1(RW) :ORIGIN=2400H,LENGTH=0200HINTRAM2(RW) :ORIGIN=2600H,LENGTH=0100HINTRAM3(RW) :ORIGIN=2700H,LENGTH=0100HB2B(RW) :ORIGIN=0070H,LENGTH=10H}SECTIONS{.text : {}>ROM1 PAGE 0.data : {}>INTRAM1 PAGE 1FIR_COFF: {}>INTRAM2 PAGE 1FIR_BFR : {}>INTRAM3 PAGE 1.stack : {}>B2B PAGE 1}4、实验步骤及结果(1) 在CCS上建立fir工程并运行fir.out程序。
建立fir工程,将fir.asm和fir.cmd 添加到工程中,对汇编程序进行汇编、;如果有错误则进行修改、调试,当汇编、成功后,加载并运行fir.out程序。
注意,将fir.asm、fir.cmd、firin.inc文件和fir.pjt工程文件放在同一文件夹下。
(2) 观察输入信号的波形及频谱。
单击View→Graph→Time/Frequency命令,按照如图3-4所示改变各选项。
其中,由.cmd可知输入信号的数据放在数据区0x2400开始的256个单元中。
图3-4 Graph属性设置窗口单击OK按钮,则显示输入信号的时域波形如图3-5所示。
其波形是频率为1000Hz和2500Hz正弦信号的合成信号。
图3-5 输入信号的时域波形将图3-4中的Dsiplay Type项改为FFT Magnitude,则显示输入信号的频谱图,如图3-6所示。
图3-6 输入信号的频谱图3、观察输出信号的波形及频谱。
单击View→Graph→Time/Frequency命令,按照如图3-7所示改变各选项。
其中,由.cmd 可知输出信号的数据放在数据区0x2500开始的256个单元中。
图3-7 Graph属性设置窗口单击OK按钮,将显示滤波器输出信号时域波形,如图3-8所示。
图3-8 输出信号的时域波形图3-9 输出信号的频谱图5、系数对换FIR 滤波器的实现系数对换FIR 滤波器由于具有线性相位,因此应用很广。
一个N=8的FIR 滤波器,若h(n)=h(N-1-n),就是对换FIR 滤波器,其输出方程为:总共有8次乘法和7次加法。
如改写成:变成4次乘法和7次加法,乘法运算次数减少了一半,特别是当阶数较高时,利用系数对称的特点,可以明显减少运算量。
(1)FIR 滤波器设计在MATLAB 下输入: B=fir1(15,1500/8000*2);H=round(b*2^15);将系数转换为Q15的定点小数形式 则滤波器系数为:h(0)=62 h(8)=11439 h(1)=188 h(9)=6202 h(2)=86 h(10)=625 h(3)=-764 h(11)=-1453 h(4)=-1453 h(12)=-764 h(5)=625 h(13)=86 h(6)=6202 h(14)=188 h(7)=11439 h(15)=62系数对称FIR 数字滤波器汇编程序如下: .mmregs.global start()(0)()(1)(1)(2)(2)(3)(3)(4)(4)(5)(5)(6)(6)(7)(7)y n h x n h x n h x n h x n h x n h x n h x n h x n =+-+-+-+-+-+-+-()(0)[()(7)](1)[(1)(6)](2)[(2)(5)](3)[(3)(4)]y n h x n x n h x n x n h x n x n h x n x n =+-+-+-+-+-+-+-.def start,_c_int00KS .set 256 ;输入样本数据个数N .set 16 ;FIR滤波器阶数COEF_FIR .sect "COEF_FIR" ;FIR滤波器系数.word 62.word 188.word 86.word -764.word -1453.word 625.word 6202.word 11439.dataINPUT .copy "firin.inc" ;输入数据在数据区0x2400 OUTPUT .space 1024 ;输出数据在数据区0x2500x_new .usect "DATA1",N/2x_old .usect "DATA2",N/2size .set N/2.text_c_int00b startnopnopstart: SSBX FRCT ; 设置FRCT(小数方式)位STM #x_new,AR2 ; AR2指向New缓冲区第一个单元STM #x_old+(size-1), AR3; AR3指向Old缓冲区最后一个单元 STM #-1,AR0STM #INPUT,AR4 ; 模拟输入数据指针初始化STM #OUTPUT,AR5 ; 滤波器输出数据指针初始化STM #KS-1,BRCRPTBD LOOP-1STM #size , BK ;循环缓冲区块大小BK=sizeLD *AR4+,ASTL A,*AR2FIR_FILTER: ADD *AR2+0%,*AR3+0%,ARPTZ B, #size-1FIRS *AR2+0%,*AR3+0%,COEF_FIRSTH B,*AR5+MAR *+AR2(2)%MAR *AR3+%MVDD *AR2 , *AR3+0%LOOP:END B END.end命令文件如下:fir2.obj-m fir2.map-o fir2.outMEMORY{PAGE 0: ROM1(RIX) :ORIGIN=0080H,LENGTH=1000HPAGE 1: INTRAM1(RW) :ORIGIN=2400H,LENGTH=0200H INTRAM2(RW) :ORIGIN=2600H,LENGTH=0100HINTRAM3(RW) :ORIGIN=2700H,LENGTH=0100HB2B(RW) :ORIGIN=0070H,LENGTH=10H}SECTIONS{.text : {}>ROM1 PAGE 0COEF_FIR: {}>ROM1 PAGE 0.data : {}>INTRAM1 PAGE 1DATA1 : {}>INTRAM2 PAGE 1DATA2 : {}>INTRAM3 PAGE 1.stack : {}>B2B PAGE 1}四、实验仪器设备1.计算机2.DES-320PP—A教学实验系统五、思考题1.实现系数对称FIR数字滤波器。