DSP实验报告.docx

上传人:b****7 文档编号:26224629 上传时间:2023-06-17 格式:DOCX 页数:13 大小:119.81KB
下载 相关 举报
DSP实验报告.docx_第1页
第1页 / 共13页
DSP实验报告.docx_第2页
第2页 / 共13页
DSP实验报告.docx_第3页
第3页 / 共13页
DSP实验报告.docx_第4页
第4页 / 共13页
DSP实验报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

DSP实验报告.docx

《DSP实验报告.docx》由会员分享,可在线阅读,更多相关《DSP实验报告.docx(13页珍藏版)》请在冰豆网上搜索。

DSP实验报告.docx

DSP实验报告

DSP实验报告

软件实验

1无限冲激响应滤波器(IIR)算法

一.实验目的

1.掌握设计IIR数字滤波器的原理和方法。

2.熟悉IIR数字滤波器特性。

3.了解IIR数字滤波器的设计方法。

二.实验设备

PC兼容机一台,操作系统为Windows2000(或Windows98,WindowsXP,以下默认为Windows2000),安装CodeComposerStudio2.21软件。

三.实验原理

1.无限冲激响应数字滤波器的基础理论。

2.模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、椭圆滤波器、贝塞尔滤波器)。

3.数字滤波器系数的确定方法。

4.根据要求设计低通IIR滤波器:

要求:

低通巴特沃斯滤波器在其通带边缘1kHz处的增益为-3dB,12kHz处的阻带衰减为30dB,采样频率25kHz。

设计:

-确定待求通带边缘频率fp1Hz、待求阻带边缘频率fs1Hz和待求阻带衰减-20logδsdB。

模拟边缘频率为:

fp1=1000Hz,fs1=12000Hz

阻带边缘衰减为:

-20logδs=30dB

-用Ω=2πf/fs把由Hz表示的待求边缘频率转换成弧度表示的数字频率,得到Ωp1和Ωs1。

Ωp1=2πfp1/fs=2π1000/25000=0.08π弧度

Ωs1=2πfs1/fs=2π12000/25000=0.96π弧度

-计算预扭曲模拟频率以避免双线性变换带来的失真。

由w=2fstan(Ω/2)求得wp1和ws1,单位为弧度/秒。

wp1=2fstan(Ωp1/2)=6316.5弧度/秒

ws1=2fstan(Ωs1/2)=794727.2弧度/秒

-由已给定的阻带衰减-20logδs确定阻带边缘增益δs。

因为-20logδs=30,所以logδs=-30/20,δs=0.03162

-计算所需滤波器的阶数:

因此,一阶巴特沃斯滤波器就足以满足要求。

-一阶模拟巴特沃斯滤波器的传输函数为:

H(s)=wp1/(s+wp1)=6316.5/(s+6316.5)

由双线性变换定义s=2fs(z-1)/(z+1)得到数字滤波器的传输函数为:

因此,差分方程为:

y[n]=0.7757y[n-1]+0.1122x[n]+0.1122x[n-1]。

5.程序流程图:

四.实验步骤

1.实验准备:

-设置软件仿真模式

-启动CCS

2.打开工程,浏览程序,工程目录为

C:

\ICETEK\VC5416AES61\VC5416AES61\Lab0502-IIR\IIR.pjt。

3.编译并下载程序。

4.打开观察窗口:

*选择菜单View->Graph->Time/Frequency…进行如下图所示设置。

*选择菜单View->Graph->Time/Frequency…,进行如下设置:

5.清除显示:

在以上打开的窗口中单击鼠标右键,选择弹出式菜单中“CleAeDisplay”功能。

6.设置断点:

在程序iir.c中有注释“breakpoint”的语句上设置软件断点。

7.运行并观察结果:

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

⑵观察“IIR”窗口中时域图形;观察滤波效果。

8.退出CCS

五.实验结果

输入波形为一个低频率的正弦波与一个高频的余弦波叠加而成。

如图:

通过观察频域和时域图,得知:

输入波形中的低频波形通过了滤波器,而高频部分则被衰减。

实验代码:

#include

#defineIIRNUMBER2

#defineSIGNAL1F1000

#defineSIGNAL2F4500

#defineSAMPLEF10000

#definePI3.1415926

floatInputWave();

floatIIR();

floatfBn[IIRNUMBER]={0.0,0.7757};

floatfAn[IIRNUMBER]={0.1122,0.1122};

floatfXn[IIRNUMBER]={0.0};

floatfYn[IIRNUMBER]={0.0};

