📄 shishi.m
字号:
tempt = fix(sum(index_regist)/4);
% control_regist = zeros(1,4); % 控制寄存器清零。
if tempt<43
Peak_distance = Peak_distance-1;
end
if tempt>45
Peak_distance = Peak_distance+1;
end
window_shift = index;
end
end
end
if syn_track_flag == 1 % 进入跟踪阶段。
window_count = window_count+1;
if window_count>=window_shift-3 & window_count<=window_shift+3
track_window(:,2:end) = track_window(:,1:end-1);
track_window(1,1) = match_out(1,1);
track_window(2,1) = match_out(2,1);
peak_val_regist2(2:end) = peak_val_regist2(1:end-1);
peak_val_regist2(1) = tempt1^2+tempt2^2;
if peak_val_regist2(1)==0
peak_val_regist2(1) = 0;
else
peak_val_regist2(1) = 10*log10(peak_val_regist2(1));
end
end
if window_count == 48
[value index] = max(peak_val_regist2);
sig_out_flag = 1;
match_max_c = track_window(1,index);
match_max_s = track_window(2,index);
if index~=3
window_shift = Peak_distance + (index-3);
end
if value>=16 % 控制峰值功率门限
control_regist(2:end) = control_regist(1:end-1);
control_regist(1) = 1;
else
control_regist(2:end) = control_regist(1:end-1);
control_regist(1) = 0;
end
if control_regist == zeros(1,4) %
syn_track_flag =0;
catch_count = 0;
peak_val_regist1 = zeros(1,44);
catch_window = zeros(2,44);
end
end
end
% if mod(match_count,44) == 0
% sig_out_flag =1;
% end
%-------------------------------------------------------------
if sig_out_flag ==1
sig_out_flag = 0;
% [value index] = max(abs(match_out(1,:)));
% match_max_c = match_out(1,index);
% [value index] = max(abs(match_out(2,:)));
% match_max_s = match_out(2,index);
tempt1 = match_max_c/sqrt(match_max_c^2+match_max_s^2);
tempt2 = match_max_s/sqrt(match_max_c^2+match_max_s^2);
match_max_c = tempt1;
match_max_s = tempt2;
if count2 ==0
diterm_sig_c = 1;
diterm_sig_s = 1;
S_afc = 0;
phase_err = S_afc;
% decode_out = [1 1];
pre_crot = sqrt(2)/2;
pre_srot = 0;
count2 = count2 +1;
end
if count2 >=1
count2 = count2 +1;
if count2 ==20
count2 = count2 ;
end
diterm_sig_c = match_max_c * pre_crot + match_max_s * pre_srot;
diterm_sig_s = match_max_s * pre_crot - match_max_c * pre_srot;
diterm_sig_c = diterm_sig_c/sqrt(2);
diterm_sig_s = diterm_sig_s/sqrt(2);
pre_crot = (match_max_c+match_max_s)/2;
pre_srot = (match_max_s-match_max_c)/2;
if diterm_sig_c>0 & diterm_sig_s>0
decode(1) = -1;
decode(2) = -1;
elseif diterm_sig_c<0 & diterm_sig_s>0
decode(1) = -1;
decode(2) = 1;
elseif diterm_sig_c<0 & diterm_sig_s<0
decode(1) = 1;
decode(2) = 1;
elseif diterm_sig_c>0 & diterm_sig_s<0
decode(1) = 1;
decode(2) = -1;
end
if flag ==1 % flag 为帧同步标志位。
if decode(1)==-1
decode(1) = 0;
end
if decode(2) ==-1
decode(2) = 0;
end
decode_out = [decode_out decode];
else
pn_regist(:,1:end-1) = pn_regist(:,2:end);
pn_regist(:,end) = [decode(1);decode(2)];
pn_mul_result = pn_regist(1,:)*pn_sequence'+pn_regist(2,:)*pn_sequence';
end
%---------------- err inspect---------------------------
S_afc = sign(diterm_sig_c)*diterm_sig_s - sign(diterm_sig_s)*diterm_sig_c;
phase_err = S_afc/(match_max_c^2+match_max_s^2)/2;
end
end
if snr<=-8
if pn_mul_result >=16
flag = 1;
if flag == 1&show_flag==1
pn_mul_result
show_flag =0;
end
end
elseif snr<-4
if pn_mul_result >=19
flag = 1;
if flag == 1&show_flag==1
pn_mul_result
show_flag =0;
end
end
elseif snr<0
if pn_mul_result >=20
flag = 1;
if flag == 1&show_flag==1
pn_mul_result
show_flag =0;
end
end
else
if pn_mul_result >=22
flag = 1;
if flag == 1&show_flag==1
pn_mul_result
show_flag =0;
end
end
end
else
continue;
end
if i<=88
nco_out = 0;
else
fx(:,2) = fx(:,1) +1.*Af*fx(:,1)/88 + 1.*Bf*phase_err/88;
nco_out = Cf*fx(:,1);
fx(:,1) = fx(:,2);
% xf1(2) = xf1(1);
% xf1(1) = phase_err-xf3(1);
% xf2(2) = xf2(1);
% xf3(2) = xf3(1);
% xf2(1) = (xf2(2)+(c1+c2)*xf1(1)-c1*xf1(2)); % 环路滤波器的输出
% xf3(1) = xf2(1)+xf3(2);
% nco_out = xf3(1);
% store = [store nco_out];
end
end
err_num = 0;
err_bit = zeros(1,length(source1));
if length(decode_out)==length(source1)-2
decode_out = [decode_out 0 0];
end
for i = 1:length(source1)
if (decode_out(i)~= source1(i))
err_num = err_num+1;
err_bit(i) = 1;
end
end
err_rate = [err_rate err_num/length(source1)];
end
snr = snr_min:step:snr_max;
semilogy(snr,err_rate,'r-*');
err_rate
grid on
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -