- 原理公式
信噪比计算公式:
信号功率和噪声功率之比,也是信号幅度和噪声幅度的平方之比。
一般情况下我们使用分贝的形式,即单位是dB,其值为对数信号与噪声功率比的十倍。 - matlab实现代码
function [y,noise]=add_noise_model(clean_signal,noise_signal,SNR)
%clean_signal是干净语音信号
%noise_signal是噪声信号
%SNR是信噪比
[x,fs1]=audioread(clean_signal); %读取干净语音信号
[n,fs2]=audioread(noise_signal); %读取噪声信号
if fs2~=fs1
n1=resample(n,fs1,fs2); %对噪声信号以fs1重采样
end
nx=size(x,1); %语音信号长度
noise=n(1:nx);
noise=noise-mean(noise); %噪声信号取均值
signal_power=1/nx*sum(x.*x); %语音信号平均功率
noise_variance=signal_power/(10^(SNR/10)); %按信噪比计算加入噪声的方差
noise=sqrt(noise_variance)/std(noise)*noise; %噪声信号标准差为std(noise),随机数的标准差为sqrt(noise_variance),求出需要加入噪声的随即序列
y=x+noise; %干净语音信号叠加噪声信号
audiowrite("noisy_signal.wav",y,fs1); %以SNR信噪比合成之后的信号写入*.wav文件中
于2019.11.29完成