I've implemented a DSSS receiver in an FPGA. The code rate NCO is controlled by an early/late detector. The carrier NCO is controlled by a Costas Loop. I chose PI gain constants for the control loops by trial and error but would like to do it more scientifically by analysing stability using a Bode plot of open loop gain. I always do it this way for analogue PLLs; but I'm new to z-domain stability analysis.
TimW - I bought your book; but, to be honest, found it quite heavy going. Nevertheless, adapting some code from the accompanying CD, I came up with this Scilab script:
kPD = 2^20; kP = 2^(41-64); kI = 2^(15-64); kNCO = 10000; G = -kPD * (kP + kI/(%z-1)) * kNCO / (%z-1); G.dt = 1e-3; scf(0); clf; bode(G);
The resulting Bode plot never even passes through unity gain! So is the system unconditionally stable? Here's a simplified version of the FPGA code:
`define KP 41 `define KI 15
reg [63:0] phase, rate; // 64 places after the binary point reg signed [31:0] err; // = Early - Late
always @ (posedge clk) // 10 MHz if (millisecond) begin phase