61阅读

fir滤波器的dsp实现-DSP课程设计-FIR高通滤波器设计

发布时间:2018-05-13 所属栏目:高通滤波器设计

一 : DSP课程设计-FIR高通滤波器设计

FIR高通滤波器设计

南京师范大学物科院

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

摘要

从实现方法方面考虑,将滤波器分为两种,一种是IIR滤波器,另一种是FIR滤波器。(www.61k.com]

FIRDF的最大优点是可以实现线性相位滤波。而IIRDF主要对幅频特性进行逼近,相频特性会存在不同程度的非线性。我们知道,无失真传输与滤波处理的条件是,在信号的有效频谱范围内系统幅频响应应为常数,相频响应为频率的线性函数。另外,FIR是全零点滤波器,硬件和软件实现结构简单,不用考虑稳定性问题。所以,FIRDF是一种很重要的滤波器,在数字信号处理领域得到广泛应用。

FIRDF设计方法主要分为两类:第一类是基于逼近理想滤波器特性的方法,包括窗函数法、频率采样法和等波纹最佳逼近法;第二类是最优设计法。其中窗函数计法的基本思想是用FIRDF逼近希望的滤波特性。本次设计主要采用窗函数设计法,对理想滤波器进行逼近,从而实现高通滤波器的设计。

在MATLAB软件中,有一系列函数用于设计滤波器,应用时十分方便。因此,在本次设计中,滤波器的设计主要采用MATLAB软件,编写适当的程序,得到滤波器的单位脉冲响应。

本设计对滤波器的硬件仿真主要使用CCS软件,通过对滤波器的硬件仿真,可以较为真实的看出滤波器的滤波效果。

关键字:高通、FIRDF、线性相位、Hanning窗、MATLAB、CCS

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

正文

1. 设计目标

产生一个多频信号,设计一个高通滤波器消除其中的低频成分,通过CCS的graph view波形和频谱显示,并和MATLAB计算结果比较

2. 设计原理

2.1 数字滤波器

数字滤波器(digital filter)是由数字乘法器、加法器和延时单元组成的一种装置。[www.61k.com]其功能是对输入离散信号的数字代码进行运算处理,以达到改变信号频谱的目的。由于电子计算机技术和大规模集成电路的发展,数字滤波器已可用计算机软件实现,也可用大规模集成数字硬件实时实现。数字滤波器广泛用于数字信号处理中,如电视、VCD、音响等。

按照滤波电路的工作频带为其命名:设截止频率为fp,频率低于fp的信号可以通过,高于fp的信号被衰减的电路称为低通滤波器,频率高于fp的信号可以通过,低于fp的信号被衰减的电路称为高通滤波器;而带通吗,就是频率介于低频段截止频率和高频段截止频率的信号可以通过的电路。

2.2 高通滤波器

高通滤波器是容许高频信号通过、但减弱(或减少)频率低于截止频率信号通过的滤波器。对于不同滤波器而言,每个频率的信号的减弱程度不同。它有时被称为低频剪切滤波器;在音频应用中也使用低音消除滤波器或者噪声滤波器。高通滤波器与低通滤波器特性恰恰相反。这样的滤波器能够把高频率的声音引导至专用高音喇叭(tweeter),并阻止可能干擾或者损害喇叭的低音信号。使用线圈而不是电容的低通滤波器也可以同时把低频信号引导至低音喇叭(woofer)。高通和低通滤波器也用于数字图像处理中在频域中进行变换。

2.3 高通滤波器的分析

2.3.1 高通滤波器的时域分析

在时域,信号经过系统的响应y (n)体现为激励x(n)跟系统单位抽样响应h(n)的卷积和y(n)=(n)×h(n)=ΣN–1m=0h(m)x(n-m)[223] 。对于长度为N 的FIR系统, h(n)可以看成一个长度为N 点的固定窗口,而x(n)则看成一个队列以齐步走的方式穿过h(n)窗口,每走一步,位于窗口中的x(n)部分的点跟h(n)的对应点的值相乘(即加权)再求和,所得结果构成此时系统的响应值y(n), x(n)队列每走一步就得到一个响应值y(n),即y(n)是h(n)对位于其窗口中的x(n)的加权求和。高通滤波要求h(n)窗口具有波形锐化作用,即利用h(n)窗口加权和使得变化快的(即高频)正弦分量保留(理想高通)或衰减幅度小(实际高通) ,而变化缓慢(即低频)的正弦分量正负抵消(理想高通)或衰减幅度大(实际高通) 。

