1.信噪比的定义

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

2.计算方法

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

3.推导公式

信号的功率:PsP_sPs​,噪声的功率:PnP_nPn​,以及信噪比:SNRSNRSNR,三个值,只要知道其中的任意的两个值,便能够得到第三个值。
例如:由信号的功率:PsP_sPs​和信噪比:SNRSNRSNR,则噪声功率:
Pn=Ps10SNR/10P_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


如何产生指定功率的白噪声,例如我们要产生功率为PnP_nPn​的白噪声:

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之间的运算关系:
dBW=10lg(P1W)\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

有一定误差,目前暂不明确为什么会出现这种情况。

信噪比的定义及计算方法相关推荐

  1. 线性卷积、循环卷积、周期卷积的定义、计算方法及三者之间的关系

    文章目录 前言 一.卷积的物理意义及性质 1. 物理意义 2. 卷积性质 二.线性卷积定义及计算方法 1. 定义公式 2. 适用范围 3. 计算方法 三.循环卷积定义及计算方法 1. 定义公式 2. ...

  2. Sonarqube各指标的定义及计算方法

    本文内容介绍了Sonarqube分析项目后各指标的定义和计算方法. 一.可靠性 1.评级计算方法(bug): A:表示代码无bug,最高级别 B:代码有一个次要bug,等级评估为B C:代码有一个重要 ...

  3. 大盘指数的定义及其计算方法

    一.指数的定义 股票指数即股票价格指数.是由证券交易所或金融服务机构编制的表明股票行市变动的一种供参考的指示数字.由于股票价格起伏无常,投资者必然面临市场价格风险.对于具体某一种股票的价格变化,投资者 ...

  4. 打字速度单位WPM、KPM定义与计算方法

    打字速度单位的定义 国际通行的打字速度单位是WPM,用来量度打字速度的快慢.另外还有相关的KPM.CPM.KPH等打字速度单位,下面一一介绍. WPM WPM是Words Per Minute的缩写, ...

  5. 经常性收入、MRR、ARR 的定义和计算方法

    在体验经济时代,企业与客户的联系不会由于客户的第一次付费而结束.伴随着订阅制等持续性收费模式的出现,企业对客户生命周期价值(LTV)愈发重视,对经常性收入.MRR.ARR 的讨论和研究也从未停歇.今天 ...

  6. Allan方差定义与计算方法简介

    Allan方差原理与计算 Allan方差定义 Allan方差计算方法 武大讲义 严老师程序 参考文献 Allan方差定义 Allan方差最初由David W. Allan开发,用于测量精密仪器的频率稳 ...

  7. Matlab 下的 Monte Carlo方法高斯信道BPSK基带通信系统仿真

    1  仿真原理 1.1    理论基础 1.2    信噪比数学表达 1.3    框架结构 2  仿真代码 3 仿真的结果 4 参考资料 1  仿真原理 1.1 理论基础 BPSK基带数字通信系统. ...

  8. sinr是什么意思_seo信噪比是什么,seo信噪比是什么意思

    网页信噪比是什么意思 信噪比"是电子技术中经常用到的一个词组,知道它的确切含义有一定意义.为此,这里将对其做个简单介绍. 我们知道,收音机听广播或录音机放音乐时,扬声器里除了广播声和音乐声外 ...

  9. 信噪比概念及噪声来源

    转载自  http://blog.sina.com.cn/s/blog_155903a570102wjic.html 信噪比与噪声的详细解析       信噪比,英文名称叫做SNR或S/N(SIGNA ...

  10. 信噪比如何计算?如何产生固定信噪比的带噪信号?

    文章目录 一.信号的基础知识 1.1 信号能量的计算 1.1.1 有穷区间能量 1.1.2 无穷区间能量 1.2 信号功率的计算 1.3 信号的分类 二.信噪比 2.1 信噪比的定义及计算 2.2 几 ...

最新文章

  1. Paddle中的数据集合定义与加载
  2. 接口隔离原则_设计模式六大原则
  3. python手机端自动点赞_python自动点赞功能的实现思路
  4. C语言程序设计——设计一个学生管理系统(完美运行的程序(●‘◡‘●))
  5. 计算机应用与软件是csci吗,计算机与信息技术学院
  6. Spring4.x整合Axis1.4发布WebService服务
  7. Fixed Function Shader
  8. Windows系统自带WMI应用的查询使用
  9. Vue2.x总结(1)
  10. Spring浅入浅出——不吹牛逼不装逼
  11. 整合MVC实现文件上传
  12. forms Build中的触发器
  13. Regularization:The problem of overfitting过度拟合问题----吴恩达机器学习
  14. iphone/ipad 连接smb服务器,备份照片
  15. idea git暂存操作
  16. 520,让爱的传递永不停歇
  17. 京东数据库运维自动化体系建设之路
  18. Ubuntu 的 openssl 安全问题提醒 USN-2192-1
  19. EPLAN的USB加密狗驱动程序将于2023年5月23日停止维护更新?
  20. redis实现“附近的人”

热门文章

  1. 从Multisim入门Altium Designer
  2. 基于java的小型超市管理系统系统(含源文件)
  3. 线性系统和非线性系统——《应用非线性动力学》读书笔记
  4. 道客巴巴 文档免积分保存方法
  5. 如何绘制CIE1931xy色度图
  6. 计算机原理答题卡,答题卡阅卷机的基本工作原理及特点
  7. vue实现复制到剪切板的功能
  8. vue中使用kindeditor编辑器_vue集成kindeditor富文本
  9. 使用ExtendSim进行水管理、可持续性和环境仿真建模
  10. linux 远程 mox,MOX 文件扩展名: 它是什么以及如何打开它?