谱减法的语音信号增强
wavplay(speech,fs); % 输出增强音频
2、程序运行结果
由上面几个图的对比可知,经处理后去噪效果明显,较好地抑制了噪声,这从彩色的语谱图中也可清晰的观察到。
五、实验总结
axis([1,(n-n1)*frame+n,min(xs),max(xs)]);
subplot(212);
specgram(xs,fs,1024,n,n1);%原始信号的语谱图
title('原始信号语谱图');
figure(2);
subplot(211);plot(x);
title('加噪语音信号'); %加噪的语音信号
设置阈值为信号开始阶段的能量平均值;
进行谱减运算,得到估计出的语音信号功率谱;
插入相位谱,计算出语音谱;
进行IFFT变换,得到还原的语音帧;
对语音信号进行去加重处理,得到最终信号。
四、Matlab程序及实验结果分析
1、源代码
clear;clc;
[xx,fs]=wavread('F:\111.wav'); % 读入语音信号
汉明(Hamming)窗定义:
3、谱减法简介
谱相减方法是基于人的感觉特性,即语音信号的短时幅度比短时相位更容易对人的听觉系统产生影响,从而对语音短时幅度谱进行估计,适用于受加性噪声污染的语音。
谱减法的基本原理:
图1 谱相减法原理图
图中 为加窗后的带噪信号, 为的噪声信号功率谱, 为增强后的语音信号。
speech(n2-n1+1:n2)=(speech(n2-n1+1:n2)+out(i,1:n1)')/2;
n2=n2+n-n1;
speech=[speech;out(i,n1+1:end)'];
end
figure(1);
subplot(211);plot(xs);
title('原始语音信号');%原始语音信号
axis([1,(n-n1)*frame+n,min(speech),max(speech)]);
subplot(212);
specgram(speech,fs,பைடு நூலகம்024,n,n1);%增强信号的语谱图
title('增强信号语谱图');
wavplay(xx,fs);% 输出原始音频
wavplay(x,fs); % 输出加噪音频
%求阈值,信号开始阶段的能量平均值
for i=1:frame
ene(i,:)=ene(i,:)-threshold; % 减谱
ene(i,find(ene(i,:)<0))=0;
% 将估计能量小于0的部分赋值为0
end
for i=1:frame
ene(i,:)=sqrt(ene(i,:)); %开根号
Sw=ene(i,:).*exp(j*ang(i,:)); %求频域函数Sw
out(i,:)=real(ifft(Sw))./hamming(n)'; %去窗求逆fft
end
speech=out(1,:)';% 对out求导,以便于原信号比较
n2=n;
for i=2:frame%将一系列的帧组合还原
axis([1,(n-n1)*frame+n,min(x),max(x)]);
subplot(212);
specgram(x,fs,1024,n,n1);%加噪信号的语谱图
title('加噪信号语谱图');
figure(3);
subplot(211);plot(speech);
title('增强的语音信号');%增强的语音信号
由于人耳对语音相位不敏感,所以用原始含噪语音的相位代替估计语音的相位。谱减法实现的几条公式如下:
(1)
(2)
(3)
由式(1)得到增强后的语音信号的功率谱;然后利用原始含噪语音的相位 代替增强后语音的相位,恢复出增强后的语音信号 。
由公式(1)可看出,估计值 不能保证是非负的,这是因为在估计噪声时存在误差,当估计噪声平均功率大于某帧带噪语音功率时,该帧得出的估计值 就会出现为负的情况,这些负值我们直接给它们置零。
y1=x((i-1)*(n-n1)+1:(i-1)*(n-n1)+n).*hamming(n);
%每一帧对应的语音信号
fy=fft(y1,n); %求fft
ene(i,:)=abs(fy).^2; %求能量energe
ang(i,:)=angle(fy); % 求复角度angle
end
threshold=sum(sum(ene(2:5,:)))/(4*n);
对取出的语音帧要经过加窗处理,即用一定的窗函数 与信号相乘,从而形成加窗语音。加窗的主要作用在于减少由分帧处理带来的频谱泄露,这是因为,分帧是对语音信号的突然截断,相当于语音信号的频谱与矩形窗函数频谱的周期卷积。由于矩形窗频谱的旁瓣较高,信号的频谱会产生“拖尾”,即频谱泄露。为此,可采用汉明窗,因为汉明窗旁瓣最低,可以有效地克服泄露现象,具有更平滑的低通特性,得到的频谱比较平滑。
图2 语音激活检测框图
6、实验的流程图:
图3 实验流程图
用wavread函数读入一个语音信号,然后取其单声道信号得到纯净的语音信号;
用rand函数加入噪声,得到加噪的语音噪声;
对加噪的语音信号进行分帧,帧长取20ms,每帧的重合长度设置为帧长的2/3,用floor函数求帧数;
对分帧信号加上汉明窗,并求得信号的fft频谱,进而求得信号能量和fft的复角度,该角度用于后面增强语音信号的重构;
2、语音信号的处理方法
根据语音信号的特点,可以将平稳过程中的处理方法和理论引入到语音信号的短时处理当中,将语音信号划分为很多短时的语音段,每个短时的语音段称为一个分析帧。这样,对每一帧语音信号处理就相当于对特征固定的持续信号进行处理。帧既可以是连续的,也可以采用交叠分帧,一般帧长取10~30ms。取数据时,前一帧和后一帧的交迭部分称为帧移,帧移与帧长之比一般取为0~1/2。
xs= xx(:,1); %取单声道
N=length(xs); %求信号长度
x=xs+0.01*rand(N,1);%加噪
n=fs*20*10^-3; % 每帧长取20ms
n1=ceil(1*n/3); %每两帧重合的长度为1/3
frame=floor((N-n)/(n-n1)); %求帧数
for i=1:frame
4、“音乐噪声”的产生
由于在谱减法处理过程中,是以无声期间统计平均的噪声方差代替当前分析帧各频率点的噪声频率分量,而噪声频谱具有高斯分布,即其幅度随机变化范围很宽,因此相减时,若该帧某频率点噪声分量较大,就会有很大一部分保留,具体来讲,由谱相减所产生的噪声称为残余噪声,与语音信号不相关,是由具有随机频率和幅度的窄带信号所组成。在频谱上呈现随机出现的尖峰,便产生了间歇短暂的突发声调,在听觉上形成有节奏性起伏的类似音乐噪声的残留噪声。
设计性实验4语音信号增强
一、实验目的
1、了解语音信号噪声抑制的仿真方法及原理;
2、利用谱想减法抑制语音中的噪声;
二、实验要求
1、仿真合成一段带噪语音;
2、使用谱相减法对带噪语音进行增强;
三、实验原理
1、语音信号特点:
语音信号是一种时变的非平稳的随机信号,但是人类的发声系统的生理结构的变化速度是有一定限度的,在一段时间内(10~30ms)人的声带和声道形状具有相对稳定性,可以认为其特性是不变的,因而语音的短时谱分析也有相对稳定性,在语音增强中可以利用短时谱的这种稳定性。
5、语音端点检测技术
在谱减法中噪声功率谱的估计至关重要,如果噪声估计偏差较大的话,将毫无疑问的影响语音增强质量。语音端点检测是一种噪声估计的算法,目的就是从连续记录的带噪语音信号中分离出我们真正感兴趣的语音信号。
语音激活检测指从一段包含语音的信号中确定出语音的起始点和终点,又称端点检测。
语音激活检测是基于语音帧来进行的,语音帧的长度在10~30ms不等。语音活性检测的方法可以综述为:从输入信号中提取一个或一系列的对比特征参数,然后将其和一个或一系列的门限阈值进行比较,如图3-2所示。如果超过门限则表示当前为有音段,否则就表示当前为无音段。而门限通常是根据无音段时语音特征确定的。