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

  • 2
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值