clear all;
close all;
clc;
%***************************************************
% 此函数用来生成m序列
% coef为反馈系数向量
%***************************************************
fb=8.184e+6;
fs=32.736e+6;
fc=2e+6; %载波频率
fp=10000;
Rb=8e+6;
coef=[0 0 1 0 0 0 0 0 0 1];
m=length(coef);
len=2^m-1; %得到最终生成的m序列的长度
backQ=0; %对应寄存器运算后的值,放在第一个寄存器
seq1=zeros(1,len); %给生成的m序列预分配
registers = [1 zeros(1, m-2) 1]; %给寄存器分配初始结果
for i=1:len
seq1(i)=registers(m);
backQ = mod(sum(coef.*registers),2); %特定寄存器的值进行相乘运算,即相加后模2
registers(2:length(registers)) = registers(1:length(registers)-1); %移位
registers(1)=backQ; %把相乘的值放在第一个寄存器的位置
end
% figure(1);
% subplot(3,2,1);
% stem(seq1);
% axis([0 100 0 1])
seq2=zeros(1,1023);
for n=1:length(seq1)
if seq1(n)==0
seq2(n)=-1;
else
seq2(n)=1;
end
end
% subplot(3,2,2);
% stem(seq2);
% % % % % % % % % % 过采样、成型滤波
seq4 = zeros(1,4092);
seq4(1:4:end) = seq2;
C=rcosine(1,4,'fir/sqrt',0.15,2);
seq_lv1=conv(C,seq4);
% seq_lv=filter(C,1,seq4);
% k1=size(seq_lv1);
% subplot(3,2,3);
% plot(seq_lv1(1:100));
for i=1:4092
l=8+i;
seq_lv2(i)=seq_lv1(l);
end
k2=size(seq_lv2);
% seq8=repmat(seq_lv2,1,8);
% % % % % % % % % % % % % 频偏信号
dt=1/fs;
t=0:dt:0.000125-dt;
s1=exp(1j*2*pi*fp*t);
e_psk1=seq_lv2.*s1;
% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%频率估计
% % c1=seq4;
% % c2=conj(c1);
% % r=e_psk1;
% % % c为本地PN序列,r(k)为接收到的序列,l2=85(综合各种因素得出)
% % z=r.*c2;
% % sum=0;
% % l1=32;
% % w=zeros(1,4060);
% % su=0;
% % for i=1:4060
% % w(i)=z(i+32);
% % end
% % for k=1:4060
% % su=su+w(k)*conj(z(k));
% % end
% % su
% % x=angle(su);
% % offest=x/l1*Rb/(2*pi);
% % offest
% % offest1=offest*4;
% % offest1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%锁频环
fs = 32.736e6;
T = 0.001;
n_accum = T * fs;
CNR = 40;
SNR = CNR -10*log10(fs);
addnoise = 0;
fi = 8e6;
% fd0 =offest1;
detfd = 0;
kf = 2^32/fs; %频率控制字转换系数
time = 0.5;
loopnum =fix(time/T); %%%%%500
% loopnum =1000;
%------------------------------------------------------------------------
%滤波器参数设置
%------------------------------------------------------------------------
%锁频环带宽
b_fll = 2;
wn = 1.89 * b_fll;
gain_nco = 2*pi*fs/2^32;
gain_disctim = 1;
K = gain_nco * gain_disctim;
%滤波器系数
k1 = (sqrt(2)*wn*T + wn^2*T^2)/K; %k1 =0.1119
k2 = sqrt(2)*wn*T/K; %k2 =0.1116
%------------------------------------------------------------------------
%参数设置完毕
%------------------------------------------------------------------------
%------------------------------------------------------------------------
%赋初值
%------------------------------------------------------------------------
endlasttime = 0;
fd_estimate = 0;
phaseadder = 0;
past_I_accum = 0;
past_Q_accum = 0;
freqoutdlf = 0;
past_past_freqoutdlf = 0;
past_freqoutdlf = 0;
% past_freqoutdlf = offest1;
past_freqerror = 0;
%------------------------------------------------------------------------
%参数设置完毕
%------------------------------------------------------------------------
for index = 1 : loopnum
%----------------------------------------------------------------------
%信号源产生
%----------------------------------------------------------------------
e_psk8= repmat(e_psk1,1,8);%重复发送8组数据。
cos_source=e_psk8;
%----------------------------------------------------------------------
%锁频环NCO
%----------------------------------------------------------------------
%Freqword = (fi + freqoutdlf) * kf;
Freqword= freqoutdlf * kf;
for ii_fllnco = 1 : n_accum
phaseadder = phaseadder + Freqword;
phaseadder = mod( phaseadder , 2^32 );
%截取高12位进行相位查表
phaseforlookup = fix( phaseadder / 2^20);
phasefllnco = 2*pi * phaseforlookup / 2^12;
sin_fllnco(ii_fllnco) = - sin(phasefllnco);
cos_fllnco(ii_fllnco) = cos(phasefllnco);
end
%----------------------------------------------------------------------
%下变频解调
%----------------------------------------------------------------------
ddc_I = cos_source .* cos_fllnco;
ddc_Q = cos_source .* sin_fllnco;
%----------------------------------------------------------------------
%积分清除
%----------------------------------------------------------------------
% I_accum = sum(ddc_I);
% Q_accum = sum(ddc_Q);
% % for i=2:32736
% % I_accum = ddc_I(i)+ddc_I(i-1);
% % Q_accum = ddc_Q(i)+ddc_Q(i-1);
% % end
%----------------------------------------------------------------------
%锁频环鉴别
%----------------------------------------------------------------------
% dot = past_I_accum * I_accum + past_Q_accum * Q_accum;
% cross = past_I_accum * Q_accum - past_Q_accum * I_accum;
%
% %四象限反正切鉴别
% freqerror = atan2(cross,dot) / (2*pi*T);
% %记录鉴别频差
% freqdiscim(index) = freqerror;
%
% %更新
% past_I_accum = I_accum;
% past_Q_accum = Q_accum;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%频率估计
% c1=seq4;
seq8= repmat(seq4,1,8);
c1=seq8;
c2=conj(c1);
if index==1
r=e_psk8;
else
r=ddc_I + 1j*ddc_Q;
% dt=1/fs;
% t=0:dt:0.000125-dt;
% s2=cos(2*pi*Freqword2*t)-j*sin(2*pi*Freqword2*t);
% r=e_psk1.* s2;
end
% r=e_psk1;
% c为本地PN序列,r(k)为接收到的序列,l2=85(综合各种因素得出)
z=r.*c2;
sum=0;
l1=32;
w=zeros(1,4060);
su=0;
for i=1:4060
w(i)=z(i+32);
end
for k=1:4060
su=su+w(k)*conj(z(k));
end
x=angle(su);
offest=x/l1*Rb/(2*pi);
% offest
offest1=offest*4;
% offest1
freqerror=offest1;
freqdiscim(index)=freqerror;
%更新
% past_I_accum = I_accum;
% past_Q_accum = Q_accum;
%----------------------------------------------------------------------
%锁频环滤波(二阶锁频环)
%----------------------------------------------------------------------
freqoutdlf = 2*past_freqoutdlf - past_past_freqoutdlf + k1*freqerror - k2*past_freqerror;
%更新
past_past_freqoutdlf = past_freqoutdlf;
past_freqoutdlf = freqoutdlf;
past_freqerror = freqerror;
%记录估计的多普勒
fd_estimate(index) = freqoutdlf;
end
figure;
subplot(2,1,1);
plot((1:loopnum)*T,freqdiscim);
grid on;
title('锁频环鉴别结果曲线');
subplot(2,1,2);
plot((1:loopnum)*T,fd_estimate);
title('锁频环跟踪结果曲线');
jianpinhuan.zip_aloneyvc_m序列同步_载波FLL_载波频偏估计_频偏 环路
版权申诉
123 浏览量
2022-07-14
19:13:23
上传
评论
收藏 2KB ZIP 举报
林当时
- 粉丝: 98
- 资源: 1万+
最新资源
- 基于Arduino Nano的红外循迹小车源码(高分课设).zip
- 将MS SQL数据库表里的数据内容生成SQL执行语句
- 基于MATLAB的钢板表面缺陷检测系统
- MS SQL里生成行政区域县区信息表和相应数据
- delphi实现DBGrid全选和反选功能
- 25C11F41-2B2A-4D1A-AAA8-7C654526B129.pdf
- Android Studio Jellyfish(android-studio-2023.3.1.18-cros.deb)
- MVC+EF框架+EasyUI实现权限管理源码程序
- python第66-75天,Day66-75.rar
- python后端服务project-of-tornado.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0