基于TMS320VC5509DSP的语音信号的FIR滤波器课程设计报告书Word格式.docx
《基于TMS320VC5509DSP的语音信号的FIR滤波器课程设计报告书Word格式.docx》由会员分享,可在线阅读,更多相关《基于TMS320VC5509DSP的语音信号的FIR滤波器课程设计报告书Word格式.docx(27页珍藏版)》请在冰豆网上搜索。
学位论文使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权 大学可以将本学位论文的全部或部分容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
日期:
导师签名:
日期:
指导教师评阅书
指导教师评价:
一、撰写(设计)过程
1、学生在论文(设计)过程中的治学态度、工作精神
□优□良□中□及格□不及格
2、学生掌握专业知识、技能的扎实程度
3、学生综合运用所学知识和专业技能分析和解决问题的能力
4、研究方法的科学性;
技术线路的可行性;
设计方案的合理性
5、完成毕业论文(设计)期间的出勤情况
二、论文(设计)质量
1、论文(设计)的整体结构是否符合撰写规?
2、是否完成指定的论文(设计)任务(包括装订及附件)?
三、论文(设计)水平
1、论文(设计)的理论意义或对解决实际问题的指导意义
2、论文的观念是否有新意?
设计是否有创意?
3、论文(设计说明书)所体现的整体水平
建议成绩:
(在所选等级前的□画“√”)
指导教师:
(签名)单位:
(盖章)
年月日
评阅教师评阅书
评阅教师评价:
一、论文(设计)质量
二、论文(设计)水平
评阅教师:
教研室(或答辩小组)及教学系意见
教研室(或答辩小组)评价:
一、答辩过程
1、毕业论文(设计)的基本要点和见解的叙述情况
2、对答辩问题的反应、理解、表达情况
3、学生答辩过程中的精神状态
评定成绩:
教研室主任(或答辩小组组长):
(签名)
教学系意见:
系主任:
基于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=30
w[n]=0.42+0.5cos(2πn/30)+0.8cos(4πn/24)
滤波器脉冲响应为:
h[n]=h1[n]w[n]|n|<
=12
h[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]
开始
初始化语音缓冲区和工作变量
等待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)%绘制原始语音信号的频率响应图
频率响应图'
)
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频谱图
原始语音信号FFT频谱'
subplot(2,1,2);
plot(f,abs(y2));
%绘制原始语音信号的频谱图
原始语音信号频谱'
%加噪声
k=1:
1:
n;
%定义k值,噪声与原始语音长度一致
c1=100000*sin(2*pi*5000*k);
%噪声信号的函数
z=x'
+c1;
%噪音与原始信号叠加
wavwrite(z,8000,16,'
\DocumentsandSettings\Owner\桌面\e2'
%得到含噪语音
s=length(c1);
y3=fft(z,s);
%对叠加信号进行频谱变换
y4=fftshift(y3);
%对频谱图平移
fs/s:
fs*(s-1)/s;
figure(4)
plot(z)%做原始语音信号的时域图形
加噪语音信号'
figure(5)
plot(f,abs(y4));
%绘出加噪语音频谱图
axis([080000100]);
含噪语音信号的频谱'
figure(6)
plot(f,abs(y2))%做原始语音信号的FFT频谱图
plot(f,abs(y4))%做加噪语音信号的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.0005
Audio滤波程序如下:
#include"
myapp.h"
ICETEK-VC5509-EDU.h"
scancode.h"
#include<
math.h>
#defineFIRNUMBER31
#defineSIGNAL1F2900
#defineSIGNAL2F3300
#defineSAMPLEF8000
#definePI3.1415926
floatInputWave();
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.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滤波程序
5509.h"
util.h"
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_RZC0x80
voidAIC23_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;
//PuttheMCBSPinreset
Write(pMCBSP0->
spcr1,0);
spcr2,0);
//Configframeparameters(32bit,singlephase,nodelay)
xcr1,XWDLEN1_32);
xcr2,XPHASE_SINGLE|XDATDLY_0);
rcr1,RWDLEN1_32);
rcr2,RPHASE_SINGLE|RDATDLY_0);
//Disableintframegenerationandenableslavew/extframesignalsonFSX
//Framesyncisactivehigh,dataclockedonrisingedgeofclkx
pcr,PCR_CLKXP);
//Bringtransmitterandreceiveroutofreset
SetMask(pMCBSP0->
spcr2,SPCR2_XRST);
spcr