基于DSP的语音信号FIR低通滤波器设计

合集下载

基于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滤波器设计

题目:利用DSP的FIR滤波器设计数字处理器(DSP)有很强的数据处理能力,它在高速数字信号处理领域有广泛的使用,例如数字滤波、音频处理、图像处理等。

相对于模拟滤波器,数字滤波器没有漂移,能够处理低频信号,频率响应特性可做成非常接近于理想的特性,且精度可以达到很高,容易集成等。

使用可编程的DSP芯片实现数字滤波可以通过修改滤波器的参数十分方便地改变滤波器的特性,下面主要说明利用TMS320VC54x DSP芯片设计实现FIR数字滤波器。

设计目的意义一个实际的使用系统中,总存在各种干扰,所以在系统设计中,滤波器的好坏将直接影响系统的性能。

使用DSP进行数字处理,可以对一个具有噪声和信号的混合信号源进行采样,再经过数字滤波,滤除噪声,就可以提取有用信号了。

所以说,数字滤波器是DSP最基本的使用领域,熟悉基于DSP的数字滤波器能为DSP使用系统开发提供良好的基础。

技术指标1、数字滤波器的频率参数主要有:①通带截频:为通带和过渡带的边界点,在该点信号增益下降到规定的下限。

②阻带截频:为阻带和过渡带的边界点,在该点信号衰耗下降到规定的下限。

③转折频率:为信号功率衰减到1/2(约3dB)时的频率,在很多情况下,也常以fc作为通带或阻带截频。

④当电路没有损耗时,固有频率:就是其谐振频率,复杂电路往往有多个固有频率。

2、增益和衰耗滤波器在通带内的增益并非常数。

①对低通滤波器通带增益,一般指ω=0时的增益;高通指ω→∞时的增益;带通则指中心频率处的增益。

②对带阻滤波器,应给出阻带衰耗,衰耗定义为增益的倒数。

③通带增益变化量指通带内各点增益的最大变化量,如果通带增益变化量以dB为单位,则指增益dB值的变化量。

3、阻尼系数和品质因数阻尼系数α是表征滤波器对角频率为ω0信号的阻尼作用,是滤波器中表示能量衰耗的一项指标,它是和传递函数的极点实部大小相关的一项系数。

4、灵敏度滤波电路由许多元件构成,每个元件参数值的变化都会影响滤波器的性能。

基于DSP实现的FIR低通滤波器

基于DSP实现的FIR低通滤波器

基于DSP实现的FIR低通滤波器FIR(有限脉冲响应)低通滤波器是一种常见的数字信号处理(DSP)滤波器。

它的设计和实现非常灵活,可以用于去除数字信号中高频成分,使得信号能在一定的频率范围内进行平滑处理。

FIR低通滤波器有很多种设计方法,其中最简单的方法是基于窗函数设计,例如矩形窗、汉宁窗、布莱克曼窗等。

这些窗函数的选择取决于滤波器的性能要求和频率响应的形状。

在DSP中,FIR低通滤波器的实现可以采用直接形式、级联形式、并行形式和迭代形式等多种结构。

其中直接形式是最简单和直观的实现方式,也是最容易理解和实现的一种结构。

直接形式的FIR低通滤波器由一个延迟线、一组乘法器和加法器组成。

延迟线用于延迟输入信号,乘法器用于对延迟后的信号进行调制,而加法器则将调制后的信号相加得到输出信号。

```----------------------,,,x(n) -->, Delay ,-->, Multiply,-->--+ Sum ,--> y(n)Line ,,,----------------------```在实现过程中,需要注意的是延迟线的设置和乘法器的系数。

延迟线的长度决定了滤波器的阶数,即滤波器对输入信号的响应范围。

乘法器的系数则决定了滤波器的频率响应,可以通过窗函数的选取来确定。

通常,FIR滤波器的实现可以通过查表法或者卷积法来实现。

查表法通过预先计算所有可能的输入组合,并将其存储在一张查找表中,以减少计算量。

卷积法则通过将输入信号和滤波器的冲击响应进行卷积运算来得到输出信号。

当实现FIR低通滤波器时,还需要考虑滤波器的性能指标和算法的优化。

常见的性能指标包括滤波器的截止频率、抗混叠性能、通带和阻带的幅频特性等。

算法的优化可以从以下几个方面考虑:乘法器的系数选择、滤波器结构的选择、滤波器长度的选择和存储器的优化等。

总之,基于DSP实现的FIR低通滤波器是一种常用的数字信号处理滤波器,它可以用于去除数字信号中的高频成分,平滑信号的频谱。

基于DSP芯片的语音信号FIR滤波系统

基于DSP芯片的语音信号FIR滤波系统

摘要数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。

20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。

数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。

在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。

随着微处理技术的快速发展,微处理器芯片的集成度从最早的几千个晶体管发展到现在的上亿个晶体管,字长从4位提高到了64位,正是这些技术的飞速发展引发了一轮又一轮的信息产业革命,而人们的生活、学习和工作方式也在以计算机技术、通信技术为核心的信息技术的影响下发生着前所未有的改变。

然而在这次设计中,比较核心的是数字滤波器,数字滤波器是一种用来过滤时间离散信号的数字系统,通过对抽样数据进行数学处理来达到频域。

滤波的目的。

根据其单位冲激响应函数的时域特性可分为两类:无限冲激响应(IIR)滤波器和有限冲激响应(FIR)滤波器。

与IIR滤波器相比,FIR滤波器只有零点,除原点外.在z平面上没有极点,因此总是稳定的和可实现的;更重要的是,FIR 滤波器在满足一定的对称条件下,可以获得严格的线性相位特性,这一点是IIR 滤波器难以实现的。

因此。

它在高保真的信号处理.如数字音频、图像处理、数据传输、生物医学等领域得到广泛应用。

对于本设计主要是利用一个DSP芯片来进行语音采集系统的设计,而数字信号处理技术的发展使得采用数字化的方法实时的处理语音信号成为可能。

早期的语音信号处理均是采用模拟处理,对声音信号最常用的滤波、相关、谱分析等运算,部分采用模拟电路来实现的。

这种传统的模拟方法处理语音信号,硬件设备昂贵,不能升级、产品生命周期短,而采用数字处理技术处理语音信号具有抗干扰性强、便于传输和处理等优点,代表着语音处理技术的发展方向。

基于DSP实现的FIR低通滤波器

基于DSP实现的FIR低通滤波器

基于DSP实现的FIR低通滤波器FIR(Finite Impulse Response)低通滤波器是一种数字信号处理(DSP)算法,用于滤除输入信号中高于一些截止频率的频域成分,并使输出信号只包含低于该截止频率的成分。

FIR低通滤波器通常由一组脉冲响应函数(Impulse Response)的加权和组成,其中权重决定了滤波器的频率响应。

实现FIR低通滤波器的一种常见方法是使用离散时间线性卷积运算。

滤波器的输入信号通过一个延迟线数组,然后与一组权重向量进行内积。

该内积计算的结果即为滤波器的输出。

在DSP领域,用于实现FIR低通滤波器的算法有很多种,其中最常用的是基于迭代结构(Direct Form)的算法。

此算法按照滤波器的脉冲响应函数的长度进行迭代,每次迭代处理输入信号的一个样本。

该算法的优点是实现简单、稳定可靠。

下面是一个基于DSP实现的FIR低通滤波器的伪代码示例:```python#定义滤波器的截止频率和脉冲响应函数长度def cutoff_frequency = 1000 # 截止频率为1kHzdef length = 101 # 脉冲响应函数长度为101#初始化滤波器的权重向量def weights = [0.0] * length#计算滤波器的脉冲响应函数for i in range(length):#计算当前权重对应的频率frequency = i * sampling_rate / length#如果当前频率小于截止频率,则设置权重为1,否则为0weights[i] = 1 if frequency <= cutoff_frequency else 0#初始化输入和输出信号数组def input_signal = [0.0] * signal_lengthdef output_signal = [0.0] * signal_length#循环处理输入信号的每个样本for i in range(signal_length):#延迟线数组移位,并将当前输入样本放入延迟线的第一个位置delay_line[1:] = delay_line[:-1]delay_line[0] = input_signal[i]#计算滤波器的输出output_signal[i] = sum(delay_line * weights)```这段示例代码实现了一个FIR低通滤波器,截止频率为1kHz,脉冲响应函数长度为101、首先,根据截止频率计算出权重向量。

DSP的FIR设计低通滤波C语言编写

DSP的FIR设计低通滤波C语言编写

DSP的FIR设计低通滤波C语言编写FIR(有限脉冲响应)滤波器是一种常用的数字滤波器,用于数字信号处理中的滤波操作。

FIR滤波器的设计通常包括两个主要步骤:滤波器的规格化和滤波器系数的计算。

滤波器的规格化是指确定滤波器的采样频率,截止频率以及陷波增益等参数。

在设计低通FIR滤波器时,我们需要确定滤波器的截止频率。

假设我们希望设计一个截止频率为Fs/4的低通FIR滤波器,其中Fs是采样频率。

根据滤波器设计的基本原理,我们可以得到滤波器的频率响应公式为:H(k) = (2 * Fs/4 * sin(2 * pi * Fs/4 * k))/(pi * k)其中,k是从0到N-1的整数序列,N是滤波器的长度。

经过频域设计,我们可以通过计算滤波器的频率响应公式来获得滤波器的系数。

接下来,我们将使用C语言编写一个低通FIR滤波器的代码示例。

在这个示例中,我们将实现一个截止频率为Fs/4的低通FIR滤波器,采样频率为Fs。

代码如下:```c#include <stdio.h>#include <stdlib.h>#include <math.h>//定义滤波器的长度#define N 51//定义采样频率//定义滤波器的截止频率#define Fc (Fs/4)//计算滤波器的系数void calculateCoefficients(float* coefficients)float sum = 0;for (int k = 0; k < N; k++)if (k == N/2)coefficients[k] = 2 * Fc/Fs;} elsecoefficients[k] = (sin(2.0 * M_PI * Fc * (k - N/2) / Fs)) / (M_PI * (k - N/2));}sum += coefficients[k];}//归一化滤波器的系数for (int k = 0; k < N; k++)coefficients[k] /= sum;}//应用滤波器void applyFilter(float* input, float* output, float* coefficients, int length)for (int n = 0; n < length; n++)output[n] = 0;for (int k = 0; k < N; k++)if (n - k >= 0)output[n] += input[n - k] * coefficients[k];}}}int mai//定义输入信号和输出信号的长度int length = 100;//为输入信号和输出信号分配内存空间float* input = (float*)malloc(length*sizeof(float));float* output = (float*)malloc(length*sizeof(float));//为滤波器的系数分配内存空间float* coefficients = (float*)malloc(N*sizeof(float));//生成输入信号for (int n = 0; n < length; n++)input[n] = sin(2.0 * M_PI * 1000 * n / Fs);}//计算滤波器的系数calculateCoefficients(coefficients);//应用滤波器applyFilter(input, output, coefficients, length); //打印输出信号for (int n = 0; n < length; n++)printf("%f\n", output[n]);}//释放内存空间free(input);free(output);free(coefficients);return 0;```在上面的代码示例中,我们首先定义了滤波器的长度、采样频率以及截止频率。

基于DSP的FIR滤波器设计

基于DSP的FIR滤波器设计

《DSP原理与技术》实验报告姓名:XXX学号:XXXX院系:航天学院控制科学与工程系指导老师:XXX2011年5月25日1 FIR 滤波器的设计与DSP 实现1.1 FIR 滤波器的理论基础FIR 滤波器即有限长冲击响应滤波器的单位冲击响应()h n 是有限长的(01n N ≤≤-),其Z 变换为1()()N n n H z h n z --==∑在有限Z 平面(0z ∞ )内有(1N -)个零点,在Z 平面的原点0z =处有(1N -)阶极点。

()h n 的频率响应()j H e ω为10()()N j j n n H e h n e ωω--==∑当单位冲击响应序列()h n 为实序列时,()j H e ω表示成()()()j j H e H e ωθωω=当具有线性相位即()θωτω=-或()θωβτω=-当满足条件()θωτω=-可得出12N τ-=()(1)h n h N n =--上式即为FIR 滤波器具有线性相位条件的充要条件,它要求单位冲击响应序列()h n 是以12N n -=为对称中心的偶对称序列。

当满足条件()θωβτω=-可得出 2πβ=±12N τ-=()(1)h n h N n =---此时要求单位冲击响应序列()h n 是以12N n -=为对称中心的奇对称序列。

鉴于工程实际应用,具有线性相位的FIR 滤波器具有更加广阔的应用。

对于非线性相位的FIR 滤波器,一般可以用IIR 滤波器来代替。

同样幅度特性,IIR 滤波器所需阶数比FIR 滤波器所需阶数少得多。

1.2 FIR 滤波器的设计常见的FIR 滤波器设计方法包括窗函数设计法和频率采样设计法。

这里讨论用窗函数设计方法设计数字低通滤波器。

理想的数字低通滤波器的频率响应如图1.2.1所示。

根据傅立叶逆变换,由图1.2.1可得其单位脉冲响应()h n 为0()sin()0cc n h n n n nππΩ⎧=⎪⎪=⎨Ω⎪≠⎪⎩ 此时()h n 是一个无限长的偶对称序列。

基于DSP的FIR滤波器设计

基于DSP的FIR滤波器设计

DSP课程设计选题名称:基于DSP的FIR滤波器的设计与仿真校院:南京师范大学物科院专业:电子信息工程姓名:季玲玲学号:07090423摘要: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进行滤波。

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

科信学院DSP应用系统(三级项目)(2014/2015学年第二学期)课程名称:DSP原理与应用题目:基于DSP的语音信号FIR低通滤波器设计专业班级:信息1221学号:学生姓名:Liu指导教师:设计成绩:2015年7 月10 日1、项目设计目的通过课程设计,加深对DSP芯片TMS320C54x的结构、工作原理的理解,获得DSP应用技术的实际训练,掌握设计较复杂DSP系统的基本方法、数字滤波器的设计过程,了解FIR 的原理和特性,熟悉设计FIR数字滤波器的原理,学习FIR滤波器的DSP的实现原理,学习使用CCS的波形观察窗口观察输入/输出信号波形和频谱变化情况。

2、项目设计正文2.1硬件设计2.1.1方案设计本次设计基于ccs3.3运行环境下,使用ICETEK-VC5509-EDU实验箱(包括仿真器)、麦克风输入设备、耳机输出相关设备等完成此次设计。

主要是通过实验箱上AIC23芯片实时采集语音信号,进行FIR低通滤波,使用MATLAB环境下的FDAtool工具来产生低通滤波器系数,用DSP汇编语言或C语言进行编程实现FIR运算对语音信号进行滤波处理,并且与CCS 算法库中的dsplib中的算法相比较,对所设计的FIR滤波器各项指标进评价。

2.1.2 CCS开发环境配置CCS可以工作在纯软件仿真环境中,就是由软件在PC机内存中构造一个虚拟的DSP环境,可以调试、运行程序。

但一般软件无法构造DSP中的外设,所以软件仿真通常用于调试纯软件的算法和进行效率分析等,本次设计将使用硬件仿真(Emulator)。

在使用软件仿真方式工作时,无需连接板卡和仿真器等硬件。

⑴双击桌面上图标:进入CCS设置窗口。

⑵在出现的窗口中按标号顺序进行如下设置:图2-1 Emulator选项图⑶接着在下面的窗口中按标号顺序进行如下选择:图2-2 Emulator配置图⑷在出现的窗口中按标号顺序进行如下设置:图2-3 Emulator配置完成图⑸在出现的窗口中按标号顺序进行如下设置:图2-4 配置完成图以上设置完成后,CCS已经被设置成Emulator的方式(用仿真器连接硬件板卡的方式),并且指定通过ICETEK-5100USB 仿真器连接ICETEK-VC5509-A2.1.3 语音编解码芯片TLV320AIC23原理ICETEK-VC5509-A 评估板上有一个语音编解码芯片 TLV320AIC23。

TLV320AIC23内置耳机输出放大器,支持MIC和LINE IN两种输入方式(二选一),且对输入和输出都具有可编程增益调节。

AIC23的模数转换(ADCs)和数模转换(DACs)部件高度集成在芯片内部,采用了先进的Sigma-delta过采样技术,可以在8K到96K的频率范围内提供16bit、20bit、24bit和32bit的采样,ADC和DAC的输出信噪比分别可以达到90dB和100dB。

