DSP原理与应用实验报告2Word格式文档下载.docx

上传人:b****2 文档编号:694116 上传时间:2023-04-29 格式:DOCX 页数:18 大小:228.81KB
下载 相关 举报
DSP原理与应用实验报告2Word格式文档下载.docx_第1页
第1页 / 共18页
DSP原理与应用实验报告2Word格式文档下载.docx_第2页
第2页 / 共18页
DSP原理与应用实验报告2Word格式文档下载.docx_第3页
第3页 / 共18页
DSP原理与应用实验报告2Word格式文档下载.docx_第4页
第4页 / 共18页
DSP原理与应用实验报告2Word格式文档下载.docx_第5页
第5页 / 共18页
DSP原理与应用实验报告2Word格式文档下载.docx_第6页
第6页 / 共18页
DSP原理与应用实验报告2Word格式文档下载.docx_第7页
第7页 / 共18页
DSP原理与应用实验报告2Word格式文档下载.docx_第8页
第8页 / 共18页
DSP原理与应用实验报告2Word格式文档下载.docx_第9页
第9页 / 共18页
DSP原理与应用实验报告2Word格式文档下载.docx_第10页
第10页 / 共18页
DSP原理与应用实验报告2Word格式文档下载.docx_第11页
第11页 / 共18页
DSP原理与应用实验报告2Word格式文档下载.docx_第12页
第12页 / 共18页
DSP原理与应用实验报告2Word格式文档下载.docx_第13页
第13页 / 共18页
DSP原理与应用实验报告2Word格式文档下载.docx_第14页
第14页 / 共18页
DSP原理与应用实验报告2Word格式文档下载.docx_第15页
第15页 / 共18页
DSP原理与应用实验报告2Word格式文档下载.docx_第16页
第16页 / 共18页
DSP原理与应用实验报告2Word格式文档下载.docx_第17页
第17页 / 共18页
DSP原理与应用实验报告2Word格式文档下载.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

DSP原理与应用实验报告2Word格式文档下载.docx

《DSP原理与应用实验报告2Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《DSP原理与应用实验报告2Word格式文档下载.docx(18页珍藏版)》请在冰点文库上搜索。

DSP原理与应用实验报告2Word格式文档下载.docx

编译、链接、加载、运行程序,选择菜单View→Graph→Time/Frequency,在弹出的“GraphPropertyDialog”对话框中进行相应的配置显示滤波系数和输出信号的时域图和频域的幅度和相位图。

利用Profiler工具测试函数大小及滤波时间,并与C语言的浮点实现进行比较。

5.设置CCS为“C5510DeviceSimulator”,利用Profiler工具测试函数大小及滤波时间。

观察程序运行状况,与以上结果对比分析。

6.再次将设置CCS为“C55xCycleAccurateSimulator”软件仿真模式,并保存退出,打开CCS2(’C5000)集成开发环境,打开项目,将滤波系数替换为高通滤波,运行程序,选择菜单View→Graph→Time/Frequency,在弹出的“GraphPropertyDialog”对话框中进行相应的配置显示滤波系数、输出信号的时域图和频域的幅度和相位图。

【程序代码】

//block_fir.c

voidfirc(float*in,intM,float*h,intL,float*out,float*x)

{

floatyn;

inti,j;

for(j=0;

j<

M;

j++)

{

x[0]=in[j];

for(yn=0.0,i=0;

i<

L;

i++)

{

yn+=h[i]*x[i];

}

out[j]=yn;

for(i=L-1;

i>

0;

i--)

x[i]=x[i-1];

//刷新缓冲

}

return;

}

;

fir.asm-GenericFIRfilter

利用单MAC

prototype:

unsignedintfir(int*,unsignedint,int*,

unsignedint,int*,int*,unsignedint);

Entry:

arg0:

AR0-filterinputbufferpointer

arg1:

T0numberofsamplesininputbuffer;

arg2:

AR1-FIRcoefficientsarraypointer

arg3:

T1-FIRfilterorder

arg4:

AR2-outputbufferpointer

arg5:

AR3-signalbufferpointer

arg6:

AR4-signalbufferindex

Return:

T0=signalbufferindex

.def_fir

.sect"

fir_code"

_fir

pshmST1_55;

SaveST1,ST2,andST3

pshmST2_55

pshmST3_55

or#0x340,mmap(ST1_55);

SetFRCT,SXMD,SATD

bsetSMUL;

SetSMUL

movmmap(AR1),BSA01;

AR1=baseaddressforcoeff

movmmap(T1),BK03;

Setcoefficientarraysize

movmmap(AR3),BSA23;

AR3=baseaddressforsignalbuffer

or#0xA,mmap(ST2_55);

AR1&

AR3ascircular

pointers

mov#0,AR1;

Startfromzerooffset

movAR4,AR3;

Startwithoffset=index

sub#1,T0;

T0=M-1

movT0,BRC0;

InitouterloopforMtimes

sub#3,T1,T0;

T0=L-3

movT0,CSR;

InitinnerloopL-2times

||rptblocalsample_loop-1;

Starttheouterloop

mov*AR0+,*AR3;

Putthenewsampletosignalbuffer

mpym*AR3+,*AR1+,AC0;

Dothe1stoperation

||rptCSR;

Starttheinnerloop

macm*AR3+,*AR1+,AC0

macmr*AR3,*AR1+,AC0;

Dothelastoperation

movhi(AC0),*AR2+;

SaveQ15filteredvalue

sample_loop

popmST3_55;

RestoreST1,ST2,andST3

popmST2_55

popmST1_55

movAR3,T0;

Returnsignalbufferindex

||ret

.end

#defineM128/*Inputsamplesize*/

#defineL37/*NumberofFIRfiltercoefficients*/

#defineSNL/*Signalbuffersize*/

externvoidsignal_gen(int*x,float*y,intN);

externvoidfirc(float*,int,float*,int,float*,float*);

externunsignedintfir(int*,unsignedint,int*,unsignedint,

int*,int*,unsignedint);

/*DefineDSPsystemmemorymap*/

#pragmaDATA_SECTION(LP_h,"

fir_coef"

);

#pragmaDATA_SECTION(x,"

fir_data"

#pragmaDATA_SECTION(in,"

input"

#pragmaDATA_SECTION(index,"

#pragmaDATA_SECTION(out,"

output"

#pragmaDATA_SECTION(LP_hfloat,"

#pragmaDATA_SECTION(xfloat,"

#pragmaDATA_SECTION(infloat,"

#pragmaDATA_SECTION(outfloat,"

#pragmaDATA_SECTION(inputfloat,"

#pragmaDATA_SECTION(input,"

#pragmaCODE_SECTION(main,"

/*Low-passFIRfiltercoefficients*/

staticintLP_h[L]={

-79,-101,0,180,256,68,-307,-525,-251,

444,976,665,-567,-1835,-1722,653,4745,8653,

10262,8653,4745,653,-1722,-1835,-567,665,976,

444,-251,-525,-307,68,256,180,0,-101,-79,

};

//低通

staticfloatLP_hfloat[L]={

-0.002423,-0.003085,0.000000,0.005480,0.007808,0.002078,

-0.009368,-0.016010,-0.007649,0.013553,0.029784,0.020294,

-0.017318,-0.055992,-0.052540,0.019938,0.144791,0.264073,

0.313170,0.264073,0.144791,0.019938,-0.052540,-0.055992,

-0.017318,0.020294,0.029784,0.013553,-0.007649,-0.016010,

-0.009368,0.002078,0.007808,0.005480,0.000000,-0.003085,

-0.002423

intinput[160];

floatinputfloat[160];

intx[SN];

/*Signalbuffer*/

unsignedintindex;

/*Signalbufferindex*/

intout[M];

/*Outputbuffer*/

intin[M];

/*Inputbuffer*/

floatinfloat[M];

floatoutfloat[M];

floatxfloat[L];

voidmain(void)

unsignedinti,j;

signal_gen(input,inputfloat,160);

/*Initializefiltersignalbuffer*/

for(i=0;

SN;

xfloat[i]=0;

j=0;

x[i]=0;

index=0;

while

(1)

for(i=0;

i<

i++)

in[i]=input[j++];

//Getabufferofsamples

if(j==160)

j=0;

infloat[i]=inputfloat[j++];

/*Getabufferofsamples*/

if(j==160)

firc(infloat,M,LP_hfloat,L,outfloat,xfloat);

index=fir(in,M,LP_h,L,out,x,index);

/*FIRfilter*/

/*

signal_gen.c-Generatesinewavesastestdata

prototype:

voidsignal_gen(int*,float*,int)

arg0:

-databufferpointerforoutputinQ15

arg1:

-databufferpointerforoutputinfloat

arg2:

-numberofsamples

*/

#include<

math.h>

#defineT0.000125/*8000Hzsamplingfrequency*/

#definef1800/*800Hzfrequency*/

#definef21800/*1800Hzfrequency*/

#definef33300/*3300Hzfrequency*/

#definePI3.1415926

#definetwo_pi_f1_T(2*PI*f1*T)/*2*pi*f1/Fs*/

#definetwo_pi_f2_T(2*PI*f2*T)/*2*pi*f2/Fs*/

#definetwo_pi_f3_T(2*PI*f3*T)/*2*pi*f3/Fs*/

#definea10.333/*Magnitudeforwave1*/

#definea20.333/*Magnitudeforwave2*/

#definea30.333/*Magnitudeforwave3*/

voidsignal_gen(int*x,float*y,intN)

floattemp;

inti;

for(i=0;

N;

temp=a1*cos((double)two_pi_f1_T*i);

temp+=a2*cos((double)two_pi_f2_T*i);

temp+=a3*cos((double)two_pi_f3_T*i);

x[i]=(int)((0x8000*temp)+0.5);

//浮点转Q15定点

y[i]=temp;

-lrts55.lib

LinkercommandfileforExperiment2(C55xmemorymap)

MEMORY

MMR:

origin=0000000h,length=00000c0h

SPRAM:

origin=00000c0h,length=0000040h

DARAM0:

origin=0000100h,length=0003F00h

DARAM1:

origin=0004000h,length=0004000h

DARAM2:

origin=0008000h,length=0004000h

DARAM3:

origin=000c000h,length=0004000h

SARAM0:

origin=0010000h,length=0004000h

SARAM1:

origin=0014000h,length=0004000h

SARAM2:

origin=0018000h,length=0004000h

SARAM3:

origin=001c000h,length=0004000h

SARAM4:

origin=0020000h,length=0004000h

SARAM5:

origin=0024000h,length=0004000h

SARAM6:

origin=0028000h,length=0004000h

SARAM7:

origin=002c000h,length=0004000h

SARAM8:

origin=0030000h,length=0004000h

SARAM9:

origin=0034000h,length=0004000h

SARAM10:

origin=0038000h,length=0004000h

SARAM11:

origin=003c000h,length=0004000h

SARAM12:

origin=0040000h,length=0004000h

SARAM13:

origin=0044000h,length=0004000h

SARAM14:

origin=0048000h,length=0004000h

SARAM15:

origin=004c000h,length=0004000h

VECS:

origin=0ffff00h,length=00100h/*resetvector*/

SECTIONS

vectors:

{}>

VECS/*interruptvectortable*/

.cinit:

SARAM0

.text:

SARAM1

.stack:

DARAM0

.sysstack:

.sysmem:

DARAM1

.data:

.bss:

.const:

fir_coef:

SARAM0/*userdefinedsections*/

fir_data:

DARAM2

input:

output:

SARAM0align0x4/*boundaryalignment*/

fir_code:

【试验截图】

输入信号inputfloat的时域图:

输入信号inputfloat的幅度图和相位图:

用MATLAB设计低通滤波器:

经过C语言的低通滤波器后的信号outfloat的时域图:

经过C语言的低通滤波器后的信号outfloat的幅度图和相位图:

经过汇编语言的低通滤波器后的信号out的时域图:

经过汇编语言的低通滤波器后的信号out的幅度图和相位图:

用MATLAB设计高通滤波器:

经过C语言的高通滤波器后的信号outfloat的时域图:

经过C语言的高通滤波器后的信号outfloat的幅度图和相位图:

经过汇编语言的高通滤波器后的信号out的时域图:

经过汇编语言的高通滤波器后的信号out的幅度图和相位图:

五、总结实验体会及实验中存在的问题

这是第二次做DSP实验,实验指导书中很详细的介绍了实验的方法,我按照实验指导书步步执行,并未遇到严重的大问题。

在实验的过程中由于对汇编语言不熟悉,导致因为格式不对而编译出错,但在老师的细心帮助下很快得到了解决。

我希望能在这几次实验后能更加熟练DSP及MATLAB的操作,对fir滤波器做更深了解。

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2