Simulation of a five qubits convolutional code
1Aziz Mouzali, 2Fatiha Merazka
1Departement of physics, ENPEI, Rouiba, Algeria.
2 Computer Engineering Faculty, USTHB, Algeria.
|
Introduction
|
|
We describe in this work a five-qubit quantum convolutional error correcting code and its implementation on a classical computer. The encoding and decoding circuits and an error correction procedure are presented. We will verify that if any X, Y, Z error or any product of them occurs on one or two qubit, this correction always allows to recover the useful information or to obtain a list of possible errors. The originality in this correction is the winning time obtained by looking at only the required syndromes for each error, thus avoiding the decoherence phenomenon. Also, we give the average fidelity for double errors recovered as single errors having same syndrome. This work is described in more detail in convo2012.pdf , included with this application.
NOTE:
a) This application requires the use of the Feynman package, by T.Radtke and S.Fritzsche. This Maple package is available from the CPC Program Library from Queen’s University in Belfast, as
http://cpc.cs.qub.ac.uk/summaries/ADWE_v4_0.html. You must install that package first before running this application.
b) The running time is very short for the coding circuit but can be much more higher for the orthers parts of the application.
|
|
|
|
Acknowledgement
We would like to thank very much Mrs S.Fritzsch and T.Radtke for providing us with the version 4 (2008) of Feynman Program.
|
>
|
![with(Feynman); with(LinearAlgebra); Digits := 20; Z := Feynman_quantum_operator("Z"); H := Feynman_quantum_operator("H"); Qo := Feynman_evaluate("Kronecker product", Z.H.`<,>`(1, 0), Z.H.`<,>`(1, 0), H.`<,>`(1, 0), `<,>`(a1, b1), H.`<,>`(1, 0)); Q1 := Feynman_quantum_operator(5, "cn", [5, 4]).Qo; Q2 := Feynman_quantum_operator(5, "cz", [1, 4]).Q1; Q31 := I.Feynman_quantum_operator(5, "cn", [1, 4]).Q2; Q3 := I.Feynman_quantum_operator(5, "cz", [1, 5]).Q31; Q4 := Feynman_quantum_operator(5, "cz", [2, 1]).Q3; Q5 := Feynman_quantum_operator(5, "cz", [2, 4]).Q4; Q6 := I.Feynman_quantum_operator(5, "cn", [2, 4]).Q5; Q7 := Feynman_quantum_operator(5, "cz", [3, 2]).Q6; Q8 := Feynman_quantum_operator(5, "cn", [3, 4]).Q7; Q9 := Feynman_evaluate("Kronecker product", Z.H.`<,>`(1, 0), Z.H.`<,>`(1, 0), H.`<,>`(1, 0), `<,>`(a2, b2), H.`<,>`(1, 0), Z.H.`<,>`(1, 0)); Q10 := Feynman_quantum_operator(6, "cn", [5, 4]).Q9; Q11 := Feynman_quantum_operator(6, "cz", [6, 5]).Q10; Q12 := Feynman_quantum_operator(6, "cz", [1, 4]).Q11; Q13 := I.Feynman_quantum_operator(6, "cn", [1, 4]).Q12; Q14 := Feynman_quantum_operator(6, "cz", [1, 5]).Q13; Q15 := Feynman_quantum_operator(6, "cz", [2, 4]).Q14; Q16 := I.Feynman_quantum_operator(6, "cn", [2, 4]).Q15; Q17 := Feynman_quantum_operator(6, "cz", [2, 5]).Q16; Q18 := Feynman_quantum_operator(6, "cz", [3, 2]).Q17; Q19 := Feynman_quantum_operator(6, "cn", [3, 4]).Q18; Q20 := Feynman_quantum_operator(6, "cz", [3, 5]).Q19; Q21 := Feynman_evaluate("Kronecker product", Q8, Q20); Q22 := Feynman_quantum_operator(11, "cz", [6, 5]).Q21; Q23 := Feynman_quantum_operator(11, "cz", [2, 5]).Q22; Q24 := Feynman_quantum_operator(11, "cz", [7, 6]).Q23; Q25 := Feynman_quantum_operator(11, "cz", [3, 5]).Q24; Q255 := Feynman_print(Q25)](http://www.maplesoft.com/view.aspx?SI=142318/670ac272e80d89525510a825e3a4abc6.gif)
|
>
|
|
>
|
|
>
|
|
>
|
![S1a := Feynman_quantum_operator(11, "X", [1]).Q25; S1 := Feynman_quantum_operator(11, "XZ", [2, 3]).S1a; if evalb(Equal(S1, Q25)) = true then print("M1 true") else print("M1 false") end if; S2a := Feynman_quantum_operator(11, "ZX", [1, 2]).Q25; S2 := Feynman_quantum_operator(11, "XZ", [3, 4]).S2a; if evalb(Equal(S2, Q25)) = true then print("M2 true") else print("M2 false") end if; S3a := Feynman_quantum_operator(11, "ZX", [2, 3]).Q25; S3 := Feynman_quantum_operator(11, "XZ", [4, 5]).S3a; if evalb(Equal(S3, Q25)) = true then print("M3 true") else print("M3 false") end if; S4a := Feynman_quantum_operator(11, "ZX", [3, 4]).Q25; S4 := Feynman_quantum_operator(11, "XZ", [5, 6]).S4a; if evalb(Equal(S4, Q25)) = true then print("M4 true") else print("M4 false") end if; S5a := Feynman_quantum_operator(11, "ZX", [5, 6]).Q25; S5 := Feynman_quantum_operator(11, "XZ", [7, 8]).S5a; if evalb(Equal(S5, Q25)) = true then print("M5 true") else print("M5 false") end if; S6a := Feynman_quantum_operator(11, "ZX", [6, 7]).Q25; S6 := Feynman_quantum_operator(11, "XZ", [8, 9]).S6a; if evalb(Equal(S6, Q25)) = true then print("M6 true") else print("M6 false") end if; S7a := Feynman_quantum_operator(11, "ZX", [7, 8]).Q25; S7 := Feynman_quantum_operator(11, "XZ", [9, 10]).S7a; if evalb(Equal(S7, Q25)) = true then print("M7 true") else print("M7 false") end if; S8a := Feynman_quantum_operator(11, "ZX", [8, 9]).Q25; S8 := Feynman_quantum_operator(11, "XZ", [10, 11]).S8a; if evalb(Equal(S8, Q25)) = true then print("M8 true") else print("M8 false") end if](http://www.maplesoft.com/view.aspx?SI=142318/6e26c44638c824aa1d7108ba52b9c450.gif)
|
>
|
|
>
|
|
>
|
|
>
|
|
>
|
|
>
|
|
>
|
|
>
|
![Q28 := Feynman_evaluate("Kronecker product", H.`<,>`(1, 0), Q27); Q281a := Feynman_quantum_operator(12, "c", "X", [1, 2]).Q28; Q281b := Feynman_quantum_operator(12, "c", "XZ", [1, 3, 4]).Q281a; Q281c := Feynman_quantum_operator(12, "H", [1]).Q281b; Q281 := Feynman_quantum_operator(12, "Z", [1]).Q281c; Q282a := Feynman_quantum_operator(12, "c", "ZX", [1, 2, 3]).Q28; Q282b := Feynman_quantum_operator(12, "c", "XZ", [1, 4, 5]).Q282a; Q282c := Feynman_quantum_operator(12, "H", [1]).Q282b; Q282 := Feynman_quantum_operator(12, "Z", [1]).Q282c; Q283a := Feynman_quantum_operator(12, "c", "ZX", [1, 3, 4]).Q28; Q283b := Feynman_quantum_operator(12, "c", "XZ", [1, 5, 6]).Q283a; Q283c := Feynman_quantum_operator(12, "H", [1]).Q283b; Q283 := Feynman_quantum_operator(12, "Z", [1]).Q283c; Q285a := Feynman_quantum_operator(12, "c", "ZX", [1, 6, 7]).Q28; Q285b := Feynman_quantum_operator(12, "c", "XZ", [1, 8, 9]).Q285a; Q285c := Feynman_quantum_operator(12, "H", [1]).Q285b; Q285 := Feynman_quantum_operator(12, "Z", [1]).Q285c](http://www.maplesoft.com/view.aspx?SI=142318/9bfbbefb71969ac13b388910112fe0cc.gif)
|
>
|
|
>
|
|
>
|
|
>
|
![if `and`(`and`(`and`(evalb(Equal(Q281, -Q281c)) = true, evalb(Equal(Q282, -Q282c)) = true), evalb(Equal(Q283, -Q283c)) = true), evalb(Equal(Q285, -Q285c)) = true) then Q29 := Feynman_quantum_operator(11, "ZX", [2, 5]).Q27 end if; if evalb(Equal(Q29, Q25)) = true then print("Error Z2X5 corrected") end if](http://www.maplesoft.com/view.aspx?SI=142318/f059728297350151d97f900c248782c7.gif)
|
>
|
|
>
|
|
>
|
|
>
|
|
>
|
![Q30 := Feynman_quantum_operator(11, "cz", [3, 2]).Q29; Q31 := Feynman_quantum_operator(11, "cn", [3, 4]).Q30; Q32 := Feynman_quantum_operator(11, "cz", [3, 5]).Q31; Q33 := Feynman_quantum_operator(11, "cz", [8, 7]).Q32; Q34 := Feynman_quantum_operator(11, "cn", [8, 9]).Q33; Q35 := Feynman_quantum_operator(11, "cz", [8, 10]).Q34; Q36 := Feynman_quantum_operator(11, "cz", [2, 1]).Q35; Q37 := Feynman_quantum_operator(11, "cz", [2, 4]).Q36; Q38 := -I.Feynman_quantum_operator(11, "cn", [2, 4]).Q37; Q39 := Feynman_quantum_operator(11, "cz", [2, 5]).Q38; Q40 := Feynman_quantum_operator(11, "cz", [7, 6]).Q39; Q41 := Feynman_quantum_operator(11, "cz", [7, 9]).Q340; Q42 := -I.Feynman_quantum_operator(11, "cn", [7, 9]).Q41; Q43 := Feynman_quantum_operator(11, "cz", [7, 10]).Q42; Q44 := Feynman_quantum_operator(11, "cz", [6, 5]).Q43; Q45 := Feynman_quantum_operator(11, "cz", [6, 9]).Q44; Q46 := -I.Feynman_quantum_operator(11, "cn", [6, 9]).Q45; Q47 := Feynman_quantum_operator(11, "cz", [6, 10]).Q46; Q48 := Feynman_quantum_operator(11, "cz", [1, 4]).Q47; Q49 := -I.Feynman_quantum_operator(11, "cn", [1, 4]).Q48; Q50 := Feynman_quantum_operator(11, "cz", [1, 5]).Q49; Q51 := Feynman_quantum_operator(11, "cz", [11, 10]).Q50; Q52 := Feynman_quantum_operator(11, "cn", [5, 4]).Q51; Q53 := Feynman_quantum_operator(11, "cn", [10, 9]).Q52; Q54 := Feynman_quantum_operator(11, "Z", [1]).Q53; Q55 := Feynman_quantum_operator(11, "Z", [2]).Q54; Q56 := Feynman_quantum_operator(11, "Z", [6]).Q55; Q57 := Feynman_quantum_operator(11, "Z", [7]).Q56; Q58 := Feynman_quantum_operator(11, "Z", [11]).Q57; Q59 := Feynman_quantum_operator(11, "H", [1]).Q58; Q60 := Feynman_quantum_operator(11, "H", [2]).Q59; Q61 := Feynman_quantum_operator(11, "H", [3]).Q60; Q62 := Feynman_quantum_operator(11, "H", [5]).Q61; Q63 := Feynman_quantum_operator(11, "H", [6]).Q62; Q64 := Feynman_quantum_operator(11, "H", [7]).Q63; Q65 := Feynman_quantum_operator(11, "H", [8]).Q64; Q66 := Feynman_quantum_operator(11, "H", [10]).Q65; Q67 := Feynman_quantum_operator(11, "H", [11]).Q66; Q68 := Feynman_evaluate("Kronecker product", `<,>`(1, 0), `<,>`(1, 0), `<,>`(1, 0), `<,>`(a1, b1), `<,>`(1, 0), `<,>`(1, 0), `<,>`(1, 0), `<,>`(1, 0), `<,>`(a2, b2), `<,>`(1, 0), `<,>`(1, 0)); Q688 := Feynman_print(Q68); Q677 := Feynman_print(Q67); if evalb(Equal(Q688, Q677)) = true then print("Successful decoding") else print("decoding failed") end if](http://www.maplesoft.com/view.aspx?SI=142318/9aca0ab2bba6b49ad124563b1b11db2f.gif)
|
>
|
|
|