信噪比的定义及计算方法

这篇具有很好参考价值的文章主要介绍了信噪比的定义及计算方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.信噪比的定义

英文名称叫做SNR或S/N(SIGNAL-NOISE RATIO),又称为讯噪比。是指一个电子设备或者电子系统中信号与噪声的比例。这里面的信号指的是来自设备外部需要通过这台设备进行处理的电子信号,噪声是指经过该设备后产生的原信号中并不存在的无规则的额外信号(或信息),并且该种信号并不随原信号的变化而变化。

2.计算方法

信噪比是一个比值,也可以认为是一种倍数,在通信和电子工程中,我们希望的是信噪比越高越好。比如说信号噪声的强度是噪声的10倍、100倍、1000倍,由于这个数字可能是一个很大很大的数字,所以我们采用分贝(dB)来表示。其定义为:“两个同类功率量或可与功率类比的量之比值的常用对数乘以10等于1时的级差” 。公式如下:
N d B = 10 l g P s P n N_{dB}=10\mathrm{lg}\frac{P_s}{P_n} NdB=10lgPnPs
因此信噪比的定义即:
S N R = 10 l g P s P n SNR=10\mathrm{lg}\frac{P_s}{P_n} SNR=10lgPnPs
其中 P s P_s Ps是信号的功率, P n P_n Pn是噪声的功率, l g \mathrm{lg} lg表示以10为底的对数。
假如说知道信噪比和信号功率,可以知道噪声功率为:
P n = P s 1 0 ( S N R / 10 ) P_n=\frac{P_s}{10^{(SNR/10)}} Pn=10(SNR/10)Ps
那对于一个数字信号而言,它的功率如何求呢?
假设数字信号 x ( n ) x(n) x(n)的序列长度为 N N N,那么它的功率就是:
P = ∑ n = 0 N − 1 x ( n ) 2 N P = \frac{\sum_{n=0}^{N-1}x(n)^{2}}{N} P=Nn=0N1x(n)2
在这里陈清一个概念,信号的功率由信号能量除以时间得到。信号能量在连续的情形就是对 x x x平方后求积分,而在离散的情形自然是求和代替积分了。

3.推导公式

信号的功率: P s P_s Ps,噪声的功率: P n P_n Pn,以及信噪比: S N R SNR SNR,三个值,只要知道其中的任意的两个值,便能够得到第三个值。
例如:由信号的功率: P s P_s Ps和信噪比: S N R SNR SNR,则噪声功率:
P n = P s 1 0 S N R / 10 P_n=\frac{P_s}{10^{SNR/10}} Pn=10SNR/10Ps

4.Matlab动手实现

先来生成一个信号:

T = 1; %仿真时间
dt = 0.001; %采样率
t = 0: dt: 1-dt; %时间向量
N = length(t); %序列长度
f = 5; %信号频率,Hz为单位
a = cos(2*pi*f*t); %周期信号
plot(t, a);
p = sum(a.^2)/N;

信噪比的定义及计算方法
该信号的功率:0.5 w。
白噪声的功率用其方差来定义。
如何产生白噪声呢?
Matlab中randn可以产生均值为0,方差为1(即功率为1)的随机序列。

n = randn(N,1);  %产生噪声,功率为1
plot(t,n)
sum(n.^2)/N

信噪比的定义及计算方法
如何产生指定功率的白噪声,例如我们要产生功率为 P n P_n Pn的白噪声:

n = sqrt(P_n)*randn(N,1);  %产生噪声,功率为P_n

我们可以验证一下它的正确性:

p  = 10; %功率为p
noise = sqrt(p)*randn(10000,1); %生成功率为p的噪声
sum(noise.^2)/length(noise)  %输出计算得到的噪声

输出:

ans =

    9.9994

因此这样编程时正确的。我们还可以使用matlab自带的函数产生高斯白噪声。wgn(m,n,p)产生功率为p (dBW)的mn的高斯白噪声矩阵,其中p是以dbW为单位的输出强度。瓦和dB W之间的运算关系:
d B W = 10 l g ( P 1 W ) \mathrm{dBW} =10\mathrm{lg}(\frac{P}{1\mathrm{W}}) dBW=10lg(1WP)
因此,10w = 10
log10(10)dbW。编程验证:

p = 10;
noise = wgn(10000,1,10*log10(p));
sum(noise.^2)/length(noise)

输出:

ans =

    9.8748

有一点误差。
搞清楚如何生成固定信噪比的噪声后,在一个信号上添加指定信噪比的程序如下:

clc;clear all;close all;
SNR = 10; %信噪比为10
T = 1; %仿真时间
dt = 0.001; %采样率
t = 0: dt: 1-dt; %时间向量
N = length(t); %序列长度
f = 5; %信号频率,Hz为单位
a = cos(2*pi*f*t); %周期信号
plot(t, a, 'k');
P_s = sum(a.^2)/N; %信号功率
P_n = P_s/(10^(SNR/10)); %计算噪声功率
n = sqrt(P_n)*randn(N,1);  %产生噪声,功率为P_n
hold on %保持绘图界面
plot(t,n,'r');
sum(n.^2)/N
nosie_a = a' + n; %添加噪声后的信号
hold on %保持绘图界面
plot(t,nosie_a,'g');
legend('Pure signal','Noise','Noise signal');

信噪比的定义及计算方法

4.自己编函数

以上的程序仅仅是给一个信号添加特定信噪比,为方便使用,可以编写一个函数。

%%-------------------------------------------------
%% 给输入信号添加一定信噪比
%% 输入参数 pureSignal : 输入信号
%%         SNR : 信噪比,dB为单位
%% 输出参数 noiseSignal
%% 输出参数 Location: 估计的时延参数 
%%huasir @shenZhen
%%2022.4.5
%%-------------------------------------------------
%%-------------------------------------------------
function [noiseSignal] = mySNR(pureSignal, SNR)
[m,n] = size(pureSignal);
Power_pureSignal = sum(abs(pureSignal).^2)/length(pureSignal);
Power_noise = Power_pureSignal/(10^(SNR/10)); %计算噪声功率
noise = sqrt(Power_noise)*randn(m,n); %生成噪声
noiseSignal = noise + pureSignal; %给信号添加噪声
end

5.Matlab自带的函数

matlab中可以采用如下函数给信号添加一定噪声:

y = awgn(x,snr,'measured') 

其中x是原始输入信号,snr即信噪比,'measured‘是指在添加噪声之前先测量一下输入信号的功率,加入没有这个参数的话,它会默认输入信号的功率为0。事实上,很多情况下我们的输入信号的功率不可能为0。
下面验证一下这段代码的正确性:

clc;clear all;close all;
SNR = 10; %信噪比为10
T = 1; %仿真时间
dt = 0.001; %采样率
t = 0: dt: 1-dt; %时间向量
N = length(t); %序列长度
f = 5; %信号频率,Hz为单位
a = cos(2*pi*f*t); %周期信号
plot(t, a, 'k');
P_s = sum(a.^2)/N; %信号功率

noise_a = awgn(a,SNR,'measured') ; %添加噪声后的信号,调用matlab函数
hold on %保持绘图界面
plot(t,noise_a,'g');
legend('Pure signal','Noise signal');
noise = noise_a - a; %做差求噪声
P_n = sum(noise.^2)/N;
my_SNR = 10*log10(P_s/P_n) %计算得到的信噪比

我设置的信噪比是10,最终计算得到的信噪比是

my_SNR =

    9.8643

有一定误差,目前暂不明确为什么会出现这种情况。文章来源地址https://www.toymoban.com/news/detail-428899.html

