matlab含噪语音信号的分析.docx
大连理工大学实验报告
学院〔系〕:电子信息与电气工程学部专业:电子信息工程班级:
姓名:学号:组:
实验时间:实验室:实验台:
指导教师签字:成绩:
实验四含噪语音信号的分析
一、实验目的
理解并掌握系统的理念
掌握滤波的概念和根本应用方法
提高分析和解决实际问题的能力
二、实验系统的构成
三、实验内容
实验采用自主开发的《信号处理实验平台》,根据给定的系统表达式编制信号频谱分析函数和付立叶反变换函数,在计算机上实现对信号的快速处理。
实验中可选择语音信号库中的任一信号作为系统的输入信号,对其进行频谱分析,观察其频谱图。编程模拟实现高通滤波器、低通滤波器和带通滤波器的功能,对语音信号进行处理,并绘出频响曲线,对处理后的语音信号进行付立叶反变换;把音箱分别接到系统的输入和输出端口,用听觉感受一下经不同的系统处理后的声音变化效果,对产生的失真进行分析和讨论。
四、实验代码及运行结果
界面及局部代码说明:
采用gui制作了实验界面,同时添加了背景图片,视觉鲜果更好。
噪声添加:有两种噪声可以添加:
1、高斯白噪声,代码如下:
globalx;
globalFs;
globaltl;
axes(handles.axes1);
x=awgn(x,15);
plot(tl,x);
title(参加噪声后语音时域波形);
xlabel(时间/s);
gridon;
N=length(x);
df=Fs/N;
w=[0:df:df*(N-1)]-Fs/2;%频率尺度
X=fft(x);
X=fftshift(X);
axes(handles.axes2);
plot(w,abs(X)/max(abs(X)));
axis([-10000,10000,0,1]);
title(参加噪声后语音频谱);
xlabel(频率/Hz);
gridon;
2、某一频率的单音,代码如下:
globalx;
globalFs;
globaltl;
axes(handles.axes1);
size(x);
t=0:1/Fs:(length(x)-1)/Fs;%将所加噪声信号的点数调整到与原始信号相同
Au=0.07;
fn=get(handles.noise_edit2,string);%噪声频率
fn=str2double(fn);
noise=Au*cos(2*pi*fn*t);%噪声为频率
x=x+noise;
plot(tl,x);
title(参加噪声后语音时域波形);
xlabel(时间/s);
gridon;
N=length(x);
df=Fs/N;
w=[0:df:df*(N-1)]-Fs/2;%频率尺度
X=fft(x);
X=fftshift(X);
axes(handles.axes2);
plot(w,abs(X)/max(abs(X)));
axis([-10000,10000,0,1]);
title(参加噪声后语音频谱);
xlabel(频率/Hz);
gridon;
滤涉及时域和频域波形显示:滤波采用巴特沃兹低通滤波器,滤波器截止频率可以通过文本框输入。
代码如下:
globalx;
globalFs;
globaltl;
fp=get(handles.fr_edit1,string);
fp=str2double(fp);
fs=fp+200;
Wp=2*fp/Fs;
Ws=2*fs/Fs;
if(Wp=1)
Wp=0.99;
end
if(Ws=1)
Ws=0.99;
end
[n,Wn]=buttord(Wp,Ws,2,15);
[b,a]=butter(n,Wn,low);
axes(handles.axes3);
%figure
%freqz(b,a);
[h,w]=freqz(b,a);
plot(w/pi*Fs/2,abs(h));
title(滤除噪声后语音时域波形);
xlabel(时间/s);
x=2*filter(b,a,x);%调用函数滤波
axes(handles.axes5);
plot(tl,x);
N=length(x);
df=Fs/N;
w=[0:df:df*(N-1)]-Fs/2;%