首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python计算GNU无线电的BER置信度

用Python计算GNU无线电的BER置信度
EN

Stack Overflow用户
提问于 2019-08-07 07:13:26
回答 1查看 622关注 0票数 2

一个基于python的误码率置信度计算器正在为GNU无线电OOT开发.在文献1中,置信度由方程计算。

然而,引用2使用公式计算置信水平:

第一个问题是关于这两个公式。他们为什么不一样?我确实试着把它们都实现了。第一个版本非常简单。然而,第二个公式中的指数运算和阶乘运算导致了一个"OverflowError:数学范围误差“问题。我们怎么处理这件事?

代码语言:javascript
复制
import math
def confidence_level(N,ber,E):
    sum = 0.0;
    for k in range(0,E):
        sum += math.pow(N*ber,k)/math.factorial(k);
    cl = 1.0 - math.exp(-N*ber)*sum;
    print cl;

confidence_level(1.80e+10, 1.0e-6, 6350);

参考文献1:https://www.keysight.com/main/editorial.jspx?ckey=1481106&id=1481106&nid=-11143.0.00&lc=eng&cc=LV

参考文献2:https://www.jitterlabs.com/support/calculators/ber-confidence-level-calculator

编辑,似乎第一个公式简化为CL =1-exp(-NErrors),因为BER =NError/NBits。对于Eb/No =7 dB的BPSK调制,在检测到14个误差后,获得了100%的置信度,这似乎是不准确的。

NBits: 1600 NErrs: 1误码率: 6.2500E-04 CL: 6.3212E-01

NBits: 3200 NErrs: 1误码率:3.1250E-04CL: 6.3212E-01

NBits: 4800 NErrs: 3误码率:6.2500E-04CL: 9.5021E-01

NBits: 8000 NErrs: 6误码率: 7.5000E-04 CL: 9.9752E-01

NBits: 9600 NErrs: 6误码率: 6.2500E-04 CL: 9.9752E-01

NBits: 11200 NErrs: 8误码率: 7.1429E-04 CL: 9.9966E-01

NBits: 12800 NErrs: 8误码率:6.2500E-04CL: 9.9966E-01

NBits: 14400 NErrs: 9误码率: 6.2500E-04 CL: 9.9988E-01

NBits: 16000 NErrs: 9误码率: 5.6250E-04 CL: 9.9988E-01

NBits: 17600 NErrs: 10误码率:5.6818 E-04 CL: 9.9995E-01

NBits: 19200 NErrs: 12误码率:6.2500E-04CL: 9.9999E-01

NBits: 20800 NErrs: 12误码率:5.7692E-04CL: 9.9999E-01

NBits: 22400 NErrs: 12误码率:5.3571E-04CL: 9.9999E-01

NBits: 24000 NErrs: 14误码率: 5.8333E-04 CL: 1.0000E+00

NBits: 25600 NErrs: 16误码率: 6.2500E-04 CL: 1.0000E+00

NBits: 27200 NErrs: 18误码率: 6.6176E-04 CL: 1.0000E+00

NBits: 28800 NErrs: 18误码率: 6.2500E-04 CL: 1.0000E+00

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-08 08:53:34

为什么公式不同?

只有当您有零错误(即E=0)时,才能使用公式1。在这种情况下,它相当于公式2。

公式2可以用来计算置信度,不管你观察到多少错误。

我们该如何处理溢出的问题?

术语e^(-N*BER_s) *sum(.)第二个方程是参数为lambda = N*BER_s和k= E的N*BER_s,这个函数是在scipy.stats中实现模。因此,我们可以按以下方式计算置信度:

代码语言:javascript
复制
from scipy.stats import poisson
def confidence_level(N, BER_s, E):
    return 1 - poisson.cdf(E, N*BER_s)

对于您的值(N=1.80e+10,BER_s=1.0e-6,E=6350),此函数返回1.0。因此,你可以100%的自信,你的测试的真实误码率小于1.0e-6。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57388832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档