matlab實現以不同信噪比在乾淨語音信號中疊加噪聲

  1. 原理公式
    信噪比計算公式:
    信號功率和噪聲功率之比,也是信號幅度和噪聲幅度的平方之比信號功率和噪聲功率之比,也是信號幅度和噪聲幅度的平方之比。
    在這裏插入圖片描述一般情況下我們使用分貝的形式,即單位是dB,其值爲對數信號與噪聲功率比的十倍。
  2. 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完成

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章