Matlab信号上叠加噪声和信噪比的计算
http://www.ilovematlab.cn/thread-54155-1-1.html
(出处: MATLAB中文论坛)

在信号处理中经常需要把噪声叠加到信号上去,在叠加噪声时往往需要满足一定的信噪比,这样产生二个问题,其一噪声是否按指定的信噪比叠加,其二怎么样检验带噪信号中信噪比满足指定的信噪比。
在MATLAB中可以用randn产生均值为0方差为1的正态分布白噪声,但在任意长度下x=randn(1,N),x不一定是均值为0方差为1(有些小小的偏差),这样对后续的计算会产生影响。在这里提供3个函数用于按一定的信噪比把噪声叠加到信号上去,同时可检验带噪信号中信噪比。
1,把白噪声叠加到信号上去:
function [Y,NOISE] = noisegen(X,SNR)
% noisegen add white Gaussian noise to a signal.
% [Y, NOISE] = NOISEGEN(X,SNR) adds white Gaussian NOISE to X.  The SNR is in dB.
NOISE=randn(size(X));
NOISE=NOISE-mean(NOISE);
signal_power = 1/length(X)*sum(X.*X);
noise_variance = signal_power / ( 10^(SNR/10) );
NOISE=sqrt(noise_variance)/std(NOISE)*NOISE;
Y=X+NOISE;
其中X是纯信号,SNR是要求的信噪比,Y是带噪信号,NOISE是叠加在信号上的噪声。

2,把指定的噪声叠加到信号上去
有标准噪声库NOISEX-92,其中带有白噪声、办公室噪声、工厂噪声、汽车噪声、坦克噪声等等,在信号处理中往往需要把库中的噪声叠加到信号中去,而噪声的采样频率与纯信号的采样频率往往不一致,需要采样频率的校准。
function [Y,NOISE] = add_noisem(X,filepath_name,SNR,fs)
% add_noisem add determinated noise to a signal.
% X is signal, and its sample frequency is fs;
% filepath_name is NOISE's path and name, and the SNR is signal to noise ratio in dB.
[wavin,fs1,nbits]=wavread(filepath_name);
if fs1~=fs
    wavin1=resample(wavin,fs,fs1);
