matlab-如何计算信噪比
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-如何计算信噪比相关推荐
- matlab如何写程序算信噪比,Matlab中如何计算信噪比?
%Matlab计算信噪比,程序如下 function snr=SNR(I,In) % 计算信号噪声比函数 % by Qulei % I :original signal % In:noisy sign ...
- matlab 信噪比,[转载]Matlab中如何计算信噪比?
%Matlab计算信噪比,程序如下 function snr=SNR(I,In) % 计算信号噪声比函数 % by Qulei % I :original signal % In:noisy sign ...
- matlab 求解体积,matlab如何计算多面体体积
一个多面体的体积应该如何计算? 这本来是一个比较复杂的问题,应该要用到积分,但在matlab中确实很简单的事情,因为有现成的函数,只要稍微组合一下就可以. 下面我把函数写成了被调用的格式,输入参数为多 ...
- 信噪比与错误指数matlab,关于信噪比不符合理论值的问题
在求解信噪比时,加30db的高斯白噪声后所求得的信噪比不是30.而且理论上软阈值去噪效果应该是最好的,但是软阈值去噪后得到的信噪比却比其他方法要小,而且所有求得的信噪比数值都很小.我也在论坛里看到过类 ...
- matlab 计算指北角,用MATLAB如何计算出矩形区域内的最大值?
在MATLAB图像处理工具箱(Image Processing Toolbox)的GUI函数中,有一些用来在图像或坐标轴上选择矩形或椭圆区域的函数,使用示例如下: 第一行代码:显示matlab内置的一 ...
- matlab如何计算矩阵的幂,MATLAB矩阵幂算法
我想把一个算法从MATLAB移植到Python.所述算法的一个步骤涉及到取A^(-1/2),其中A是9x9平方复矩阵.据我所知,矩阵的平方根(及其逆矩阵的推广)不是唯一的.在 我一直在试验scipy. ...
- matlab 求信噪比
clear all;clc;% 实信号求信噪比 % X= sqrt(2)*sin(0:pi/1000000:6*pi); %产生正弦信号 % Y = awgn(X,14,'measured'); %加 ...
- matlab 3维投影,matlab - 如何计算3维投影的面积? - 堆栈内存溢出
第一步将使用convhull (如yar所建议 )来获取每个投影多边形区域的轮廓. 应该注意的是,这里要使用凸包,因为您要处理的是长方体,即长方体. 我认为您的第二个长方体(位于A(9:16, :) ...
- MATLAB如何计算函数导数
这个是怎么回事?不懂! 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页.如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下M ...
- matlab如何计算出散点中各两个点之间的距离
这里以30个点为例: num = [ 120.7015 36.3742 120.6987 36.3746 120.6998 36.3759 120.7069 36.3758 120.7056 36.3 ...
最新文章
- 10 年了,腾讯微信后台第一天提交的代码曝光 | 每日趣闻
- C#开发学习——web服务器端控件
- 在64位Windows 7 激活BitDefender Internet Security 2010
- 基于MATLAB的Okumura-Hata模型的仿真
- 5个拓展潜客的创意方法
- kernel panic 和 kernel Oops
- 数学思维比数学运算更重要
- 6 道 BATJ 必考的 Java 面试题
- 获取该字符串第N次出现的位置
- python编程入门课_程序设计入门—Python
- 【Elasticsearch】用Elasticsearch和Raspberry Pi构建一个真实世界的警报
- php require 输出乱码,php输出乱码
- 13岁的儿子早恋了,心思都不用在学习上,我要怎么帮助他?
- windows下php不支持mysql
- CMD-CMD命令之新建一个用户!
- 2022年全新UI聚合支付系统四方源码+修复BUG完美版
- cmd命令入门,简单教程dos
- MySQL 自联结 自连接
- 【Vue——basic】dom是什么
- Flutter 自定义组件实战之Cupertino(iOS)风格的复选框
热门文章
- Bert文本聚类实践
- 移动软交换技术在3G核心网中的实现
- 在线查看html文件大小,如何以HTML格式的可访问方式显示文件大小(How to display file sizes in an accessible way in HTML)...
- jQuery图片放大镜插件
- https在jsp中简单使用
- Simulink代码生成: Assignment模块及其代码
- python实现qq登录注册_python实现QQ批量登录功能
- 用TFTP 将生成的文件传输到开发板
- Windows10家庭版安装Microsoft Visual Studio 2010详细教程
- PM981/PM981a安装黑苹果(第七版)