⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 voiceenhance.m

📁 基于matlab环境
💻 M
字号:
%=============================语音信号增强=================================%
function VoiceEnhance
% 利用谱减法实现语音信号增强
%  This program is completed in the hope that it can be used for the voice 
%  signal enhancing. The main process includes adding noise to the original
%  wave,enframing the noisy wave,adding hamming window,spectrum subtracting
%  and generating the enhanced wave.

% 读取原始语音信号
FileName = 'test.wav';
[orgSignal,Fs,bits] = wavread(FileName);

% 添加噪声
signal_len = length(orgSignal);
noise = 0.06 * randn(1,signal_len).';            %生成高斯序列
noisyWave = orgSignal + noise;
WaveFile1 = 'noisyWave.wav';
wavwrite(noisyWave,Fs,bits,WaveFile1);           %将得到的带噪语音信号写成.wav文件

% 分帧
frame_len = 256;                                             %帧长
frame_step = 128;                                            %帧重叠的长度
frame_sum = ceil((signal_len-frame_len)/frame_step) + 1;     %分帧的数量,注意最后一帧长度不够时也算一帧

signal_enframed = zeros(frame_sum,frame_len);                %用一个二维矩阵保存
indf = frame_step*(0:(frame_sum-1)).';
inds = (1:frame_len);
if signal_len == frame_len + (frame_sum-1)*(frame_len-frame_step)
	signal_enframed(:) = noisyWave(indf(:,ones(1,frame_len))+inds(ones(frame_sum,1),:));
else
	zero_sum = frame_len + (frame_sum-1)*(frame_len-frame_step) - signal_len;
	signal_temp = [noisyWave;zeros(zero_sum,1)];
   	signal_enframed(:) = signal_temp(indf(:,ones(1,frame_len))+inds(ones(frame_sum,1),:));
end

% 加hamming窗
win = hamming(frame_len).';
signal_win = signal_enframed .* win(ones(frame_sum,1),:);

% 谱减
y_enhanced = spectrumSub(signal_win,frame_len,frame_sum);

% 各帧信号重新组合
y_enhanced(2:frame_sum,1:frame_step) = y_enhanced(2:frame_sum,1:frame_step) + y_enhanced(1:frame_sum-1,frame_step+1:frame_len);   %帧重叠组合
temp1 = [y_enhanced(frame_sum,frame_step+1:frame_len),zeros(1,frame_step)];
temp2 = cat(1,y_enhanced,temp1);
temp3 = temp2(:,1:frame_step);
temp4 = reshape(temp3.',signal_len+zero_sum,1);
signal_enhanced = temp4(1:signal_len,:);

% 输出
WaveFile2 = 'E:\enhanced_signal.wav';
wavwrite(signal_enhanced,Fs,bits,WaveFile2);

%-----做出处理前后图形,给出直观对比 
subplot(3,1,1) 
plot(orgSignal); 
title('Original Voice (n=0.06)'); 

subplot(3,1,2) 
plot(noisyWave); 
axis([0 90000 -1 1])
title('Noise Added'); 

subplot(3,1,3) 
plot(signal_enhanced); 
axis([0 90000 -1 1])
title('Enhanced Voice');
end
%=========================================================================%

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -