- 原理公式
信噪比計算公式:
信號功率和噪聲功率之比,也是信號幅度和噪聲幅度的平方之比。
一般情況下我們使用分貝的形式,即單位是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完成