设 1

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

其中N 必须取奇数,

x(n)?x1(n)?x2(n)?0.8sin(2??100?n/fs)?0.2sin(2??1000?n/fs) 其中: fs = 11kHz, n为整数,即x ( n)由100Hz的

x1(n)和1kHz的x2(n)两种频率的信号组成。(www.61k.com)高通滤波的目的就是要尽可能地去掉x(n)中的低频分量x1(n) ,同时尽可能地保留x(n)中的高频分量x2(n)。

2.3.2 高通滤波器的频域分析

在频域,信号经过系统的响应y(n)的频谱Y(ejω)体现为激励x(n)的频谱X (ejω)跟系统单位抽样响应h(n)的频谱H(ejω)(即系统的频谱)的乘积Y(ejω)=|H(ejω)|×|X(ejω)|×ejφH+φx,即响应的频谱Y(ejω)的幅值由系统频谱H(ejω)的幅值对激励频谱X(ejω)的幅值相乘(加权)得到,响应的频谱Y(ejω)的幅角由系统的频谱H(ejω)的幅角跟激励频谱X(ejω)的幅角相加(移相)得到[122 ]。高通滤波要求系统幅度函数|H(jf)|对需要保留的高频信号频谱加权权重较大(理想时为1) ,对需要滤除的低频信号频谱加权权重较小(理想时为0) 。

其中L为x(n)的长度(L=100), 0≤k≤L- 1,N为h(n)的有值长度,m、k均为整

数,跟数字频率k相对应的模拟频率为f=fs×k/L (Hz)。h(n)在不同N值时的频谱如图2所示(横轴单位为kHz),当N=11时,在f=m(kHz)即f=1kHz、2kHz、3kHz等处为1,而在f=(2m-0.5)(kHz)即f=1.5kHz、3.5kHz等处幅度最大。而在f=(2m+0.5)(kHz)即f=2.5kHz、4.5kHz等处幅度最小,如图2(b);当N=5时, 在f=mfs/5处为1,即f=2.2kHz、3.3kHz等处为1,在f=(4m-1)fs/10即f=3.3kHz处幅度最大。而在f=(4m+1)fs/10即f=5.5kHz处幅度最小,如图2(c);当N=21时,在f=mfs/21即f=524Hz、1047Hz等处为1, 在f=(4m-1)fs/42处幅度最大,而在f=(4m+1)fs/42处幅度最小,如图

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

1

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

2

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

图1

用不同宽度的h(n)对x(n)的滤波在频域上表现如图2.2.1所示,图2.2.1(a)为

x(n)的频谱|X(jf)| ,从图2中可以看出x(n)中含有100Hz和1kHz两种频率的信号,图1(b)~(d)为不同长度的h(n)对同一x(n)的滤波情况,这跟在时域中分析的结论是一致的。[www.61k.com]

2.4 FIR滤波器

从实现方法方面考虑,将滤波器分为两种,一种是IIR滤波器,另一种是FIR滤波器。 IIR滤波器保留了模拟滤波器较好的幅度特性,设计简单有效。但这些特性是以牺牲相位特性为代价而获得的,然而现在许多数据传输,图像处理系统都越来越多的要求系统具有线性相位特性。

FIRDF的最大优点是可以实现线性相位滤波。而IIRDF主要对幅频特性进行逼近,相频特性会存在不同程度的非线性。我们知道,无失真传输与滤波处理的条件是,在信号的有效频谱范围内系统幅频响应应为常数,相频响应为频率的线性函数。另外,FIR是全零点滤波器,硬件和软件实现结构简单,不用考虑稳定性问题。所以,FIRDF是一种很重要的滤波器,在数字信号处理领域得到广泛应用。

FIRDF设计方法主要分为两类:第一类是基于逼近理想滤波器特性的方法,包括窗函数法、频率采样法和等波纹最佳逼近法;第二类是最优设计法。其中窗函数计法的基本思想是用FIRDF逼近希望的滤波特性。

本次设计主要采用窗函数设计法,对理想滤波器进行逼近,从而实现高通滤波器的设计。

2.5 各种窗函数参数

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

3

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

