基于TMS320VC5509-DSP的语音信号的FIR滤波器_第1页
基于TMS320VC5509-DSP的语音信号的FIR滤波器_第2页
基于TMS320VC5509-DSP的语音信号的FIR滤波器_第3页
基于TMS320VC5509-DSP的语音信号的FIR滤波器_第4页
基于TMS320VC5509-DSP的语音信号的FIR滤波器_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※2023级学生课程设计DSP原理与应用课程设计报告书课题名称基于TMS320VC5509DSP的语音信号的FIR滤波器姓名学号院、系、部专业指导教师20012年6月9日基于TMS320VC5509DSP的语音信号的FIR滤波器设计一、实践的目的和要求1.熟悉ICETEK-VC5509-A板上语音codec芯片TLV320AIC23的设计和程序控制原理。2.熟悉FIR滤波器工作原理及编程。3.掌握使用TI的算法库dsplib提高程序运行效率的方法。4.学习使用CCS图形观察窗口观察和分析语音波形及其频谱。二、实践原理:在数字信号处理中,滤波占有极其重要的地位。数字滤波是语音处理、图像处理、模式识别、频谱分析等应用中的根本处理算法。用DSP芯片实现数字滤波除了具有稳定性好、精确度高、不受环境影响等优点外,还具有灵活性好等特点。VC5509引脚图过渡带宽度=阻带边缘频宽-通带边缘频率采样频率:f1=通带边缘频率+〔过渡带宽度〕/2理想低通滤波器脉冲响应:h1[n]=sin(nΩ1)/n/π根据要求,选择布莱克曼窗,窗函数长度为:N=5.98fs/过渡带宽度选择N=30w[n]=0.42+0.5cos(2πn/30)+0.8cos(4πn/24)滤波器脉冲响应为:h[n]=h1[n]w[n]|n|<=12h[n]=0|n|>12根据上面计算,各式算出h[n],然后将脉冲响应值移位为因果序列。完成的滤波器的差分方程为:y[n]=-0.001x[n-2]-0.002x[n-3]-0.002x[n-4]+0.01x[n-5]-0.009x[n-6]-0.018x[n-7]-0.049x[n-8]-0.02x[n-9]+0.11x[n-10]+0.28x[n-11]+0.64x[n-12]+0.28x[n-13]-0.11x[n-14]-0.02x[n-15]+0.049x[n-16]-0.018x[n-17]-0.009x[n-18]+0.01[n-19]-0.002x[n-20]-0.002x[n-21]+0.001x[n-22]开始开始初始化:EMIF、CPU频率、AIC23调用AIC23_Mixer子程序处理音频数据输入/输出开始开始初始化语音缓冲区和工作变量等待McBSP通道0传送结束读取语音数据保存于左声道缓冲区调用fir2计算FIR滤波输出滤波结果保存于右声道缓冲区原声音送左声道,滤波结果送右声道,输出到McBSP0三、实践步骤1.首先自己参照指导书完《语音信号的FIR滤波实验》,认真阅读实验中的源程序,深刻理解语音信号FIR滤波的原理及具体实现方法,包括含噪语音信号的读取,滤波后信号的输出,语音编解码器的设置〔AIC23〕,重点理解FIR滤波器的实现〔循环寻找的实现〕2.语音采集的采集与分析〔1〕录制语音,并命名为“e〞,保存在相应的位置〔桌面〕。〔2〕用MATLAB对原始语音信号进行分析,画出它的时域波形和频谱。程序如下:fs=22050;[x,fs,Nbits]=wavread('C:\DocumentsandSettings\Owner\桌面\e');t=0:1/22050:(length(x)-1)/22050;sound(x,fs);%对加载的语音信号进行回放figure(1)plot(x)%做原始语音信号的时域图形title('原始语音信号');xlabel('timen');ylabel('fuzhin');figure(2)freqz(x)%绘制原始语音信号的频率响应图title('频率响应图')n=length(x);%求出语音信号的长度y1=fft(x,n);%傅里叶变换y2=fftshift(y1);%对频谱图进行平移f=0:fs/n:fs*(n-1)/n;%得出频点figure(3)subplot(2,1,1);plot(abs(y2))%做原始语音信号的FFT频谱图title('原始语音信号FFT频谱')subplot(2,1,2);plot(f,abs(y2));%绘制原始语音信号的频谱图title('原始语音信号频谱')%加噪声k=1:1:n;%定义k值,噪声与原始语音长度一致c1=100000*sin(2*pi*5000*k);%噪声信号的函数z=x'+c1;%噪音与原始信号叠加wavwrite(z,8000,16,'C:\DocumentsandSettings\Owner\桌面\e2');%得到含噪语音s=length(c1);y3=fft(z,s);%对叠加信号进行频谱变换y4=fftshift(y3);%对频谱图平移f=0:fs/s:fs*(s-1)/s;%得出频点figure(4)plot(z)%做原始语音信号的时域图形title('加噪语音信号');xlabel('timen');ylabel('fuzhin');figure(5)plot(f,abs(y4));%绘出加噪语音频谱图axis([080000100]);title('含噪语音信号的频谱');figure(6)subplot(2,1,1);plot(f,abs(y2))%做原始语音信号的FFT频谱图title('原始语音信号FFT频谱')subplot(2,1,2);plot(f,abs(y4))%做加噪语音信号的FFT频谱图title('加噪语音信号频谱')原始语音信号加噪语音信号原始语音信号FFT频谱含噪语音信号频谱原始语音信号FFT频谱频率响应图3.设计一定参数的滤波器使用fir2函数设计一个31阶低通滤波器,信号的采样频率为8000Hz,滤波器的通带截止频率为2900Hz,阻带截止频率为3300Hz。在函数中,其截止频率均用归一化频率表示。归一化频率的计算方法:f=实际频率/(采样频率/2),那么将截止频率归一化后的截止频率值为0.725、0.825用fir2函数实现的格式:f=[00.7250.8251];m=[1100];b=fir2〔30,f,m〕;b=-0.0005,0.0004,0.0003,-0.0018,0.0039,-0.0045,0.0009,0.0086,-0.0210,0.0279,-0.0173,-0.0191,0.0793,-0.1486,0.2043,0.7744,0.2043,-0.1486,0.0793,-0.0191,-0.0173,0.0279,-0.0210,0.0086,0.0009,-0.0045,0.0039,-0.0018,0.0003,0.0004,-0.0005Audio滤波程序如下:#include"myapp.h"#include"ICETEK-VC5509-EDU.h"#include"scancode.h"#include<math.h>#defineFIRNUMBER31#defineSIGNAL1F2900#defineSIGNAL2F3300#defineSAMPLEF8000#definePI3.1415926floatInputWave();floatFIR();floatfHn[FIRNUMBER]={-0.0005,0.0004,0.0003,-0.0018,0.0039,-0.0045,0.0009,0.0086,-0.0210,0.0279,-0.0173,-0.0191,0.0793,-0.1486,0.2043,0.7744,0.2043,-0.1486,0.0793,-0.0191,-0.0173,0.0279,-0.0210,0.0086,0.0009,-0.0045,0.0039,-0.0018,0.0003,0.0004,-0.0005};floatfXn[FIRNUMBER]={0.0};floatfInput,fOutput;floatfSignal1,fSignal2;floatfStepSignal1,fStepSignal2;floatf2PI;inti;floatfIn[256],fOut[256];intnIn,nOut;main(){nIn=0;nOut=0; f2PI=2*PI; fSignal1=0.0; fSignal2=PI*0.1; fStepSignal1=2*PI/30; fStepSignal2=2*PI*1.4; while(1) {fInput=InputWave(); fIn[nIn]=fInput; nIn++;nIn%=256; fOutput=FIR(); fOut[nOut]=fOutput; nOut++; /*breakpoint*/ if(nOut>=256) {nOut=0; } }}floatInputWave(){for(i=FIRNUMBER-1;i>0;i--) fXn[i]=fXn[i-1]; fXn[0]=sin((double)fSignal1)+cos((double)fSignal2)/6.0; fSignal1+=fStepSignal1; if(fSignal1>=f2PI) fSignal1-=f2PI; fSignal2+=fStepSignal2; if(fSignal2>=f2PI) fSignal2-=f2PI; return(fXn[0]);}floatFIR(){floatfSum; fSum=0; for(i=0;i<FIRNUMBER;i++) {fSum+=(fXn[i]*fHn[i]); } return(fSum);}语音信号的FIR滤波程序#include"5509.h"#include"util.h"#include"audio.h"//AIC23ControlRegisteraddresses#defineAIC23_LT_LINE_CTL0x00//0#defineAIC23_RT_LINE_CTL0x02//1#defineAIC23_LT_HP_CTL0x04//2#defineAIC23_RT_HP_CTL0x06//3#defineAIC23_ANALOG_AUDIO_CTL0x08//4#defineAIC23_DIGITAL_AUDIO_CTL0x0A//5#defineAIC23_POWER_DOWN_CTL0x0C//6#defineAIC23_DIGITAL_IF_FORMAT0x0E//7#defineAIC23_SAMPLE_RATE_CTL0x10//8#defineAIC23_DIG_IF_ACTIVATE0x12//9#defineAIC23_RESET_REG0x1E//F-Writing0tothisregtriggersreset//AIC23ControlRegistersettings#definelt_ch_vol_ctrl0x0017/*0*/#definert_ch_vol_ctrl0x0017/*1*/#definelt_ch_headph_ctrl0x0079/*2*/#definert_ch_headph_ctrl0x0079/*3*/#definealog_au_path_ctrl0x0000/*4*/#definedigi_au_path_ctrl0x0000/*5*/#definepow_mgt_ctrl_ctrl0x0002/*6*/#definedigi_au_intf_ctrl0x000D/*7*/#defineau_FS_TIM_ctrl0x0000/*8MCLK=12MHz,SampleRatesetting*/#definedigi_intf1_ctrl0x0001/*9*/#definedigi_intf2_ctrl0x00FF/*10*/#defineDIGIF_FMT_MS0x40#defineDIGIF_FMT_LRSWAP0x20#defineDIGIF_FMT_LRP0x10#defineDIGIF_FMT_IWL0x0c#defineDIGIF_FMT_FOR0x03#defineDIGIF_FMT_IWL_160x00#defineDIGIF_FMT_IWL_200x04#defineDIGIF_FMT_IWL_240x08#defineDIGIF_FMT_IWL_320xc0#defineDIGIF_FMT_FOR_MSBRIGHT0x00#defineDIGIF_FMT_FOR_MSLEFT0x01#defineDIGIF_FMT_FOR_I2S0x02#defineDIGIF_FMT_FOR_DSP0x03#definePOWER_DEV0x80#definePOWER_CLK0x40#definePOWER_OSC0x20#definePOWER_OUT0x10#definePOWER_DAC0x08#definePOWER_ADC0x04#definePOWER_MIC0x02#definePOWER_LINE0x01#defineSRC_CLKOUT0x80#defineSRC_CLKIN0x40#defineSRC_SR0x3c#defineSRC_BOSR0x02#defineSRC_MO0x01#defineSRC_SR_440x20#defineSRC_SR_320x18#defineSRC_SR_80x0c#defineANAPCTL_STA0xc0#defineANAPCTL_STE0x20#defineANAPCTL_DAC0x10#defineANAPCTL_BYP0x08#defineANAPCTL_INSEL0x04#defineANAPCTL_MICM0x02#defineANAPCTL_MICB0x01#defineDIGPCTL_DACM0x08#defineDIGPCTL_DEEMP0x06#defineDIGPCTL_ADCHP0x01#defineDIGPCTL_DEEMP_DIS0x00#defineDIGPCTL_DEEMP_320x02#defineDIGPCTL_DEEMP_440x04#defineDIGPCRL_DEEMP_480x06#defineDIGIFACT_ACT0x01#defineLT_HP_CTL_LZC0x80#defineRT_HP_CTL_RZC0x80voidAIC23_Write(unsignedshortregaddr,unsignedshortdata){unsignedcharbuf[2];buf[0]=regaddr;buf[1]=data;I2C_Write(I2C_AIC23,2,buf);}voidMcBSP0_InitSlave(){PC55XX_MCSPpMCBSP0=(PC55XX_MCSP)C55XX_MSP0_ADDR;//PuttheMCBSPinresetWrite(pMCBSP0->spcr1,0);Write(pMCBSP0->spcr2,0);//Configframeparameters(32bit,singlephase,nodelay)Write(pMCBSP0->xcr1,XWDLEN1_32);Write(pMCBSP0->xcr2,XPHASE_SINGLE|XDATDLY_0);Write(pMCBSP0->rcr1,RWDLEN1_32);Write(pMCBSP0->rcr2,RPHASE_SINGLE|RDATDLY_0);//Disableintframegenerationandenableslavew/extframesignalsonFSX//Framesyncisactivehigh,dataclockedonrisingedgeofclkxWrite(pMCBSP0->pcr,PCR_CLKXP);//BringtransmitterandreceiveroutofresetSetMask(pMCBSP0->spcr2,SPCR2_XRST);SetMask(pMCBSP0->spcr1,SPCR1_RRST);}voidAIC23_Init(){I2C_Init();//ResettheAIC23andturnonallpowerAIC23_Write(AIC23_RESET_REG,0);AIC23_Write(AIC23_POWER_DOWN_CTL,0);AIC23_Write(AIC23_ANALOG_AUDIO_CTL,ANAPCTL_DAC|ANAPCTL_INSEL); //使用麦克风音源AIC23_Write(AIC23_DIGITAL_AUDIO_CTL,0);//TurnonvolumeforlineinputsAIC23_Write(AIC23_LT_LINE_CTL,0x000);AIC23_Write(AIC23_RT_LINE_CTL,0x000);//ConfiguretheAIC23formastermode,44.1KHzstereo,16bitsamples//Use12MHzUSBclockAIC23_Write(AIC23_DIGITAL_IF_FORMAT,DIGIF_FMT_MS|DIGIF_FMT_IWL_16|DIGIF_FMT_FOR_DSP);AIC23_Write(AIC23_SAMPLE_RATE_CTL,SRC_SR_44|SRC_BOSR|SRC_MO);//TurnonheadphonevolumeanddigitalinterfaceAIC23_Write(AIC23_LT_HP_CTL,0x07f);//0x79forspeakersAIC23_Write(AIC23_RT_HP_CTL,0x07f);AIC23_Write(AIC23_DIG_IF_ACTIVATE,DIGIFACT_ACT);//SetMcBSP0tobetransmitslaveMcBSP0_InitSlave();}voidAIC23_Disable(){PC55XX_MCSPpMCBSP0=(PC55XX_MCSP)C55XX_MSP0_ADDR;I2C_Disable();//PuttheMCBSPinresetWrite(pMCBSP0->spcr1,0);Write(pMCBSP0->spcr2,0);}#defineAUTIODATALEFT0x0d000#defineAUTIODATARIGHT0x17000int*pAudioLeft,*pAudioRight;intwww=0;voidAIC23_Mixer(){PC55XX_MCSPpMCBSP0=(PC55XX_MCSP)C55XX_MSP0_ADDR;intleft,right;int*pl,*pr,nAudioCount;inti; 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)); //等待数据传输完成(*pl)=left=Read(pMCBSP0->

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论