floatfInput,fOutput;

floatfSignal1,fSignal2;

floatfStepSignal1,fStepSignal2;

floatf2PI;

inti;

floatfIn[256],fOut[256];

intnIn,nOut;

main()

{

nIn=0;nOut=0;

fInput=fOutput=0;

f2PI=2*PI;

fSignal1=0.0;

fSignal2=PI*0.1;

//fStepSignal1=2*PI/30;

//fStepSignal2=2*PI*1.4;

fStepSignal1=2*PI/50;

fStepSignal2=2*PI/2.5;

while

(1)

{

fInput=InputWave();

fIn[nIn]=fInput;

nIn++;nIn%=256;

fOutput=IIR();

fOut[nOut]=fOutput;

nOut++;//breakpoint

if(nOut>=256)

{

nOut=0;

}

}

}

floatInputWave()

{

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

{

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

fYn[i]=fYn[i-1];

}

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

fYn[0]=0.0;

fSignal1+=fStepSignal1;

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

fSignal2+=fStepSignal2;

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

return(fXn[0]);

}

floatIIR()

{

floatfSum;

fSum=0.0;

for(i=0;i

{

fSum+=(fXn[i]*fAn[i]);

fSum+=(fYn[i]*fBn[i]);

}

return(fSum);

}

2快速傅立叶变换(FFT)算法

一.实验目的

1.掌握用窗函数法设计FFT快速傅里叶的原理和方法;

2.熟悉FFT快速傅里叶特性;

3.了解各种窗函数对快速傅里叶特性的影响。

二.实验设备

PC兼容机一台,操作系统为Windows2000(或Windows98,WindowsXP,以下默认为Windows2000),安装CodeComposerStudio2.0软件。

三.实验原理

1.FFT的原理和参数生成公式:

FFT并不是一种新的变换,它是离散傅立叶变换(DFT)的一种快速算法。

由于我们在计算DFT时一次复数乘法需用四次实数乘法和二次实数加法;一次复数加法则需二次实数加法。

每运算一个X(k)需要4N次复数乘法及2N+2(N-1)=2(2N-1)次实数加法。

所以整个DFT运算总共需要4N^2次实数乘法和N*2(2N-1)=2N(2N-1)次实数加法。

如此一来,计算时乘法次数和加法次数都是和N^2成正比的,当N很大时,运算量是可观的,因而需要进对DFT的算法减少运算速度。

根据傅立叶变换的对称性和周期性,我们可以将DFT运算中有些项合并。

我们先设序列长度为N=2^L,L为整数。

将N=2^L的序列x(n)(n=0,1,……,N-1),按N的奇偶分成两组,也就是说我们将一个N点的DFT分解成两个N/2点的DFT,他们又从新组合成一个如下式所表达的N点DFT:

一般来说,输入被假定为连续的。

当输入为纯粹的实数的时候,我们就可以利用左右对称的特性更好的计算DFT。

我们称这样的RFFT优化算法是包装算法:

首先2N点实数的连续输入称为“进包”。

其次N点的FFT被连续运行。

最后作为结果产生的N点的合成输出是“打开”成为最初的与DFT相符合的2N点输入。

使用这战略,我们可以划分FFT的大小,它有一半花费在包装输入O(N)的操作和打开输出上。

这样的RFFT算法和一般的FFT算法同样迅速,计算速度几乎都达到了两次DFT的连续输入。

下列一部分将描述更多的在TMS320C54xx上算法和运行的细节。

5.程序流程图:

四.实验步骤

1.实验准备:

-设置软件仿真模式。

-启动CCS。

2.打开工程,浏览程序,工程目录为

C:

\ICETEK\VC5416AES61\VC5416AES61\Lab0503-FFT\FFT.pjt。

3.编译并下载程序。

4.打开观察窗口:

*选择菜单View->Graph->Time/Frequency…进行如下图所示设置。

5.清除显示:

在以上打开的窗口中单击鼠标右键,选择弹出式菜单中“CleAeDisplay”功能。

6.设置断点:

在程序FFT.c中有注释“breakpoint”的语句上设置软件断点。

7.运行并观察结果。

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

8.退出CCS。

5.实验结果

通过观察频域和时域图,程序计算出了测试波形的功率谱,与CCS计算的FFT结果相近。

实验代码:

#include

#definePI3.1415926

#defineSAMPLENUMBER128

voidInitForFFT();

voidMakeWave();

intINPUT[SAMPLENUMBER],DATA[SAMPLENUMBER];

floatfWaveR[SAMPLENUMBER],fWaveI[SAMPLENUMBER],w[SAMPLENUMBER];

floatsin_tab[SAMPLENUMBER],cos_tab[SAMPLENUMBER];

voidFFT(floatdataR[SAMPLENUMBER],floatdataI[SAMPLENUMBER]);

main()

{

inti;

InitForFFT();

MakeWave();

for(i=0;i

{

fWaveR[i]=INPUT[i];

fWaveI[i]=0.0f;

w[i]=0.0f;

}

FFT(fWaveR,fWaveI);

for(i=0;i

{

DATA[i]=w[i];

}

while

(1);//breakpoint

}

voidFFT(floatdataR[SAMPLENUMBER],floatdataI[SAMPLENUMBER])

{

intx0,x1,x2,x3,x4,x5,x6,xx;

inti,j,k,b,p,L;

floatTR,TI,temp;

/**********followingcodeinvertsequence************/

for(i=0;i

{

x0=x1=x2=x3=x4=x5=x6=0;

x0=i&0x01;x1=(i/2)&0x01;x2=(i/4)&0x01;x3=(i/8)&0x01;x4=(i/16)&0x01;x5=(i/32)&0x01;x6=(i/64)&0x01;

xx=x0*64+x1*32+x2*16+x3*8+x4*4+x5*2+x6;

dataI[xx]=dataR[i];

}

for(i=0;i

{

dataR[i]=dataI[i];dataI[i]=0;

}

/**************followingcodeFFT*******************/

for(L=1;L<=7;L++)

{/*for

(1)*/

b=1;i=L-1;

while(i>0)

{

b=b*2;i--;

}/*b=2^(L-1)*/

for(j=0;j<=b-1;j++)/*for

(2)*/

{

p=1;i=7-L;

while(i>0)/*p=pow(2,7-L)*j;*/

{

p=p*2;i--;

}

p=p*j;

for(k=j;k<128;k=k+2*b)/*for(3)*/

{

TR=dataR[k];TI=dataI[k];temp=dataR[k+b];

dataR[k]=dataR[k]+dataR[k+b]*cos_tab[p]+dataI[k+b]*sin_tab[p];

dataI[k]=dataI[k]-dataR[k+b]*sin_tab[p]+dataI[k+b]*cos_tab[p];

dataR[k+b]=TR-dataR[k+b]*cos_tab[p]-dataI[k+b]*sin_tab[p];

dataI[k+b]=TI+temp*sin_tab[p]-dataI[k+b]*cos_tab[p];

}/*ENDfor(3)*/

}/*ENDfor

(2)*/

}/*ENDfor

(1)*/

for(i=0;i

{

w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]);

}

}/*ENDFFT*/

voidInitForFFT()

{

inti;

for(i=0;i

{

sin_tab[i]=sin(PI*2*i/SAMPLENUMBER);

cos_tab[i]=cos(PI*2*i/SAMPLENUMBER);

}

}

voidMakeWave()

{

inti;

for(i=0;i

{

INPUT[i]=sin(PI*2*i/SAMPLENUMBER*3)*1024;

}

}

硬件实验

实验4.2:

发光二极管阵列显示实验

一.实验目的

通过实验学习使用5416ADSP的扩展端口控制外围设备的方法,了解发光二极管阵列的控制编程方法。

二.实验设备

计算机,ICETEK-VC5416-AE实验箱(或ICETEK仿真器ICETEK-VC5416-AE系统板相关连线及电源)。

三.实验原理

1.扩展接口ICETEK-VC5416-AE是一块以TMS320VC5416ADSP为核心的DSP扩展评估板,它通过扩展接口与实验箱的显示/控制模块连接,可以控制其各种外围设备。

2.发光二极管显示阵列的显示是由扩展端口控制,扩展在IO接口的两个寄存器EWR和SNR提供具体控制。

3.实验程序流程图:

四.实验步骤

1.实验准备:

⑴连接实验设备

⑵将ICETEK-CTR板的供电电源开关拨动到“开”的位置。

2.设置CodeComposerStudio2.21在硬件仿真(Emulator)方式下运行。

3.启动CodeComposerStudio2.21:

选择菜单Debug→ResetCPU。

4.打开工程文件。

5.编译、下载程序。

6.运行程序观察结果。

7.结束程序运行,退出CCS。

五.实验结果与分析

实验结果:

可以看到发光二极管依次点亮。

分析:

本程序使用循环延时的方法,如果想实现较为精确的定时,可使用通用计时器,在通用计时器中断中取得延时,改变显示内容。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 书信模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1