hh模型仿真matlab程序,gardner算法算法matlab仿真请教(附程序)
%定時(shí)恢復(fù)程序:
clear all
N=6000;??%符號(hào)數(shù)
K=4;? ???%每個(gè)符號(hào)采4個(gè)樣點(diǎn)
Ns=K*N;??%總的采樣點(diǎn)數(shù)
w=[0.5,zeros(1,N-1)];??%環(huán)路濾波器輸出寄存器,初值設(shè)為0.5
n=[0.7 zeros(1,Ns-1)]; %NCO寄存器,初值設(shè)為0.9
n_temp=[n(1),zeros(1,Ns-1)];
u=[0.6,zeros(1,2*N-1)];%NCO輸出的定時(shí)分?jǐn)?shù)間隔寄存器,初值設(shè)為0.6
yI=zeros(1,2*N);? ?? ? %I路內(nèi)插后的輸出數(shù)據(jù)
yQ=zeros(1,2*N);? ?? ? %Q路內(nèi)插后的輸出數(shù)據(jù)
time_error=zeros(1,N); %Gardner提取的時(shí)鐘誤差寄存器
i=1;? ? %用來表示Ts的時(shí)間序號(hào),指示n,n_temp,nco,
k=1;? ? %用來表示Ti時(shí)間序號(hào),指示u,yI,yQ
ms=1;? ?%用來指示T的時(shí)間序號(hào),用來指示a,b以及w
strobe=zeros(1,Ns);
c1=5.41*10^(-3);? ?c2=3.82*10^(-6);??%環(huán)路濾波器系數(shù)
%############################
%這段代碼是原程序中仿真輸入的psk數(shù)據(jù)
bitstream=randint(1,N,2);
psk2=pskmod(bitstream,2);
xI=zeros(1,Ns);
xQ=zeros(1,Ns);
xI(1:8:8*N)=real(psk2);%8倍插值?為何要這樣設(shè)計(jì)
xQ(1:8:8*N)=imag(psk2);
%截短后的根升余弦匹配濾波器
h1=rcosfir(0.5,[-8,8],4,1,'sqrt');
hw=kaiser(65,3.97);
hh=h1.*hw.';aI1=conv(xI,h1);
bQ1=conv(xQ,h1);
L=length(aI1);
%仿真輸入數(shù)據(jù)
aI=[aI1(26:2
),0,0];%2倍抽取?為何先8倍插值,再2倍抽取?
bQ=[bQ1(26:2
),0,0];
%##############################
ns=length(aI)-2;
while(i
n_temp(i+1)=n(i)-w(ms);
if(n_temp(i+1)>0)
n(i+1)=n_temp(i+1);
else
n(i+1)=mod(n_temp(i+1),1);
%內(nèi)插濾波器模塊
FI1=0.5*aI(i+2)-0.5*aI(i+1)-0.5*aI(i)+0.5*aI(i-1);
FI2=1.5*aI(i+1)-0.5*aI(i+2)-0.5*aI(i)-0.5*aI(i-1);
FI3=aI(i);
yI(k)=(FI1*u(k)+FI2)*u(k)+FI3;
FQ1=0.5*bQ(i+2)-0.5*bQ(i+1)-0.5*bQ(i)+0.5*bQ(i-1);
FQ2=1.5*bQ(i+1)-0.5*bQ(i+2)-0.5*bQ(i)-0.5*bQ(i-1);
FQ3=bQ(i);
yQ(k)=(FQ1*u(k)+FQ2)*u(k)+FQ3;
strobe(k)=mod(k,2);
%時(shí)鐘誤差提取模塊,采用的是GARDNER算法
if(strobe(k)==0)
%每個(gè)數(shù)據(jù)符號(hào)計(jì)算一次時(shí)鐘誤差
if(k>2)
time_error(ms)=yI(k-1)*(yI(k)-yI(k-2))+yQ(k-1)*(yQ(k)-yQ(k-2));
else
time_error(ms)=(yI(k-1)*yI(k)+yQ(k-1)*yQ(k));
end
%環(huán)路濾波器.每個(gè)數(shù)據(jù)符號(hào)計(jì)算一次環(huán)路濾波器輸出
if(ms>1)
w(ms+1)=w(ms)+c1*(time_error(ms)-time_error(ms-1))+c2*time_error(ms);
else
w(ms+1)=w(ms)+c1*time_error(ms)+c2*time_error(ms);
end
ms=ms+1;
end
k=k+1;
u(k)=n(i)/w(ms);
end
i=i+1;
end
figure(1);
subplot(311);plot(u);
subplot(312);plot(time_error);
subplot(313);plot(w);
%##############################
% bt=0.01;
% c1=8/3*bt;
% c2=c1*4/3*bt;
N=6000;??%符號(hào)數(shù)
K=4;? ???%每個(gè)符號(hào)采4個(gè)樣點(diǎn)
Ns=K*N;??%總的采樣點(diǎn)數(shù)
w=[0.5,zeros(1,N-1)];??%環(huán)路濾波器輸出寄存器,初值設(shè)為0.5
n=[0.7 zeros(1,Ns-1)]; %NCO寄存器,初值設(shè)為0.9
n_temp=[n(1),zeros(1,Ns-1)];
u=[0.6,zeros(1,2*N-1)];%NCO輸出的定時(shí)分?jǐn)?shù)間隔寄存器,初值設(shè)為0.6
yI=zeros(1,2*N);? ?? ? %I路內(nèi)插后的輸出數(shù)據(jù)
yQ=zeros(1,2*N);? ?? ? %Q路內(nèi)插后的輸出數(shù)據(jù)
time_error=zeros(1,N); %Gardner提取的時(shí)鐘誤差寄存器
i=1;? ? %用來表示Ts的時(shí)間序號(hào),指示n,n_temp,nco,
k=1;? ? %用來表示Ti時(shí)間序號(hào),指示u,yI,yQ
ms=1;? ?%用來指示T的時(shí)間序號(hào),用來指示a,b以及w
strobe=zeros(1,Ns);
bitstream=randint(1,N,2);
psk2=pskmod(bitstream,2);
%直接對(duì)psk調(diào)制信號(hào)進(jìn)行4倍插值濾波后得到仿真數(shù)據(jù)
aI=rcosflt(real(psk2),1,4,'sqrt',0.5);
bQ=rcosflt(imag(psk2),1,4,'sqrt',0.5);
%采用這種數(shù)據(jù)產(chǎn)生方式,從仿真波形看為何不收斂?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ns=length(aI)-16;
while(i
n_temp(i+1)=n(i)-w(ms);
if(n_temp(i+1)>0)
n(i+1)=n_temp(i+1);
else
n(i+1)=mod(n_temp(i+1),1);
%內(nèi)插濾波器模塊
FI1=0.5*aI(i+2)-0.5*aI(i+1)-0.5*aI(i)+0.5*aI(i-1);
FI2=1.5*aI(i+1)-0.5*aI(i+2)-0.5*aI(i)-0.5*aI(i-1);
FI3=aI(i);
yI(k)=(FI1*u(k)+FI2)*u(k)+FI3;
FQ1=0.5*bQ(i+2)-0.5*bQ(i+1)-0.5*bQ(i)+0.5*bQ(i-1);
FQ2=1.5*bQ(i+1)-0.5*bQ(i+2)-0.5*bQ(i)-0.5*bQ(i-1);
FQ3=bQ(i);
yQ(k)=(FQ1*u(k)+FQ2)*u(k)+FQ3;
strobe(k)=mod(k,2);
%時(shí)鐘誤差提取模塊,采用的是GARDNER算法
if(strobe(k)==0)
%每個(gè)數(shù)據(jù)符號(hào)計(jì)算一次時(shí)鐘誤差
if(k>2)
time_error(ms)=yI(k-1)*(yI(k)-yI(k-2))+yQ(k-1)*(yQ(k)-yQ(k-2));
else
time_error(ms)=(yI(k-1)*yI(k)+yQ(k-1)*yQ(k));
end
%環(huán)路濾波器.每個(gè)數(shù)據(jù)符號(hào)計(jì)算一次環(huán)路濾波器輸出
if(ms>1)
w(ms+1)=w(ms)+c1*(time_error(ms)-time_error(ms-1))+c2*time_error(ms);
else
w(ms+1)=w(ms)+c1*time_error(ms)+c2*time_error(ms);
end
ms=ms+1;
end
k=k+1;
u(k)=n(i)/w(ms);
end
i=i+1;
end
figure(2);
subplot(311);plot(u);
subplot(312);plot(time_error);
subplot(313);plot(w);
總結(jié)
以上是生活随笔為你收集整理的hh模型仿真matlab程序,gardner算法算法matlab仿真请教(附程序)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业数字化转型:构建“感知—思考—响应—
- 下一篇: 在c语言中形参的作用域,【单选题】下列标