用于音频信号去噪的谱相减和陷波滤波的比较(Matlab代码实现)
👨🎓个人主页:研学社的博客
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
谱相减减少背景(加性)噪声影响的最流行方法之一是谱相减。背景噪声是降低录音中语音质量和清晰度的最常见因素。该去噪算法旨在降低噪声水平而不影响语音信号质量。我们需要设计陷波参数均衡器,有选择地滤除噪声发生的频率。由于陷波滤波器也可以去除上述频率下的语音信号的分量,我们将应用峰值滤波器来在陷波滤波器的输出处增强语音信号。在Matlab上实现。执行时生成并播放去噪信号。
📚2 运行结果
部分代码:
fprintf('--- Audio Signal Denoising using Spectral Subtraction ---\n\n');
%load noise sound example
[y,Fe]=audioread('sample.wav');
x=y(100000:end,1).'; %remove the beginning of the sample
Nx=length(x);
%algorithm parameters
apriori_SNR=1; %select 0 for aposteriori SNR estimation and 1 for apriori
alpha=0.05; %only used if apriori_SNR=1
beta1=0.5;
beta2=1;
lambda=3;
%STFT parameters
NFFT=1024;
window_length=round(0.031*Fe);
window=hamming(window_length);
window = window(:);
overlap=floor(0.45*window_length); %number of windows samples without overlapping
%Signal parameters
t_min=0.4; %interval for learning the noise
t_max=1.00; %spectrum (in second)
%construct spectrogram
[S,F,T] = spectrogram(x+i*eps,window,window_length-overlap,NFFT,Fe); %put a short imaginary part to obtain two-sided spectrogram
[Nf,Nw]=size(S);
%Noisy spectrum extraction
t_index=find(T>t_min & T<t_max);
absS_noise=abs(S(:,t_index)).^2;
noise_spectrum=mean(absS_noise,2); %average spectrum of the noise
noise_specgram=repmat(noise_spectrum,1,Nw);
%Estimate SNR
absS=abs(S).^2;
SNR_est=max((absS./noise_specgram)-1,0);
if apriori_SNR==1
SNR_est=filter((1-alpha),[1 -alpha],SNR_est);
end
%Compute Attenuation Map
an_lk=max((1-lambda*((1./(SNR_est+1)).^beta1)).^beta2,0);
STFT=an_lk.*S;
%Compute Inverse STFT
ind=mod((1:window_length)-1,Nf)+1;
output_signal=zeros((Nw-1)*overlap+window_length,1);
for indice=1:Nw %Overlapp add technique
left_index=((indice-1)*overlap) ;
index=left_index+[1:window_length];
temp_ifft=real(ifft(STFT(:,indice),NFFT));
output_signal(index)= output_signal(index)+temp_ifft(ind).*window;
end
🌈3 Matlab代码实现
🎉4 参考文献
部分理论来源于网络,如有侵权请联系删除。
[1]向瑾,翟成瑞,杨卫,孟令军,张文栋.基于小波变换的音频信号去噪[J].微计算机信息,2007(35):85-86.
相关文章
- 倒立摆matlab仿真程序_倒立摆状态空间建模
- matlab画三维函数图像代码_excel绘制三维图形
- matlab griddata nan,请教Matlab的griddata的用法
- MATLAB语音信号处理「建议收藏」
- Matlab画图线型、符号及颜色设置
- matlab支持向量回归,支持向量回归 MATLAB代码
- matlab interp1db,matlab – Matlab interp1图出现数据偏移 – 堆栈内存溢出
- MATLAB函数fir1「建议收藏」
- IEEE follow机器学习遥感图像处理课程讲义及Matlab代码分享
- 低通滤波器matlab代码_matlab设计fir低通滤波器
- matlab中产生随机数的函数
- MATLAB好玩的代码_Matlab代码
- 遗传算法经典实例matlab代码_遗传算法编码方式
- 香农编码的matlab实现总结_matlab简单代码实例
- matlab将txt数据分类,MATLAB读取txt文件,txt里面有字符串和数值两种类型
- matlab 加权回归估计_Matlab:地理加权回归基本操作「建议收藏」
- MATLAB循环_matlab如何循环计算
- matlab 汽车振动,基于MatLab的车辆振动响应幅频特性分析
- MATLAB随机波动率SV、GARCH用MCMC马尔可夫链蒙特卡罗方法分析汇率时间序列|附代码数据
- matlab代码实现四阶龙格库塔求解微分方程
- Matlab马尔可夫链蒙特卡罗法(MCMC)估计随机波动率(SV,Stochastic Volatility) 模型|附代码数据
- matlab对国内生产总值(GDP)建立马尔可夫链模型(MC)并可视化|附代码数据
- 人工智能算法:Matlab遗传算法工具箱使用方法
- 【MATLAB】数据类型 ( 执行代码 | 清空命令 | 注释 | 数字 | 字符 | 字符串 )
- MATLAB中的马尔可夫区制转移(Markov regime switching)模型|附代码数据
- MATLAB冒号:运算符的用法