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. 2019年5月自律清单
  2. flower.php,flowerlist.php
  3. Android之Tab分页标签的实现方法--------采用ActivityGroup和GridView的结合
  4. WCF+EF实战系列一
  5. Asp.Net 导出数据格式为Excel 数据的9种方案
  6. Google 中国版搜索引擎项目凉了!
  7. 获得一个日期在当周是否有节日并返回日期
  8. python学习-(__new__方法和单例模式)
  9. K-Means算法的Java实现
  10. 如何学习HyperMesh
  11. 关于加密、证书的那些事
  12. oc实时渲染的图如何导出_VR批量渲染如何同时保存通道图?「渲云渲染」
  13. Charles mac版本进行https抓包的配置方法
  14. 云片网发送短信验证码
  15. 【Kotlin】Android-使用WebDAV协议云存储文件(详细)—附demo源码
  16. 淘宝的字体也改变了(今天)
  17. UG快捷键使用技巧总结(补充中....)
  18. Vue3 中的 CSS 功能
  19. 黑客新手基础扫盲贴(上) 黑客基地 黑客传说 黑客帝国 指间的黑客 黑客网站
  20. 大数据-数据仓库(Data Warehouse):概述【面向主题的、集成的、相对稳定的、反映历史变化的数据集合;是一个数据处理过程(清洗、转义、分类、重组、合并、拆分、统计等)】

热门文章

  1. 【数据结构】各种数据结构的简单特点
  2. 线程操作:冻结与解冻线程
  3. chrome打开6666端口的方式
  4. es6 javascript对象方法Object.assign()
  5. 2.1.数列极限——实数系
  6. 等比数列求和和求模的高级运用(编程题)
  7. 万卷书 - 欧洲的门户 [The Gates of Europe]
  8. Xilinx FPGA平台DDR3设计保姆式教程(3)MIG IP核使用教程及DDR读写时序
  9. idea2021版本添加上一步和下一步操作到工具栏
  10. iOS7的十个更“佳”:简洁直观更受青睐