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完成

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