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

📄 spectrumsub.m

📁 基于matlab环境
💻 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 + -