您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 数字信号插值实验报告
1时域测试技术综合实验报告书实验名称基于DSP的信号插值实验一、实验目的1.掌握数字信号处理的基本流程;2.掌握信号插值数字滤波器的基本设计流程;3.掌握信号插值数字滤波器的DSP实现基本流程。二、实验内容1、使用Matlab设计一个L=4倍的信号插值数字滤波器;2、通过DSP实现对FPGA寄存器端口进行读操作,并确认读出数据正确;3、通过DSP实现对读入的数据进行L=4倍的信号插值;4、在VisualDSP++中调试,完成数据显示,确认数据正确。三、实验步骤(给出相应代码及调试环境截图)1、设计信号插值数字滤波器(1)运行Matlab;(2)基于窗函数设计法(fir1)或频率抽样法(fir2)设计一个I=4倍的信号插值数字滤波器;(3)基于MATLAB构建一个测试信号,进行零值内插,运用所设计的信号插值滤波器对零值内插后的信号进行滤波,确认滤波的正2确;32、通过信号源输入约4MHz,500mVPP的信号(CH1),通过DSP实现对FPGA寄存器端口进行读操作,在VisualDSP++中调试,确认数据正确,用颜色1进行显示(结合第四、五次实验程序);3、完成对采样信号的插值(1)通过DSP实现对读入的数据(gOriginBuffer[0])的I=4倍的零值内插;(2)将零值内插后的数据通过之前所设计的插值滤波器,即进行卷积,4结果存放于Obuffer中;(3)在同一显示区域,用颜色2完成显示;4、通过对比两条曲线各周期信号点数验证信号插值的正确性。实验相关代码://************添加插值函数开始******************constshort*InPtr;floatIbuffer[1200]=0;//输入fract16Ibuffer_fr16[1200]=0;//输入shortLen=300;//插值前信号点数fract16SinX_I4_16_fr16[16]=0;//插值系数shortObuffer[1215]=0;//输出fract16Obuffer_fr16[1215]=0;//输出InPtr=(short*)gOriginBuffer;//对输入信号归一化后,插入零值,完成数据类型的转换5for(i=0;i4*Len;i++){if(i%4==0)Ibuffer[i]=(float)InPtr[i/4]/255;elseIbuffer[i]=0;}for(i=0;i4*Len;i++){Ibuffer_fr16[i]=float_to_fr16(Ibuffer[i]);}//插值系数的类型转换for(i=0;i16;i++){SinX_I4_16_fr16[i]=float_to_fr16(SinX_I4_16_float[i]);}//对Ibuffer_fr16低通滤波//voidconvolve_fr16(constfract16input_x[],intlength_x,constfract16input_y[],intlength_y,fract16output[]);convolve_fr16(Ibuffer_fr16,1200,SinX_I4_16_fr16,16,Obuffer_fr16);//对Obuffer去归一化&类型转换for(i=0;i1215;i++){Obuffer[i]=fr16_to_float(Obuffer_fr16[i])*255;}//************插值函数结束*******************四、实验结果分析与总结在VisualDSP++中调试,完成数据显示,通过观察实验平台显示器上波形显示,确认数据正确。本次实验基本完成要求。五、实验思考题如果数字插值滤波器使用多相结构,滤波器系数该如何分组,程序又该如何实现?内插滤波器的多相结构巧妙利用了内插滤波器延迟线上的某些抽样是零值的特点,内插器被去除,从而无需寄存或缓存零值抽样,同时原滤波器被分解为R个子滤波器,其系数表示为:6设原滤波器阶数为2R的倍数,取R=3,则原滤波器分解得到的3个子滤波器的系数分别为:h0[n]={h[0],h[3],h[6],…,h[N]}h1[n]={h[1],h[4],h[7],…,h[N-2]}h2[n]={h[2],h[5],h[8],…,h[N-1]}取R=4,原滤波器分解得到的4个子滤波器的系数分别为h0[n]={h[0],h[4],h[8],…,h[N]}h1[n]={h[1],h[5],h[9],…,h[N-3]}h2[n]={h[2],h[6],h[10],…,h[N-2]}h3[n]={h[3],h[7],h[11],…,h[N-1]}
本文标题:数字信号插值实验报告
链接地址:https://www.777doc.com/doc-2230657 .html