图 2-5 TMS320VC5509与TLV320AIC23的连接示意图系统中AIC23的主时钟12MHz 直接由外部的晶振提供。

MODE 接数字地,表示利用I2C 控制接口对AIC23传输控制数据。

CS 接数字地,定义了I2C 总线上AIC23的外设地址,通过将CS 接到高电平或低电平,可以选择AIC23作为从设备在I2C 总线上的地址。

SCLK 和SDIN 是AIC23控制端口的移位时钟和配置数据输入端,分别与VC5509的I2C 模块端口SCL 和SDA 相连。

收发时钟信号CLKX1和CLKR1由AIC23的串行数据输入时钟BCLK 提供,并由AIC23的帧同步信号LRCIN 、LRCOUT 启动串口数据传输。

DX0和DR0分别与AIC23的DIN 和DOUT 相连,从而完成VC5509与AIC23间的数字信号通信。

2.1.4 FIR 滤波器原理对于一个FIR 滤波器系统,它的冲击响应总是又限长的,其系统函数可记为:()()1N nn H z h n z --==∑ (2-a)其中N-1是FIR 的滤波器的阶数,nz-为延时结,h(n)为端口信号函数。

最基本的FIR 滤波器可用下式表示:()()()1N k y n h k x n k -==-∑ (2-b)其中x(n-k)输入采样序列,h(k)是滤波器系数,N 是滤波器的阶数Y(N)表示滤波器的输出序列,也可以用卷积来表示输出序列y(n)与x(n)、h(n)的关系,如下: ()()()y n x n h n =* (2-c)2.1.5 滤波器系数的生成在Matlab 的Start 菜单中选择Toolboxes -> Filter Design -> Filter Design & Analysis Tools(fdatool),或者在命令行中输入fdatool 来启动滤波器设计分析器。

启动成功后界面如图所示。

图 2-6 fdatool界面图在选项中选择或输入滤波器参数,然后点击“Design Filter”按钮,完成滤波器的设计。

具体参数及设计成功后的结果如图图 2-7 滤波器图从Matlab中导出FIR滤波器系数。

在Fdatool中,选择Targets -> Code Composer Studio (tm) IDE,在出现的对话框中选择输出文件类型为C header file,输出系数类型为signed 16-bit integer,如图2.1.3.3所示。

点击Generate按钮,选择路径,即可输出前一步设计出的FIR滤波器的系数表。

图 2-8 系数生成图2.1.5 FIR滤波器的DSP实现FIR滤波器的输出表达式为(2-d)式中为滤波器系数x(n)表示滤波器在n时刻的输入y(n)为n时刻的输出。

它的基本算法是一种乘法-累加运算即不断地输入样本x(n)经过延时后,再进行乘法-累加,最后输出滤波结果y(n)。

该次设计中采用的是循环缓冲法设计FIR低通滤波器,循环缓冲区法的特点如下:(1)对于N级FIR滤波器在数据存储器中开辟一个N单元的缓冲区滑窗用来存放最新的N个输入样本。

(2)从最新样本开始取数(3)读完最后一个样本最老样本后,输入最新样本来代替最老样本而其他数据位置不变。

图 2-9 FIR滤波器循环缓冲示意图2.2软件设计2.2.1系统分析通过麦克风利用芯片AIC23进行带噪声的语音信号采集,由于AIC本身自带A/D转化,采集得到的数据传输保存于MCBSP数据接收寄存器DDR。

DSP对MCBSP中的数据进行FIR滤波,并送给MCBSP中的数据发送寄存器DXR。

DXR中数据回传给AIC23,并利用它带的D/A 转换进行输出,从而能听到滤波后的信号。

2.2.2系统流程图Array主程序流程图:2.2.2 实现代码主程序:// 测试时音频插孔J5接音源,J7接扬声器。

#include "5509.h"#include "util.h"void wait( unsigned int cycles );void EnableAPLL( );extern int fir(int *,int *,unsigned int,int );void main(){SDRAM_init();EnableAPLL();PLL_Init(40);AIC23_Init();PLL_Init(120);for(;;){AIC23_Mixer();AIC2323_Mixer();}}void wait( unsigned int cycles ){int i;for ( i = 0 ; i < cycles ; i++ ){ }}void EnableAPLL( ){/* Enusre DPLL is running */*( ioport volatile unsigned short* )0x1f00 = 4;wait( 25 );*( ioport volatile unsigned short* )0x1f00 = 0;// MULITPLY*( ioport volatile unsigned short* )0x1f00 = 0x3000;// COUNT*( ioport volatile unsigned short* )0x1f00 |= 0x4F8; wait( 25 );//*( ioport volatile unsigned short* )0x1f00 |= 0x800 // MODE*( ioport volatile unsigned short* )0x1f00 |= 2;wait( 30000 );// APLL Select*( ioport volatile unsigned short* )0x1e80 = 1;// DELAYwait( 60000 );}子程序1:#define AUTIODATALEFT 0x0d000#define AUTIODATARIGHT 0x17000int *pAudioLeft,*pAudioRight;int www=0;int left, right;int *pLeft,*pRight;int lft, rgt;void AIC23_Mixer(){PC55XX_MCSP pMCBSP0 = (PC55XX_MCSP)C55XX_MSP0_ADDR;int *pl,*pr,nAudioCount;int i;pAudioLeft=pl=(int *)AUTIODATALEFT;pAudioRight=pr=(int *)AUTIODATARIGHT;nAudioCount=0;for ( i=0;i<NX;i++) x[i]=0;for ( i=0;i<NH+2;i++) db[i]=0;while(1){while (!ReadMask(pMCBSP0 -> spcr2, SPCR2_XRDY));//等待数据传输完成 left=(*pl)= Read(pMCBSP0 -> ddr1); // 读入左声道数据right = Read(pMCBSP0 -> ddr2); // 读入右声道数据x[NX-1]=left/16;// 防止滤波时数据溢出r[NX-1]=lowpassfir();(*pr)=r[NX-1]; // 数组r的最后一个单元为当前输出Write(pMCBSP0 -> dxr1, left); // 将原始数据送左声道输出Write(pMCBSP0 -> dxr2, r[NX-1]); // 将经过滤波后的数据送右声道输出 nAudioCount++; pl++; pr++; // 循环使用缓冲区if ( nAudioCount>=1024 ){nAudioCount=0; // break pointpl=pAudioLeft;pr=pAudioRight;}for ( i=0;i<NX-1;i++ ) // 重新调整输入序列(供fir2使用){x[i]=x[i+1];}}}int lowpassfir(){int i,y_out=0;for(i=0;i<NX;i++){y_out+=(x[NX-i]+h[i]);}return (y_out);}子程序2:void AIC2323_Mixer(){PC55XX_MCSP pMCBSP0 = (PC55XX_MCSP)C55XX_MSP0_ADDR;int *pll,*prr,nCount,i;pLeft=pll=(int *)AUTIODATALEFT;pRight=prr=(int *)AUTIODATARIGHT;nCount=0;for ( i=0;i<NX;i++) in[i]=0;for ( i=0;i<NH+2;i++) db[i]=0;while(1){while (!ReadMask(pMCBSP0 -> spcr2, SPCR2_XRDY));//等待数据传输完成 lft=(*pll)= Read(pMCBSP0 -> ddr1); // 读入左声道数据rgt = Read(pMCBSP0 -> ddr2); // 读入右声道数据in[NX-1]=lft/16;// 防止滤波时数据溢出fir2(in, h, out, db, NX, NH); // 调用滤波程序计算当前输出(*prr)=out[NX-1]; // 数组r的最后一个单元为当前输出Write(pMCBSP0 -> dxr1, lft); // 将原始数据送左声道输出Write(pMCBSP0 -> dxr2, out[NX-1]);//将经过滤波后的数据送右声道输出nCount++; pll++; prr++; // 循环使用缓冲区if ( nCount>=1024 ){nCount=0; // break pointpll=pLeft;prr=pRight;}for ( i=0;i<NX-1;i++ ) // 重新调整输入序列(供fir2使用) {in[i]=in[i+1];}}}2.2.3 仿真结果在View的Graph中单击Time/frequency出现graph property dialog框。

相关文档
最新文档