📄 spectrumsub.m
字号:
function y_enhanced = spectrumSub(signal_win,frame_len,frame_sum,a,b)
% 此程序要完成带噪语音信号与噪声的谱减,其中需要用到fft和ifft变换。
%
% y_enhanced = spectrumSub(signal_win,frame_len,frame_sum)实现普通的谱减
% 法,此时默认a=2,b=1,谱减公式为: |S(w)| = [|Y(w)|^2 - |N(w)|^2]^(1/2)。
%
% y_enhanced = spectrumSub(signal_win,frame_len,frame_sum,a,b)实现改进的
% 谱减算法,此时系数a,b可调,即: |S(w)| = [|Y(w)|^a - b*|N(w)|^a]^(1/a)。
% fft变换
f = fft(signal_win.').'; %对加窗后的信号进行fft变换,注意fft是对列做变换
f_amplitude = abs(f); %带噪信号的幅度谱
f_phase = angle(f); %带噪信号的相位谱
noise_temp = 0.06 * randn(1,frame_len); %产生长度为256的噪声信号
noise_fft = (fft(noise_temp.')).';
noise_sub = noise_fft(ones(frame_sum,1),:); %将噪声向量扩展为矩阵
noise_amplitude = abs(noise_sub);
% 谱减
if (nargin < 5)
a = 2;
b = 1;
end
f_temp = f_amplitude.^a - b*(noise_amplitude.^a);
f_temp(f_temp<0) = 0;
f_enhanced_amplitude = f_temp.^(1/a);
f_enhanced = f_enhanced_amplitude .* exp(i*f_phase); %得到增强信号的谱
% ifft变换
f_ifft = ifft(f_enhanced.').';
y_enhanced = real(f_ifft);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -