Quantum Signal Processing

QuIC Seminar, March 1st, 2022
By Jacob Watkins

Creating QSP Polynomials  from angles

Define signal-rotation operator  and signal-processing rotation

W[a_]:=(({{a, I (Sqrt[1-(a^2)])}, {I(Sqrt[1-(a^2)]), a}}))
S[ϕ_]:=(({{(E^(I ϕ)), 0}, {0, (E^(-I ϕ))}}))

Choose signal angles

ϕ=π*{0,0,0,0,0}

NMR BB1 Protocol

(*η=.5  ArcCos[-.25];
ϕ={π/2,−η,2η,0,−2η,η};*)

Construct QSP operator

U[a_] := Module[{result = S[ϕ[[1]]]},
For[k=2,k≤ Length[ϕ],k++,
result=S[ϕ[[k]]].W[a].result
];
Expand[Simplify[result]]]

Extract polynomials

P[a_]:=U[a][[1,1]];
Q[a_]:=Expand[Simplify[-I U[a][[1,2]] /(Sqrt[1-(a^2)])]];

Plot the results

(*Plot[{((Abs[P[a]])^2),((Abs[Q[a]])^2)},{a,-1,1}, PlotRange->{0,3},PlotLegends->"Expressions"]*)
Plot[{Re[P[a]],Im[P[a]]},{a,-1,1}, PlotRange->{-2,2},PlotLegends->"Expressions"]
Plot[{Re[Q[a]],Im[Q[a]]},{a,-1,1}, PlotRange->{-2,2},PlotLegends->"Expressions"]

Check “normalization” condition

Simplify[Conjugate[P[a]]P[a]+(1-(a^2))Conjugate[Q[a]] Q[a],a∈(Reals)]

Application to Hamiltonian simulation

• For quantum dynamics, we need to construct a polynomial approximation to . 
• We also need to assume , which can be done with appropriate rescaling. 

Jacobi Auger expansion (similar to plane wave expansion in scattering theory):

Where  are Bessel and  are Chebyshev. Truncate for polynomial approximation

P[λ_,t_, trunc_]:=BesselJ[0,t]+ 2 Sum[(((-I))^k) BesselJ[k,t] ChebyshevT[k,λ],{k,1,trunc}]

With[{λ = .5, tmax = 10,trunc=10},Plot[{Re[(E^(-I λ t))], Re[P[λ, t, trunc]]},{t,0,tmax}, PlotLegends->{"cos(λt)", "Re[P(t)]"}]]

s[x_]={-I (E^((5 I π)/6)) x,-1}; (*{p[x],q[x]}*)
InvT[x_,phi_]:=(({{(E^(-I phi)) x, -(E^(I phi)) (-1+(x^2))}, {-(E^(-I phi)), (E^(I phi)) x}}))
phases={};
While[Exponent[s[x][[1]],x]≥ 1,
phase=Simplify[(1/(2 I))Log[((Coefficient[s[x][[1]],x,Exponent[s[x][[1]],x]])/(Coefficient[s[x][[2]],x,Exponent[s[x][[2]],x]]))]];
PrependTo[phases,phase];
s[x_]=Simplify[InvT[x,phase].s[x],{0<x<1}];
]
phase = Simplify[-I Log[s[x][[1]]]];
PrependTo[phases,phase];
Print[s[x]]

ClearAll[t]