基于MATLAB有噪声语音信号处理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于MATLAB有噪声语音信号处理
一设计内容
选择一个语音信号作为分析的对象,或录制一段各人自己的语音信号,对其进行频谱分析;利用MATLAB中的随机函数产生噪声加入到语音信号中,模仿语音信号被污染,并对其进行频谱分析;设计FIR数字滤波器,并对被噪声污染的语音信号进行滤波,分析滤波后信号的时域和频域特征,回放语音信号。

二设计的具体实现
1语音信号的时频分析
利用MATLAB中的“wavread”命令来读入(采集)语音信号,将它赋值给某一向量。

再对其进行采样,记住采样频率和采样点数。

下面介绍wavread 函数几种调用格式。

(1)y=wavread(file)
功能说明:读取file所规定的wav文件,返回采样值放在向量y中。

(2)[y,fs,nbits]=wavread(file)
功能说明:采样值放在向量y中,fs表示采样频率(hz),nbits表示采样位数。

接下来,对语音信号kalong.wav进行采样。

其程序如下:
[y,fs,nbits]=wavered (‘kalong’);把语音信号加载入Matlab 仿真软件平台中然后,画出语音信号的时域波形,再对语音信号进行频谱分析。

MATLAB提供了快速傅里叶变换算法FFT计算DFT的函数fft,其调用格式如下:Xk=fft(xn,N)
参数xn为被变换的时域序列向量,N是DFT变换区间长度,当N大于xn 的长度时,fft函数自动在xn后面补零。

当N小于xn的长度时,fft函数计算xn 的前N个元素,忽略其后面的元素。

在本次设计中,我们利用fft对语音信号进行快速傅里叶变换,就可以得到信号的频谱特性。

其程序如下:
[x,fc,nbits]=wavread ('kalong.wav');
sound(x,fc,nbits); %回放语音信号
N=length(x); %求出语音信号的长度
t=0:1/fc:(size(x)-1)/fc;
X=abs(fft(x,N)); %傅里叶变换
X=X(1:N/2);
f=fc/N*(0:1:(N/2)-1);
figure(1)
subplot(2,1,1);
plot(t,x);
title('原始信号波形');xlabel('s');
subplot(2,1,2);
plot(f,abs(X));%可见声音信号频谱在0~4e3范围之内
程序结果如下图:
2
4
68
10
12
-0.2
-0.100.1
0.2原始信号波形
s
020004000
600080001000012000
5001000
1500原始信号频谱
Hz
幅度
2 语音信号加噪与时谱分析
在本次设计中,我们是利用MA TLAB 中加入单频率噪声到语音信号中,模仿语音信
号被污染,并对其频谱分析。

语音信号添加噪声及其频谱分析的主要程序如下: N=length(x)% 计算信号x 的长度
fn=5e3;%在0~4e3范围,会与原始声音信号发生频率混叠,无法用FIR 低通滤波器滤除
t=0:1/fc:(N-1)/fc; % 计算时间范围,样本数除以采样频率 x=x(:,1); x=x';
y=x+ 0.1*sin(fn*2*pi*t);
sound(y,fc,nbits); % 明显听出有尖锐的单频啸叫声
Y=abs(fft(y,N)); % 对原始信号和加噪信号进行fft 变换 Y=Y(1:N/2); %截取前半部分 figure(2);
subplot(2,1,1); plot(t,y);
title('加噪后信号波形');xlabel('s'); subplot(2,1,2); plot(f,abs(Y));
程序结果如下图:
2
4
68
10
12
-0.4
-0.200.2
0.4加噪后信号波形
s
20004000
600080001000012000
05000
10000
15000加噪后信号频谱
Hz
幅度
3 设计FIR 数字滤波器
介绍用窗函数法设计FIR 滤波器的步骤。

如下:
(1)根据对阻带衰减及过渡带的指标要求,选择串窗数类型(矩形窗、三角窗、汉宁窗、哈明窗、凯塞窗等),并估计窗口长度N 。

先按照阻带衰减选择窗函数类型。

原则是在保证阻带衰减满足要求的情况下,尽量选择主瓣的窗函数。

(2)构造希望逼近的频率响应函数。

(3)计算h(n).。

(4)加窗得到设计结果。

接下来,我们根据语音信号的特点给出有关滤波器的技术指标: 低通滤波器的性能指标:
fp=4.2e3;fs=4.8e3;%先设定通带和阻带截止频率fp 和fs
hn=fir1(M ,wc ,window),可以指定窗函数向量window 。

如果缺省window 参数,则fir1默认为哈明窗。

其中可选的窗函数有Rectangular Barlrtt Hamming Hann Blackman 窗,其相应的都有实现函数。

下面我们将给出FIR 数字滤波器的主要程序。

% wp=0.3*pi;ws=0.4*pi;%要想滤除频率为5e3的噪声,必须使通带和阻带截止频率fp 和fs 满足:4e3<fp<fs<5e3;
fp=4.2e3;fs=4.8e3;%先设定通带和阻带截止频率fp 和fs
wp=2*pi*fp/fc;ws=2*pi*fs/fc;%再根据数字频率与频率
w=2*pi*f*T=2*pi*f/fc,得到数字通带和阻带截止频率wp 和ws tr_width=ws-wp;
M=ceil(6.6*pi/tr_width)+1 n=[0:1:M-1]; wc=(ws+wp)/2; hd=ideal_lp(wc,M); w_ham=(hamming(M))'; h=hd.*w_ham
[H,W]=freqz(h,[1]); %绘制频率响应曲线 figure(3);
subplot(221),stem(n,hd);title('理想脉冲相应') axis([0 M-1 -0.3 0.4]);xlabel('n');ylabel('hd(n)') xa=0.*n; hold on
plot(n,xa,'k'); hold off
subplot(222),stem(n,w_ham);title('hamming 窗') axis([0 M-1 -0.3 1.2]);xlabel('n');ylabel('w(n)') subplot(223),stem(n,h);title('实际脉冲相应') axis([0 M-1 -0.3 0.4]);xlabel('n');ylabel('h(n)') hold
plot(n,xa,'k'); hold off
figure(4);plot(W*fc/(2*pi),abs(H));grid 得到得结果如图:
50100
-0.200.2
理想脉冲相应
n h d (n )
050100
0.51
hamming 窗
n
w (n )
50100
-0.20
0.2
实际脉冲相应
n
h (n )
2000
4000
6000
8000
10000
12000
00.2
0.4
0.6
0.8
1
1.2
1.4
4 滤波后语音信号的波形及频谱
下面我们将滤波后语音信号的波形及频谱的程序:
y_fil=fftfilt(h,y); %用设计好的滤波器对y 进行滤波
Y_fil=abs(fft(y_fil,N));Y_fil=Y_fil(1:N/2); %计算频谱取前一半 sound(y_fil,fc,nbits); % 播放消噪之后的声音信号 figure(5);
subplot(2,1,1);plot(t,y_fil);grid on;
title('经过滤波后时域信号');xlabel('s'); subplot(2,1,2);plot(f,Y_fil);grid on;
title('经过滤波后信号频谱'); xlabel('Hz');ylabel('幅度'); 得到如图结果:
2
4
6810
12
-0.2
-0.100.1
0.2经过滤波后时域信号
s
020004000
600080001000012000
5001000
1500经过滤波后信号频谱
Hz
幅度
三 小结
“基于MATLAB 的有噪声语音信号处理”是希望将数字信号处理技术应用于某一实际领域,这里就是指对语音及加噪处理。

本设计圆满的完成了对加噪声语音信号的读取与打开,与设计内容的要求十分相符;也较好的完成了对原始语音信号和加噪声后的语音信号的频谱分析,通过fft 变换,得出了语音信号的频谱图;在滤波这一部分,主要用窗函数法设计FIR 滤波器,实现了预期的滤波效果。

设计的特色在于它将语音信号看作一个向量,于是就把语音数字化了。

那么,
就可以完全利用数字信号处理的知识来解决语音及加噪处理问题。

我们可以像给一般信号做频谱分析一样,来对语音信号做频谱分析,也可以较容易的用数字滤波器来对语音进行滤波处理。

通过比较加噪前后,语音的频谱和语音回放,能明显的感觉到加入噪声后回放的声音与原始的语音信号有很大的不同。

相关文档
最新文档