OK this is my MATLAB code, it's taking tooooooooooo much time to execute. I actually halt it!
LPF.mat contains LPF coeffs.
rf_signal is produced in another m file and is found in workspace.
NCO_model is the generated MegaCore MATLAB model. It produces one sin & cos sample for one input phase sample.
load LPF.mat
N = length(rf_signal);
phi_inc = zeros(1, N);
bb_sig_I = zeros(1, N);
bb_sig_Q = zeros(1, N);
I_f = zeros(1, N);
Q_f = zeros(1, N);
error_sig = zeros(1, N);
err = zeros(1, N);
% NCO
fs = 1.0E8;
f = 5.0E6;
phi_inc(1) = ((2^32)*f/fs);
for i = 1:N
= NCO_model(phi_inc(i));
% Downconverting to Baseband
bb_sig_I(i) = rf_signal(i)*cos_out;
bb_sig_Q(i) = rf_signal(i)*sin_out;
% Filtering
I_f(i) = filter(LPF, bb_sig_I(i));
I_f(i) = filter(LPF, I_f(i));
Q_f(i) = filter(LPF, bb_sig_Q(i));
Q_f(i) = filter(LPF, Q_f(i));
% Error
error_sig(i) = I_f(i).*Q_f(i);
% Loop Filter (Leaky Integrator)
alpha = 0.1;
err(i) = filter(alpha, , error_sig(i));
phi_inc(i+1) = phi_inc(i) + err(i);
end