Impact of atmospheric turbulence on secret key rate in QKD

Click For Summary
SUMMARY

The forum discussion centers on the calculation of the secret key rate (SKR) in quantum key distribution (QKD) under varying levels of atmospheric turbulence using Python. The user implemented a Python script utilizing libraries such as NumPy and Matplotlib to visualize the SKR across different turbulence conditions, specifically comparing sigma values of 0.3 and 0.9. Despite theoretical expectations that SKR should be lower in high turbulence, the user's results indicated the opposite, prompting inquiries into potential errors in the calculation, particularly in the log_normal function's exponential component.

PREREQUISITES
  • Understanding of quantum key distribution (QKD)
  • Proficiency in Python programming, specifically with NumPy and Matplotlib
  • Familiarity with statistical concepts such as QBER (Quantum Bit Error Rate)
  • Knowledge of mathematical functions, particularly logarithmic and exponential functions
NEXT STEPS
  • Review the implementation of the log_normal function in Python for accuracy
  • Investigate the effects of atmospheric turbulence on QKD performance
  • Explore advanced statistical methods for analyzing QBER in QKD
  • Learn about the physics underlying atmospheric turbulence and its impact on signal transmission
USEFUL FOR

This discussion is beneficial for quantum cryptography researchers, Python developers working on QKD simulations, and anyone interested in the interplay between atmospheric conditions and secure communication technologies.

Nur Ziadah
Messages
34
Reaction score
3
TL;DR
Clarification on the calculation of SKR over turbulence channel.
I have the calculation on secret key rate over the turbulence channel using Python code. The calculation is as below:
Python:
import numpy as np
import math
import re
import random
import cmath 
#import itertools
from math import pi,e,log
import time
#import xlwt
import matplotlib.pyplot as plt
from scipy.interpolate import splinex=np.linspace(0,1,1000)

def log_normal(x,sigma):
    y=1/(x*sigma*np.sqrt(2*np.pi))*np.exp(-(np.log(x/0.3)+(1/2*sigma*sigma))**2/(2*sigma*sigma))

    return ydef R(x,nd,Y0,ed):
    nsys = x*nd
    QBER=((1/2*Y0)+(ed*nsys))/(Y0+nsys)
    H2=-QBER*np.log2(QBER)-(1-QBER)*np.log2(1-QBER)
    out = (Y0+nsys)*(1-(2*H2))
    return outdef out(x,nd,Y0,ed,sigma):

    term1 = log_normal(x,sigma)
    term2 = R(x,nd,Y0,ed)

    return term1*term2

hyp = (0.25,1*(10**-5), 0.03,0.9) #nd,Y0,ed,sigmalg = log_normal(x[1:],hyp[3])

r = R(x[1:],hyp[0],hyp[1],hyp[2])
plt.plot(np.log10 ( out(x,hyp[0],hyp[1],hyp[2],0.9) ),label = "sigma = 0.9" )
plt.plot(np.log10 ( out(x,hyp[0],hyp[1],hyp[2],0.3) ) ,label = "sigma = 0.3")
plt.plot(np.log10 ( out(x,hyp[0],hyp[1],hyp[2],0.6) ) ,label = "sigma = 0.6")

plt.title("Rate")
plt.legend()
plt.show()

Theoretically, the SKR is low in high turbulence (sigma=0.9) and the SKR is high in low turbulence (sigma=0.3). However, after I ran this code, I get the wrong plot:

245757


245759

From the graphs, it can be seen at y-axis that the SKR under strong turbulence is higher compared to weak turbulence and vice versa. What is the problem in my calculation? Anyone, please help me. Thank you.
 

Attachments

  • 1561622976705.png
    1561622976705.png
    3.8 KB · Views: 214
Physics news on Phys.org
I have no idea about the underlying physics but the result fits to the code you wrote.

R is the same in both cases, let's focus on log_normal(x,sigma), especially the exponential function there:

exp(-(np.log(x/0.3)+(1/2*sigma*sigma))**2/(2*sigma*sigma))
Formatted:
$$\exp\left(\frac{-(\log(x/0.3)+1/2 \,\sigma^2)^2}{2\sigma^2}\right)$$
Your x range is from 1 to 1000, let's look at 300 for example: 300/0.3 = 1000, log(1000)=3. Plug it in and simplify a bit:
$$\exp\left(\frac{-(6+\sigma^2)^2}{8\sigma^2}\right)$$ As ##\sigma<1## we can neglect the right term and get approximately $$\exp\left(\frac{-36}{8\sigma^2}\right)$$
For small ##\sigma## the exponent is very large (here is a plot) and the expression is very small.
 
  • Like
Likes   Reactions: Nur Ziadah
mfb said:
I have no idea about the underlying physics but the result fits to the code you wrote.

R is the same in both cases, let's focus on log_normal(x,sigma), especially the exponential function there:

exp(-(np.log(x/0.3)+(1/2*sigma*sigma))**2/(2*sigma*sigma))
Formatted:
$$\exp\left(\frac{-(\log(x/0.3)+1/2 \,\sigma^2)^2}{2\sigma^2}\right)$$
Your x range is from 1 to 1000, let's look at 300 for example: 300/0.3 = 1000, log(1000)=3. Plug it in and simplify a bit:
$$\exp\left(\frac{-(6+\sigma^2)^2}{8\sigma^2}\right)$$ As ##\sigma<1## we can neglect the right term and get approximately $$\exp\left(\frac{-36}{8\sigma^2}\right)$$
For small ##\sigma## the exponent is very large (here is a plot) and the expression is very small.
Thank you for your explanation. ;)
 
  • Like
Likes   Reactions: berkeman

Similar threads

  • · Replies 1 ·
Replies
1
Views
2K
Replies
7
Views
2K