FET IQ Demodulator

Needs["Controls`LinearControl`"]
$TextStyle={FontFamily->"Helvetica",FontSize->13};
plotopt=PlotStyle->{{Thickness [0.007], RGBColor [1,0,0]},
			    {Thickness [0.007], RGBColor [0,0,1]},
			    {Thickness [0.007], RGBColor [0.1,0.7,0.2]},
			    {Thickness [0.007], RGBColor [0.5,0.5,0.2]}};
textoptsmall={TextStyle->{FontFamily->"Helvetica",FontSize->11}};

par[r1_,r2_]:=(1/((1/r1)+(1/r2)))
par[r1_,r2_,r3_]:=(1/((1/r1)+(1/r2)+(1/r3)))

Parameters

C6: fast capacitor to ground at mixer output
C3: large capacitor to ground at mixer output
R11: series resistance into mixer
RDS: mixer on resistance
R6: series resistor into OpAmp
L1: series inductor into OpAmp
L1R: series resistance of L1 coil
R2: feedback resistor of OpAmp
C1: feedback capacitor of OpAmp

Normal

prm={C6->1*^-9,C3->47*^-9,R11->182,RDS->8,R6->10,L1->2.2*^-6,L1R->2.8,R2->1000, C1->1*^-9,s->2π I f}

Wide bandwidth

prmW={C6->1*^-9,C3->4.7*^-9,R11->180,RDS->8,R6->10,L1->0.22*^-6,L1R->0.84,R2->1000, C1->100*^-12,s->2π I f}

Ultra-wide bandwidth

prmUW={C6->1*^-9,C3->2.2*^-9,R11->180,RDS->8,R6->10,L1->0.22*^-6,L1R->0.84,R2->1000, C1->10*^-12,s->2π I f}

Formulae

v1: Voltage at the IF point
i1: current into virtual ground
v2: voltage at OpAmp output

z2=s L1+R6 +L1R;
z1=par[(1/(s C6 )),(1/(s C3)),z2]//Together
v1=(z1/(R11+RDS+z1));
i1=v1/z2;
v2=i1 par[R2,(1/(s C1))];

Plots

Normal

BodePlotEx[v1/.prm/.f->1*^3ff,{ff,100,1000},plotopt,XAxisLabel->"kHz"]

BodePlotEx[i1/.prm/.f->1*^3ff,{ff,100,1000},plotopt,XAxisLabel->"kHz"]

BodePlotEx[v2/.prm/.f->1*^3ff,{ff,10,1000},plotopt,XAxisLabel->"kHz"]

Wide bandwidth

BodePlotEx[v1/.prmW/.f->1*^3ff,{ff,1000,10000},plotopt,XAxisLabel->"kHz"]

BodePlotEx[i1/.prmW/.f->1*^3ff,{ff,1000,10000},plotopt,XAxisLabel->"kHz"]

BodePlotEx[v2/.prmW/.f->1*^3ff,{ff,100,10000},plotopt,XAxisLabel->"kHz"]

Ultra-wide bandwidth

BodePlotEx[v1/.prmUW/.f->1*^3ff,{ff,1000,10000},plotopt,XAxisLabel->"kHz"]

BodePlotEx[i1/.prmUW/.f->1*^3ff,{ff,1000,10000},plotopt,XAxisLabel->"kHz"]

BodePlotEx[v2/.prmUW/.f->1*^3ff,{ff,100,10000},plotopt,XAxisLabel->"kHz"]

Comparison

BodePlotEx[{v2/.prm/.f->1*^3ff,v2/.prmW/.f->1*^3ff,v2/.prmUW/.f->1*^3ff},{ff,100,10000},plotopt,XAxisLabel->"kHz"]

Values (Normal)

DC gain

dcgain=Abs[v2]/.prm/.{f->0.}

Poles

Collect[Denominator[v2],s]
f/.Solve[%==0/.s->-2π f,f]/.prm//N
Abs[%]
((Abs[%%])/(2 Re[%%]))

Bandwidth

f/.FindRoot[Abs[v2]==(dcgain/(Sqrt[2]))/.prm,{f,0.5*^5,5*^5}]

Phase at 10 kHz

((Arg[v2])/Degree)/.prm/.{f->10*^3}

Phase at 100 kHz

((Arg[v2])/Degree)/.prm/.{f->100*^3}

LC circuit resonant frequency and Q

LCpoles=Solve[z2/z1==0,s];
LComega=(Sqrt[Times@@(s/.LCpoles)])//Simplify;
LCQ=(LComega/(Plus@@(-s/.LCpoles)))//Simplify;
(Sqrt[(LCQ^2)])//Simplify//PowerExpand;

(LComega/(2π))/.prm
LCQ/.prm

Values (Wide bandwidth)

DC gain

dcgain=Abs[v2]/.prmW/.{f->0.}

Poles

Collect[Denominator[v2],s]
f/.Solve[%==0/.s->-2π f,f]/.prmW//N
Abs[%]
((Abs[%%])/(2 Re[%%]))

Bandwidth

f/.FindRoot[Abs[v2]==(dcgain/(Sqrt[2]))/.prmW,{f,0.5*^5,5*^5}]

Phase at 10 kHz

((Arg[v2])/Degree)/.prmW/.{f->10*^3}

Phase at 100 kHz

((Arg[v2])/Degree)/.prmW/.{f->100*^3}

Phase at 1 MHz

((Arg[v2])/Degree)/.prmW/.{f->1*^6}

LC circuit resonant frequency and Q

LCpoles=Solve[z2/z1==0,s];
LComega=(Sqrt[Times@@(s/.LCpoles)])//Simplify;
LCQ=(LComega/(Plus@@(-s/.LCpoles)))//Simplify;
(Sqrt[(LCQ^2)])//Simplify//PowerExpand;

(LComega/(2π))/.prmW
LCQ/.prmW

Values (Ultra-wide bandwidth)

DC gain

dcgain=Abs[v2]/.prmUW/.{f->0.}

Poles

Collect[Denominator[v2],s]
f/.Solve[%==0/.s->-2π f,f]/.prmUW//N
Abs[%]
((Abs[%%])/(2 Re[%%]))

Bandwidth

f/.FindRoot[Abs[v2]==(dcgain/(Sqrt[2]))/.prmUW,{f,0.5*^6,5*^6}]

Phase at 10 kHz

((Arg[v2])/Degree)/.prmUW/.{f->10*^3}

Phase at 100 kHz

((Arg[v2])/Degree)/.prmUW/.{f->100*^3}

Phase at 1 MHz

((Arg[v2])/Degree)/.prmUW/.{f->1*^6}

LC circuit resonant frequency and Q

LCpoles=Solve[z2/z1==0,s];
LComega=(Sqrt[Times@@(s/.LCpoles)])//Simplify;
LCQ=(LComega/(Plus@@(-s/.LCpoles)))//Simplify;
(Sqrt[(LCQ^2)])//Simplify//PowerExpand;

(LComega/(2π))/.prmUW
LCQ/.prmW