数字信号处理实验报告含噪语音信号的分析.docx
《数字信号处理实验报告含噪语音信号的分析.docx》由会员分享,可在线阅读,更多相关《数字信号处理实验报告含噪语音信号的分析.docx(12页珍藏版)》请在冰点文库上搜索。
数字信号处理实验报告含噪语音信号的分析
大连理工大学实验报告
学院(系):
专业:
班级:
姓名:
学号:
组:
___
实验时间:
实验室:
实验台:
指导教师签字:
成绩:
实验五含噪语音信号的分析
一、实验目的和要求二、实验原理和内容
三、实验结果与分析
第一部分:
产生含噪的语音信号
首先分析原始的语音信号的波形和频谱:
[x,fs,bits]=wavread('009.wav');
%sound(x,fs,bits);
X=fft(x);
t1=(0:
length(x)-1)*fs/length(x)-fs/2;
figure
(1);
subplot(2,1,1);
plot(x);
axis([0,400000,-2,2]);
title('原始语音信号时域波形');
subplot(2,1,2);
plot(t1,fftshift(abs(X)));title('原始语音信号的频谱');
%添加噪声
N=length(x);
noise=0.3*randn(size(x));
x1=x+noise;
X1=fft(x1);
t2=(0:
length(x1)-1)*fs/length(x1)-fs/2;
%sound(x1,fs,bits);
figure
(2);
subplot(2,1,1);
plot(x1);title('加噪语音信号时域波形');
subplot(2,1,2);
plot(t2,fftshift(abs(X1)));title('加噪语音信号的频谱');
利用MATLAB命令生成含噪语音信号:
wavwrite(x1,fs,16,'x1.wav');
将生成的x1.wav文件作为后续的GUI图形界面中用于分析的语音信号。
第二部分:
GUI的设计
首先搭建含有各个模块的界面:
利用callback在.m文件中对各个模块进行代码的编辑(下面列出主要部分):
1、输入音频信号部分:
functiontext1_Callback(hObject,eventdata,handles)
%hObjecthandletotext1(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%读入一段音频文件
[filename,filepath]=uigetfile('.wav','选择音频文件');
if(filename==0)
return;
end
audeofile=strcat(filepath,filename);
globalfs;
globalyt;
[handles.tdata,fs,handles.NBITS]=wavread(audeofile);
%绘制时域波形图
yt=handles.tdata;
t=[0:
1/fs:
(length(handles.tdata)-1)/fs];%信号的时域长度
subplot(handles.axes1);
plot(t,handles.tdata);
title('输入f1的波形图');
%绘制频谱图
N=length(t);
fftdata=fft(handles.tdata,N);
fdata=abs(fftdata);
df=fs/N;
f=[0:
df:
df*(N-1)]-fs/2;%求频率
subplot(handles.axes3);
plot(f,fftshift(fdata));
title('输入F1(w)的频谱');
2、设置低通部分:
functionpopupmenu2_Callback(hObject,eventdata,handles)
%hObjecthandletopopupmenu2(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%Hints:
contents=cellstr(get(hObject,'String'))returnspopupmenu2contentsascellarray
%contents{get(hObject,'Value')}returnsselecteditemfrompopupmenu2
fc=str2double(get(handles.edit1,'String'));
globalfs;
globalbz;
globalaz;
wp=2*fc/fs;
ws=2*1.2*fc/fs;
ap=3;as=18;
[N,wn]=buttord(wp,ws,ap,as);
[bz,az]=butter(N,wn);
[H,W]=freqz(bz,az);
subplot(handles.axes4)
plot(W,20*log10(abs(H)));
xlabel('频率/弧度');
ylabel('对数幅频响应/dB');
axis([00.3*pi-5010]);
title('低通滤波器的频率响应');
3、输出音频信号部分:
functiontext3_Callback(hObject,eventdata,handles)
%hObjecthandletotext3(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
globalfs;
globalbz;
globalaz;
globalyt;
mm=filter(bz,az,yt);
t=[0:
1/fs:
(length(yt)-1)/fs];%信号的时域长度
subplot(handles.axes2);
plot(t,mm);
%axis([01001]);
title('输出f2的波形图');
%绘制频谱图
N=length(t);
fftdata=fft(mm,N);
fdata=abs(fftdata);
df=fs/N;
f=[0:
df:
df*(N-1)]-fs/2;%求频率
subplot(handles.axes5);
plot(f,fftshift(fdata));
title('输出F2(w)的频谱');
第三部分GUI界面的操作
首先是运行出的GUI界面:
然后选择音频文件:
添加了音频文件后的波形和频谱:
观察频谱,取截止频率为1000Hz,选择低通滤波器:
得到滤波器的频率响应(单位为db):
最后点击输出音频信号,得到滤波后的频谱和时域波形:
对比GUI界面滤波后的信号,该信号与原始语音信号基本相似,噪声的影响已经很小。
四、实验建议与体会
做完本实验遇到了以下问题:
首先是关于设置低通滤波器,由于只知道截止频率,而不知道阻带衰减和通带衰减,所以只能人为的设置,阻带截止频率为通带的1.2倍,通带衰减为3db,阻带衰减为18db,这里会存在误差。
然后是关于滤波,运用mm=filter(bz,az,yt)函数,但是输入语音信号在不同的函数中不能直接拿来用,所以就将输入的语音信号定义为全局变量globalyt,从而用在输出音频信号的函数中。
同时为了保证取样频率fs在各函数中都能被利用,所以也设置globalfs作为全局变量。
作为本学期最后一个数字信号处理实验,经过该实验,我的MATLAB编程能力又有了近一步的提升。
最后感谢老师本学期的指导。
THANKS!
!
!
致力为企业和个人提供合同协议,策划案计划书,学习课件等等
打造全网一站式需求
欢迎您的下载,资料仅供参考