clear
close all
clc
fs=1000;
signal_rate=40;
freq_error=1;
time_end=100;
EbN0=5;
t=0:1/fs:time_end;
t(end)=[];
signal=[ones(1,signal_rate*time_end/2);zeros(1,signal_rate*time_end/2)];
signal=reshape(signal,1,signal_rate*time_end);
signal=signal*2-1;
signal=repmat(signal,length(t)/length(signal),1);
signal=reshape(signal,1,length(t));
plot(t,signal);
signal_I=signal.*cos(2*pi*freq_error*t);
signal_Q=signal.*sin(2*pi*freq_error*t);
signal_I=awgn(signal_I,EbN0,'measured');
signal_Q=awgn(signal_Q,EbN0,'measured');
figure
plot(t,signal_I,t,signal_Q);
carrier_out=complex(zeros(size(t)),zeros(size(t)));
freq_out=zeros(size(t));
phase_out=zeros(size(t));
d_freq=0;
d_phase=0;
d_damping=sqrt(2)/2; % d_damping must less than 1
d_loop_bw=2*pi/200; % d_loop_bw is between 2*pi/200 ~ 2*pi/100
denom=1+2*d_damping*d_loop_bw+d_loop_bw^2;
d_alpha=(4*d_damping*d_loop_bw)/denom;
d_beta=(4*d_loop_bw^2)/denom;
for n=1:length(t)
freq_out(n)=d_freq;
phase_out(n)=d_phase;
carrier_out(n)=complex(signal_I(n),signal_Q(n))*exp(-1i*d_phase);
error=real(carrier_out(n))*imag(carrier_out(n));
error1=abs(error+1);
error2=abs(error-1);
error=(error1-error2)/2;
d_freq=d_freq+d_beta*error;
d_phase=d_phase+d_freq+d_alpha*error;
if d_phase>2*pi, d_phase=d_phase-2*pi;
elseif d_phase<-2*pi, d_phase=d_phase+2*pi;end
end
figure
plot(t,real(carrier_out),t,imag(carrier_out));
figure
plot(t,real(carrier_out));
科斯塔斯环
最新推荐文章于 2022-12-01 21:08:12 发布