用于音频信号去噪的谱相减和陷波滤波的比较(Matlab代码实现)

简介: 用于音频信号去噪的谱相减和陷波滤波的比较(Matlab代码实现)

💥1 概述

谱相减减少背景(加性)噪声影响的最流行方法之一是谱相减。背景噪声是降低录音中语音质量和清晰度的最常见因素。该去噪算法旨在降低噪声水平而不影响语音信号质量。我们需要设计陷波参数均衡器,有选择地滤除噪声发生的频率。由于陷波滤波器也可以去除上述频率下的语音信号的分量,我们将应用峰值滤波器来在陷波滤波器的输出处增强语音信号。

在Matlab上实现。执行时生成并播放去噪信号。


📚2 运行结果

 

🎉3 参考文献

[1]向瑾,翟成瑞,杨卫,孟令军,张文栋.基于小波变换的音频信号去噪[J].微计算机信息,2007(35):85-86.

👨‍💻4 Matlab代码

主函数部分代码:

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
相关文章
|
1月前
|
数据可视化 数据挖掘
MATLAB - 信号分析器(signalanalyzer-app)
MATLAB - 信号分析器(signalanalyzer-app)
96 1
|
2月前
|
算法
基于kalman滤波的UAV三维轨迹跟踪算法matlab仿真
本文介绍了一种使用卡尔曼滤波(Kalman Filter)对无人飞行器(UAV)在三维空间中的运动轨迹进行预测和估计的方法。该方法通过状态预测和观测更新两个关键步骤,实时估计UAV的位置和速度,进而生成三维轨迹。在MATLAB 2022a环境下验证了算法的有效性(参见附图)。核心程序实现了状态估计和误差协方差矩阵的更新,并通过调整参数优化滤波效果。该算法有助于提高轨迹跟踪精度和稳定性,适用于多种应用场景,例如航拍和物流运输等领域。
基于高通滤波器的ECG信号滤波及心率统计matlab仿真
**摘要:** 使用MATLAB2022a,实施高通滤波对ECG信号预处理,消除基线漂移,随后分析心率。系统仿真展示效果,核心代码涉及IIR HPF设计,如二阶滤波器的差分方程。通过滤波后的信号,检测R波计算RR间期,从而得到心率。滤波与R波检测是心电生理研究的关键步骤,平衡滤波性能与计算资源是设计挑战。
|
3月前
|
机器学习/深度学习 算法 语音技术
基于语音信号MFCC特征提取和GRNN神经网络的人员身份检测算法matlab仿真
**语音识别算法概览** MATLAB2022a中实现,结合MFCC与GRNN技术进行说话人身份检测。MFCC利用人耳感知特性提取语音频谱特征,GRNN作为非线性映射工具,擅长序列学习,确保高效识别。预加重、分帧、加窗、FFT、滤波器组、IDCT构成MFCC步骤,GRNN以其快速学习与鲁棒性处理不稳定数据。适用于多种领域。
|
4月前
|
数据可视化 数据库
matlab中使用VMD(变分模态分解)对信号去噪
matlab中使用VMD(变分模态分解)对信号去噪
matlab中使用VMD(变分模态分解)对信号去噪
|
4月前
|
数据安全/隐私保护
matlab 曲线光滑,去毛刺,去离群值,数据滤波,高通滤波,低通滤波,带通滤波,带阻滤波
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
4月前
|
数据可视化
matlab使用经验模式分解emd 对信号进行去噪
matlab使用经验模式分解emd 对信号进行去噪
|
4月前
matlab使用移动平均滤波器、重采样和Hampel过滤器进行信号平滑处理
matlab使用移动平均滤波器、重采样和Hampel过滤器进行信号平滑处理
|
1月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
105 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
1月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
76 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现