timothe-bramas / CV-QKD_reconciliation

Work on the reverse reconciliation part of a GG02 protocol for CV QKD using LDPC codes
2 stars 1 forks source link

Hi! Your code is very nice, but it seems that the part of main_cv cannot work properly, is there something wrong with it? #1

Open Ysdhj opened 9 months ago

timothe-bramas commented 9 months ago

Hi ! I don't know if you'll see this message, but thank you very much for your return !

What problem do you have when trying to run the code ? This is possible that some lines has to be removed, I uploaded the project quite fast.

Have a nice day, Timothé.

Ysdhj commented 9 months ago

Thanks for your reply! You can call me yuan and I'm a master student who is studying in inforamtion engineering department, Hong Kong. My research project is about high speed optical communication and high speed QKD. I' m trying to work on the project of CVQKD reconcilitation process, and I find the normal LDPC code cannot work properly in low SNR range, so I try to search related topics in GitHub.

(1) Your project on DV_reconciliation can work properly, even though the bilief propagation algorithm will cost a lot of time. I also used a matlab function ' 'ldpcdecoder'' to run the bileif propagation algorithm and I find the speed of this function '' ldpcdecoder'' is extremely fast. It just spent several seconds to encode and decode LDPC code.

(2) Your project CV_reconciliation seems miss some functions. For example, if you read the original line 43, 'Proto=cell2mat(struct2cell(load("CoolProto.mat")))', you will find that you seem to froget to upload the mat file ‘CoolProto.mat’.

(3) Actually, I don't understand functions ''generatePrototype.m'' and ‘'generateRA.m'’. Are they used to generate QC-LDPC? I have tried to use ''LDPC_expender.m'' to generate several LDPC code, but all of they cannot work properly when SNR=-8dB even if the rate code R=1/50.

Once again, thanks for your reply very much!!!

Sincerely, Yuan

timothe-bramas commented 9 months ago

Hi Yuan, I answer with pleasure !

1) using MATLAB's built-in functions can indeed make the process a lot faster, I did not do it just because I was using octave and did not have access to these functions.

2)Oh yes, I abandonned the idea of QC LDPC codes when I fount out about repeat accumulate ones. "Cool proto mat" was a prototype matrix (that is not very efficient) used to build a QC LDPC matrix. I think I created it quite randomly by putting numbers at arbitrary places in the matrix.

3)Generate_prototype is the fonction I used to find "Cool proto mat". This is for QC LDPC : in the prototype matrix (of size (n-k)/q, n/q wirh q being called the extension factor, you can look at M.Milicevic's work to learn about that)

GenerateRA is a function that generates a LDPC matrix in a reprat accumulate form. This form consists in a left part that you can change, and the right part (of size n-k * n-k) will always be a bi diagonal matrix. This allows very simple encoding (that you can find in the code ra encode) The fonction puts 1s in random places, being given the number of 1s per column, this is not obtimal at all as it creates a lot of cycles in the tanner's graph. The matrix I used in DV correction is the one from S. Johnson (I also linked her work in the readme).

With S.Johnson's code I managed to work with a SNR of around -3.5dB and it's a code rate of 1/10 so that's quite good. I unfortunately did not find an efficient matrix with a code rate lower than that, engineering matrices with low rates is one of the thing that missed to my work. You can maybe look at algorithms such as density evolution!

Do not hesitate if you have other questions, have a nice day !