??2?n?2?n??hn(n)?0.5?1?cos()?RN(n)?0.5?RN(n)?RN(n)cos()?

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

N?1?N?1???

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

3. 设计流程

3.1 应用MATLAB设计滤波器:

为了满足高通滤波的效果,设置线性相位高通FIR的参数为:通带截止频率?p??/2rad,阻带截止频率?s??/4rad,通带最大衰减?p?1dB,阻带最小衰减?s?40dB。(www.61k.com]

由以上参数,通过查表可得,hanning窗和haming窗都满足条件,我们选择hanning窗。过渡带宽?B??s??p??/4,hanning窗的精确过渡带宽为?B=6.2π/N,所以要求?B?6.2?/N??/4,解之得N=25。

输入程序:

从而得到满足条件的高通FIRDF:

h(n)=[-0.0004,-0.0006,0.0028,0.0071,-0.0000,-0.0185,-0.0210,0.0165,0.0624,

0.0355,-0.1061,-0.2898,0.6249,-0.2898,-0.1061,0.0355,0.0624,0.0165,

-0.0210,0.0185,-0.0000,0.0071,0.0028,-0.0006,-0.0004]

其波形如图3所示,频谱如图4,其幅频特性和相频特性如图5。

4

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

图3 图4

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

图5

5

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

3.2 用CCS对高通滤波器进行仿真

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

设置输入信号fIn=sin(2πn/30)/2+cos(2πn*1.6),使用MATLAB运算得到的高通FIR滤波器进行滤波,滤去低频分量。(www.61k.com]

选择“Debug”菜单的“RUN”项,或按F12 键运行程序。

观察“fin”、“fout”窗口中时域图形;观察滤波效果。

鼠标右键单击“Input”和“Output”窗口,选择“Properties…”项,设置“Display Type”为“FFT Magitude”,再单击“OK”按钮结束设置。

观察“Input”、“Output”窗口中频域图形;理解滤波效果。

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

6

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

4. 仿真波形

4.1 MATLAB对高通FIRDF的设计

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

4.2 CCS对高通FIRDF的应用仿真

7

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

8

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

5. 设计结果

由MATLAB和CCS的仿真结果可以看出,此高通FIRDF可以实现高通滤波的功能,在输入为fIn=sin(2πn/30)/2+cos(2πn*1.6)时,输出波形中已不含w= 1/30的低频分量,滤波效果良好,输出频谱中低频部分基本没有信号。(www.61k.com]

6. 心得

通过这次课程设计,使我掌握了课程设计的基本思路和方法,掌握了课程设计说明书的基本撰写方法,了解了基本的设计思想和设计方法。同时此次课程设计使我课程的基础知识和基本理论有了更深的理解和掌握,锻炼了我们综合运用所学知识的能力,并在理论分析设计、计算制图运用标准和规范查阅设计手册与资料以及计算机应用能了等方面得到了初步的训练和提高,培养了我们严谨求实的科学态度。

这次课程设计使我进一步熟悉了计算工具软件---MATLAB.并进一步掌握了MATLAB的使用方法.对MATLAB语言的发展和特点有了更深的了解,熟悉其工作环境,在其应用方面也有了更深的了解,了解了MATLAB程序书写的一般思路及一般步骤,学会了用MATLAB解决复杂信号处理等问题的方法。

在课程设计的这段时间里,我认为收获还是很多的,不但进一步掌握了数字信号处理的基础知识及一门专业仿真软件的基本操作,还提高了自己的设计能力及动手能力,同时对于模拟滤波器来了个系统的总结。更多的是让我看清了自己,明白了凡事需要耐心,实践是检验学习的唯一标准。理论知识的不足在这次课设中表现的很明显。这将有助于我今后的学习,端正自己的学习态度,从而更加努力的学习。

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

9

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

参考文献

1刘泉 阙大顺主编. 数字信号处理原理与实现. 北京:电子工业出版社,2005 2程佩青. 数字信号处理教程(第二版). 北京:清华大学出版社,2001 3 高西全 数字信号处理-原理、实现及应用. 北京:电子工业出版社,2010 10

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

附录

MATLAB程序------生成高通FIRDF

wp=pi/2;ws=pi/4;

DB=wp-ws;

N0=ceil(6.2*pi/DB);

N=N0+mod(N0+1,2);

m=1:N;

wc=(wp+ws)/2/pi;