end
nx=size(X,1);
NOISE=wavin1(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;
Y=X+NOISE;
其中X是纯信号,filepath_name是指定噪声文件(.wav)的路径和文件名,SNR是要求的信噪比,fs是信号X的采样频率,Y是带噪信号,NOISE是叠加在信号上的噪声。

3,检验带噪信号的信噪比
信噪比的定义为
           信号能量              (纯信号)^2
SNR=-----------------=--------------------------
           噪声能量        (带噪信号-纯信号)^2

function snr=SNR_singlech(I,In)
% 计算信噪比函数
% I :original signal
% In:noisy signal(ie. original signal + noise signal)
snr=0;
Ps=sum(sum((I-mean(mean(I))).^2));%signal power
Pn=sum(sum((I-In).^2));           %noise power
snr=10*log10(Ps/Pn);
其中I是纯信号,In是带噪信号,snr是信噪比

以下给出调用上函数的例子可作参考:
例一
clear all; clc; close all;
[filename,pathname]=uigetfile('*.wav','请选择语音文件:');
[X,fs]=wavread([pathname filename]);
[Y,NOISE] = noisegen(X,10);
subplot 311; plot(X);
subplot 312; plot(NOISE);
subplot 313; plot(Y);
mn=mean(NOISE)
snr=SNR_singlech(X,Y)

例二
clear all; clc; close all;
[filename,pathname]=uigetfile('*.wav','请选择语音文件:');
[filename1,pathname1]=uigetfile('*.wav','请选择噪声文件:');
filepath_name=[pathname1 filename1];
[X,fs]=wavread([pathname filename]);
[Y,NOISE] = add_noisem(X,filepath_name,10,fs);
subplot 311; plot(X);
subplot 312; plot(NOISE);
subplot 313; plot(Y);
mn=mean(NOISE)
snr=SNR_singlech(X,Y)

如何给信号加噪声,matlab相关推荐

  1. 正弦信号加多普勒matlab,基于Matlab测速仪设计(多普勒效应回波信号处理).doc

    PAGE PAGE 1 "数字信号处理课程设计"任务书 题目5 基于Matlab测速仪设计(多普勒效应回波信号处理) 主要 内容 利用离散付里叶变换进行频谱分析,设计数字滤波器组, ...

  2. matlab中对一个信号加指定信噪比的噪声

    dt = 0.001; % T = 1; %仿真时间 t = 0:dt:T; %时间向量 x = sin(10*2*pi*t); subplot(2,1,1); plot(t, x) y = awgn ...

  3. MATLAB中语音加噪,语音信号加噪和降噪处理

    语音信号加噪和降噪处理 所属分类:matlab例程 开发工具:matlab 文件大小:596KB 下载次数:32 上传日期:2018-04-17 18:23:30 上 传 者:15738512336 ...

  4. 【滤波器】基于汉宁窗FIR滤波器实现语音信号加噪去噪含Matlab源码

    1 简介 结合数字滤波器的理论基础和设计方法,在MATLAB程序语言环境下,设计出有限长单位脉冲响应(FIR)数字滤波器,同时利用GUI界面设计FIR数字滤波器人机交互平台,该系统平台界面直观.操作简 ...

  5. matlab复杂噪声产生实验报告,基于小波信号的噪声消除matlab实验报告.docx

    基于小波信号的噪声消除matlab实验报告.docx 南京师范大学物理科学与技术学院医用电子学论文论文名称:基于小波变换的心电信号噪声消除院系:物科院专业:电路与系统姓名:聂梦雅学号:12100204 ...

  6. matlab小波分析信号消除噪声函数,小波分析的语音信号噪声消除方法

    基于小波分析的语音信号噪声消除方法 及MATLAB 实现 一. 实验内容 噪声污染是我们生产.生活中普遍存在的问题.在某些环境中,噪声的影响给人们的生活和工作带来了极大不便,尤其在语音信号处理中,噪声 ...

  7. matlab 自定义的snr,Matlab信号添加噪声及信噪比SNR的计算

    一.MATLAB中自带的高斯白噪声的两个函数 MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN.WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白 ...

  8. matlab实验——信号和噪声产生及其功率谱分析

    文章目录 前言 一.高斯白噪声自相关函数及功率谱 1.matlab代码 2.运行结果 二.均匀白噪声自相关函数及功率谱 1.matlab代码 2.运行结果 三.正弦波与高斯白噪声叠加 1.matlab ...

  9. MATLAB给数据加噪声/扰动

    # 个人记录自己关于给图像加噪声的实验,见文件:Add_Noise_to_Image.mlx.网页记录:https://blog.csdn.net/Dust_Evc/article/details/1 ...

最新文章

  1. CCNA的全套标准实验
  2. VNC客户端连接MacOS时一闪而过的解决办法
  3. 荣耀老熊晒荣耀V30新机样张:还有更深远的未知空间
  4. html中文本框冒号对齐,html5 冒号分隔符对齐的实现,
  5. Linux服务器的攻防技术
  6. CCF NOI1140 高精度乘法
  7. react里执行shouldComponentUpdate时返回false的后果
  8. 数学表达式: 从恐惧到单挑 (1. 概述)
  9. 常用工具类总结(一) 时间格式转换
  10. rar x64 5.50 linux,WinRAR 5.50简体中文注册版(已含Key文件和32位、64位)
  11. 如何将电脑图片缩小kb?图片怎么压缩大小?
  12. vue2.x+antd-vue搭建后管项目
  13. Ceres Solver:从入门到使用
  14. 四象限法推导lm曲线_提出研究问题的“四象限法”
  15. EXSI6怎么设置虚拟机从光驱启动
  16. 属性动画Android动画,Android动画(三)属性动画Animator与Interpolator
  17. 软件测试报告编写指南
  18. postfix中间件--Amavisd-new--反垃圾和反病毒配置
  19. 个人博客系统---基本功能的实现
  20. java心跳 谁发谁_java 心跳机制

热门文章

  1. 软件项目该如何接?(转自速用)
  2. 光引发剂主要用途_可见光引发剂的应用
  3. js 获取下周一的具体年月日格式为(YYYY-MM-DD)
  4. NUIST_OJ P1042手机短号
  5. 【报告分享】2020美好城市指数:短视频与城市繁荣关系白皮书(附下载)
  6. 球队分组(java源码)
  7. linux回到命令首字符,Linux 命令词典选段
  8. 8个问题带你搞懂《小门神》背后的技术
  9. c++项目-----演讲比赛--附详细过程
  10. python除法编程_Java和Python中的整数除法,取余,舍入