到了这里,关于信噪比的定义及计算方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 视频的动态范围、信噪比和比特数

    在机器视觉系统中,反映每一个像元灰度质量的指标是动态范围,也是机器视觉系统要考虑的重要指标之一。动态范围和空间分辨率是机器视觉系统的两个主要指标。 灰度的动态范围在摄像头中的模拟视频部分用信噪比(Signal to Noise Ratio)SNR表示;而在摄像头或采集卡的A/

    2023年04月09日
    浏览(36)
  • Python 不同分辨率图像峰值信噪比[PSNR]

    PNNR:全称为“Peak Signal-to-Noise Ratio”,中文直译为峰值信噪比 前言 一、定义 二、Python代码 1.自定义 2.Tensorflow 总结 峰值信噪比是一种衡量图像质量的指标,描述的是最大值信号与背景噪音之间的关系。 一般来说,PSNR高于40dB说明图像质量极好(即非常接近原始图像);在

    2024年02月01日
    浏览(50)
  • 理解信噪比SNR,Eb/N0,Es/N0

    之前学习主要考虑的SNR和误码率,对Eb/N0和Es/N0不太了解,这次边记录边学习一下(希望随着自己的学习可以不断完善)。 信噪比,即信号功率与噪声功率的比值: S:信号功率,N:噪声功率。 Eb/N0:每个二进制bit能量与噪声功率谱密度的比值(比特信噪比)。 Es/N0:  每个符号

    2024年02月04日
    浏览(40)
  • python求不同分辨率图像的峰值信噪比,一文搞懂

    可以使用 Python 的 NumPy 和 OpenCV 库来实现这个任务。提前准备一张图片作为素材。 峰值信噪比(Peak Signal to Noise Ratio,PSNR)是衡量图像质量的常用指标,它表示图像中信号和噪声的比值。通常,较高的 PSNR 值表示图像质量较高。 PSNR 的公式如下: 其中, MAX 是图像的最大亮度

    2024年02月05日
    浏览(46)
  • 通信系统中基于matlab的BPSK信噪比检测算法及实现

    根据是否需要辅助数据,信噪比估计算法可以分为数据辅助类算法(Data aided, DA)和非数据辅助类算法(No Data aided, NDA)。DA估计算法准确性较高,但是需要提供先验信息,需要牺牲信道传输效率。NDA方法在传输数据信息的同时进行信噪比估计,不影响信息传输效率,适用范围较广

    2024年02月04日
    浏览(43)
  • 图像增强的两个评价指标:峰值信噪比PSNR和结构相似度SSIM

    图像增强的评价指标在像素层面上通常包含平均绝对误差(MAE)、均方误差法(MSE)、峰值信噪比(PSNR)以及结构相似度(SSIM)。目前在图像增强领域比较权威的客观评价标准为峰值信噪比(PSNR)和结构相似度(SSIM)。 注:这两个指标都需要由标准图做参考(不是原图)

    2024年02月05日
    浏览(43)
  • 『CV学习笔记』图像超分辨率等图像处理任务中的评价指标PSNR(峰值信噪比)

    图像超分辨率等图像处理任务中的评价指标PSNR(峰值信噪比) 峰值信噪比(Peak Signal-to-Noise Ratio, PSNR)是图像超分辨率等图像处理任务中常用的一个指标,用来评估图像质量。PSNR的值越高,表示失真越小,图像质量越好。 PSNR是通过对比原图像和处理后图像的每个像素的差异来

    2024年02月06日
    浏览(47)
  • Allan方差定义与计算方法简介

    Allan方差 最初由David W. Allan开发,用于测量精密仪器的频率稳定性。 它还可用于识别固定陀螺仪测量中存在的各种噪声源。 Allan 方差 主要可以辨识的噪声包括量化噪声、随机游走、零偏不稳定性、速率随机游走以及速率斜坡。 Allan方差 法是一种时域分析技术,对实际静态条

    2024年02月11日
    浏览(41)
  • 定义一个圆类Circle,成员变量:半径 radius;成员方法:构造方法、get和set半径的方法、计算面积和周长的方法。

    (1)定义一个圆类Circle,成员变量:半径 radius;成员方法:构造方法、get和set半径的方法、        计算面积和周长的方法。定义圆柱和圆锥类,定义相应的变量成员和成员方法。使用以上类编         程,输出圆的面积和圆柱、圆锥的体积。

    2024年02月12日
    浏览(43)
  • 一文搞懂STM32定时器翻转模式(产生多路频率、占空比的PWM)

    在STM32定时器配置中,我们知道可以将定时器配置为PWM输出模式,也叫输出比较模式,通过修改ARR寄存器中的值可以改变PWM周期,通过修改CCR寄存器中的值可以修改,PWM的占空比,但是这种普通的PWM输出模式较为单一,能输出PWM的定时器有4个通道,这种方式只能够产生4路周期

    2024年02月12日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包