hn=fir1(N-1,wc,'high',hanning(N));

fw=abs(fft(hn));

figure(1)

subplot(1,2,1)

plot(m,hn);grid;

subplot(1,2,2)

plot(m,fw);grid;

figure(2)

freqz(hn)

xlabel('omega^pi')

ylabel('|H(e^jomega|dB)')

subplot(2,1,2)

xlabel('omega^pi')

CCS程序

#include "DSP281x_Device.h" // DSP281x Headerfile Include File #include "DSP281x_Examples.h" // DSP281x Examples Include File #include "f2812a.h"

#include"math.h"

#define FIRNUMBER 25

#define SIGNAL1F 1000

#define SIGNAL2F 4500

#define SAMPLEF 10000

#define PI 3.1415926

float InputWave();

float FIR();

float

fHn[FIRNUMBER]={ -0.0004,-0.0006,0.0028,0.0071,-0.0000,-0.0185,-0.0210,0.0165,0.0624,

11

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

0.0355,-0.1061,-0.2898,0.6249,-0.2898,-0.1061,0.0355,0.0624,0.0165,

-0.0210,0.0185,-0.0000,0.0071,0.0028,-0.0006,-0.0004 };

float fXn[FIRNUMBER]={ 0.0 };

float fInput,fOutput;

float fSignal1,fSignal2;

float fStepSignal1,fStepSignal2;

float f2PI;

int i;

float fIn[256],fOut[256];

int nIn,nOut;

main(void)

{

nIn=0; nOut=0;

f2PI=2*PI;

fSignal1=0.0;

fSignal2=PI*0.1;

fStepSignal1=2*PI/30;

fStepSignal2=2*PI*1.6;

while ( 1 )

{

fInput=InputWave();

fIn[nIn]=fInput;

nIn++; nIn%=256;

fOutput=FIR();

fOut[nOut]=fOutput;

nOut++;

if ( nOut>=256 )

{

nOut=0; /* 请在此句上设置软件断点 */

}

}

}

float InputWave()

{

for ( i=FIRNUMBER-1;i>0;i-- )

fXn[i]=fXn[i-1];

fXn[0]=sin(fSignal1)/2.0+cos(fSignal2);

fSignal1+=fStepSignal1;

if ( fSignal1>=f2PI ) fSignal1-=f2PI;

12

高通滤波器设计 DSP课程设计-FIR高通滤波器设计

fSignal2+=fStepSignal2;

if ( fSignal2>=f2PI ) fSignal2-=f2PI; return(fXn[0]);

}

float FIR()

{

float fSum;

fSum=0;

for ( i=0;i<FIRNUMBER;i++ ) {

fSum+=(fXn[i]*fHn[i]); }

return(fSum);

}

13

二 : FIR滤波器的设计思路及具体实现方法

   内容摘要:从FIR数字滤波器的基本结构模型出发,分析了FIR滤波器的设计思路及具体实现方法,详细介绍了FIR滤波器的分布式算法(DA)结构。[www.61k.com]通过分析计算,得到普通DA结构实现高阶滤波器会消耗大量的查找表资源,这样的资源消耗甚至令硬件资源不可接受。针对普通DA的不足,提出了改进型DA结构。并利用FPGA仿真软件分别时64阶FIR带通滤波器的两种改进型DA结构进行仿真,结果表明改进型DA结构所消耗的资源大幅度降低。从而验证了改进型DA结构在降低运算资源和提高性能等方面的优越性。

   关键词:FIR数字滤波器;分布式算法结构;改进型分布式算法结构;FPGA

    在航天航空系统、雷达系统、遥感遥测系统等领域都涉及到如何在较强的背景噪声和干扰信号下提取真正的信号,并随着系统对宽带、高速、实时信号处理要求越来越高,对滤波器的处理速度、带宽等性能要求也随之提高。数字滤波器的硬件实现方法主要有:DSP、专用芯片和FPGA。用DSP实现滤波器,其程序顺序执行,因此运算速度随滤波器阶数的增加迅速下降;专用芯片实现的滤波器功能相对单一,灵活性小;而FPGA具有灵活的可编程逻辑和并行处理等优点,可很好地实现信号处理的实时性,同时,开发程序的可移植性好,可以缩短开发周期,因此FPGA实现数字滤波器的设计越来越受到重视和广泛应用,本文数字滤波器的设计就是基于FPGA硬件实现。

    1 FIR滤波器的基本模型

    数字滤波器分为无限冲激响应滤波器(IIR)和有限冲激响应滤波器(FIR),IIR滤波器与FIR滤波器相比,IIR滤波器容易取得较好的通带和阻带特性,FIR滤波器系统稳定且容易实现线性相位。系统稳定和线性相位对系统的设计至关重要,故对FIR滤波器的普通分布式(DA)算法结构进行了分析探讨与改进。FIR滤波器的网络传输公式可由式(1)表示:

   fir滤波器 FIR滤波器的设计思路及具体实现方法

    式中:x(k)为输入函数;y(n)为输出函数;h(n-k)为滤波器系数;N为滤波器的阶数。根据式(1),FIR滤波器的结构如图1所示。

   fir滤波器 FIR滤波器的设计思路及具体实现方法

    2 FIR滤波器的设计及实现

    2.1 FIR滤波器设计

    FIR滤波器的设计方法有:窗函数法、频率抽样法和最佳一致逼近法。本文以窗函数法为例介绍一下滤波器设计。设窗函数为凯赛窗,通带截至频率fc、阻带起始频率fa、通带纹波δp和阻带纹波δa,则滤波器阶数N的计算如式(2)所示:

   fir滤波器 FIR滤波器的设计思路及具体实现方法

    式中fs为抽样频率。由式(2)可见,通带和阻带的纹波系数越小,滤波器的阶数越高。因此在设计FIR滤波器时,需要在阶数,纹波系数和过渡带之间进行权衡,选出合适的模型。

    2.2 FIR滤波器具体买现

    相比用DSP实现FIR数字滤波器,采用FPGA实现可以获得更快的速度,同时还可采取各种算法降低运算资源,提高性能,分布式算法(DA)就是其中一种。随着大规模集成电路的发展,特别是可编程逻辑器件的发展,DA算法在数字滤波器硬件设计中的研究进一步加强。

    2.2.1 DA算法结构

    DA算法结构是将乘法运算转换成基于查找表的加法运算,其基本原理为通过比特串行运算产生两组内积结果代替乘法器结构,如式(3)所示:

   fir滤波器 FIR滤波器的设计思路及具体实现方法

    式中:Ak为滤波器系数;xk为滤波器输入;N为滤波器阶数;y为滤波器输出。对于无符号数和有符号数xk的二进制表示式分别为式(4)和式(5):

   fir滤波器 FIR滤波器的设计思路及具体实现方法

    式中:xk,i为xk的每位二进制数,值为0或1;B为xk的二进制位数。将式(4)和式(5)分别带入式(3)中,可得式(6)和式(7):

   fir滤波器 FIR滤波器的设计思路及具体实现方法

    在滤波器设计中,一般采用有符号数,由式(6)和式(7)可知,有符号数的计算公式含有了无符号数的计算,因此本文以有符号数为例来介绍DA算法的具体实现。DA算法结构的实现过程如图2所示。

   fir滤波器 FIR滤波器的设计思路及具体实现方法

    对于FIR滤波器来说,A0至AN-1为常数,因此由式(8),式(9)和式(10)可看出,y的值仅与系数的各种组合有关,这种结构可以利用查找表来实现。设FIR滤波器阶数为N,系数的量化位数为M为,则需要存储器(ROM)深度和宽度的计算公式分别为式(11)和式(12)所示:

   fir滤波器 FIR滤波器的设计思路及具体实现方法

   fir滤波器 FIR滤波器的设计思路及具体实现方法

   fir滤波器 FIR滤波器的设计思路及具体实现方法

扩展:fir滤波器的dsp实现 / c语言实现fir滤波器 / matlab实现fir滤波器

三 : FIR滤波器的实现方法

内容来自于上篇博文,第七章,FIR滤波器
使用FDATool工具,构建1个Kaiser窗低通滤波器,采样频率8kHz,生成滤波器系数:
1)例程1
文件 fir_fltcoeff.h,以浮点形式表示的量化后的滤波器系数//define the FIR filterlength#define N_FIR 40
float h[N_FIR] ={ ‐ 0.004314029307,‐0.013091321622,‐0.016515087727, ‐0.006430584433, 0.009817876267,0.010801880238, ‐0.006567413713,‐ 0.016804829623, 0.000653253913, 0.022471280087,0.010147131468[www.61k.com),‐0.025657740989, ‐0.026558960619, 0.023048392854,0.050385290390, ‐0.009291203588,‐ 0.087918503442,‐0.033770330014, 0.187334796517, 0.401505729848,0.401505729848, 0.187334796517,‐0.033770330014,‐0.087918503442, ‐0.009291203588, 0.050385290390,0.023048392854, ‐0.026558960619,‐ 0.025657740989, 0.010147131468, 0.022471280087,0.000653253913,‐0.016804829623, ‐0.006567413713, 0.010801880238,0.009817876267, ‐0.006430584433,‐ 0.016515087727,‐0.013091321622, ‐0.004314029307 };
实际电路用AIC3106,每次采样中断来临后读入一组数据,分别为左右声道的数据,各16位。中断服务程序将左声道的每个数据送入滤波器,然后从DAC电路输出滤波后的结果。右声道数据不变。
文件 ISRs_Plus.c ,中断服务程序:// Welch, Wright, & Morrow,// Real-time Digital Signal Processing, 2011// Modified by Mark Wickert February 2012 to include GPIO ISRstart/stop postings
///////////////////////////////////////////////////////////////////////// Filename: ISRs_fir_float.c//// Synopsis: Interrupt service routine for codec datatransmit/receive// floating point FIR filteringwith coefficients in *.h file/////////////////////////////////////////////////////////////////////////
#include "DSP_Config.h"#include "fir_fltcoeff.h" //coefficients infloat format
// Function Prototypeslong int rand_int(void);// Data is received as 2 16-bit words (left/right) packed intoone// 32-bit word. The union allows the data tobe accessed as a single// entity when transferring to and from the serial port, butstill be// able to manipulate the left and right channelsindependently.
#define LEFT 0#define RIGHT 1
volatile union {Uint32 UINT;Int16 Channel[2];} CodecDataIn, CodecDataOut;

float x_buffer[N_FIR]; //buffer for delay samples

interrupt void Codec_ISR()///////////////////////////////////////////////////////////////////////// Purpose: Codec interface interruptservice routine //// Input: None//// Returns: Nothing//// Calls: CheckForOverrun, ReadCodecData, WriteCodecData//// Notes: None///////////////////////////////////////////////////////////////////////{ WriteDigitalOutputs(1); // Write to GPIO J15, pin 6; begin ISRtiming pulseint i;float result = 0; //initialize the accumulator

if(CheckForOverrun()) // overrun erroroccurred (i.e. halted DSP)return; // so serial port is reset to recover
CodecDataIn.UINT = ReadCodecData(); // getinput data samples
//Work with Left ADC sample//x_buffer[0] = 0.25 * CodecDataIn.Channel[ LEFT];//Use the next line to noise test the filterx_buffer[0] = 0.125*((short) rand_int());//scale input by1/8
//Filtering using a 32-bit accumulatorfor(i=0; i< N_FIR; i++){result += x_buffer[i] * h[i];}//Update filter historyfor(i=N_FIR-1; i>0; i--){x_buffer[i] = x_buffer[i-1];}
//Return 16-bit sample to DACCodecDataOut.Channel[ LEFT] = (short) result;// Copy Right input directly to Right output with nofilteringCodecDataOut.Channel[RIGHT] = CodecDataIn.Channel[RIGHT];WriteCodecData(CodecDataOut.UINT); // send output data toportWriteDigitalOutputs(0); // Write to GPIO J15, pin 6; end ISRtiming pulse}
//White noise generator for filter noise testinglong int rand_int(void){static long int a = 100001;
a = (a*125) % 2796203;return a;}
可以看出,中断服务程序是逐点响应的,每次来1个数据,都要做一次滤波器运算,并将原有的数据前移一位,将新数据追加在缓冲区末尾。float x_buffer[N_FIR];//用于保存现在的新值和过去的数值,长度与滤波器系数相同x_buffer[0] // 用于保存当前值x_buffer[1] // 保存过去前一点的值,以此类推h[0...39] // 滤波器系数result += x_buffer[i] * h[i]; // 当前点滤波器输出结果,循环从0到39


本文标题:fir滤波器的dsp实现-DSP课程设计-FIR高通滤波器设计
本文地址: http://www.61k.com/1203973.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1