資源簡介
完整的gardner定時同步算法,能夠有效的對高階QAM信號進行時偏校正,同時分析了環路誤差和環路抖動,性能良好,適合新手學習。

代碼片段和文件信息
clc;
clear?all;
N?=?10000;?
M?=?64;%M進制
SNR?=?20;%高斯信道信噪比
RolloffCoef?=?0.3;%根升余弦濾波器的滾降系數
Fd?=?5e6;%樣本符號率
Fs=?5e6?*?8;%采樣率
Ts?=?65;
rcos?=?my_cos(Ts);
%?plot(rcos);
%產生隨機序列
s?=?randint(1NM);
x=modulate(modem.qammod(M)s);???%調制構造用于M-QAM調制的調制器對象
%?figure(1);?plot(x?‘r.‘);??????
%脈沖成型
x_t=rcosflt(xFdFs‘sqrt‘RolloffCoef);
%?figure(2);?plot(x_t?‘r.‘);
%通過高斯白信道
c_t?=?awgn(x_t?SNR?‘measured‘);???%加噪聲
%?figure(3);?plot(c_t?‘r.‘);
%匹配濾波
h1?=?rcosfir(RolloffCoef?[-4?4]?8?1?‘sqrt‘);
delay?=?(length(h1)+1)/2;
%加預濾波器
hh2?=?diff(h1);
hh22?=?[hh2?0];
hh?=?kaiser(65?7.97);
hk1?=?h1?.*?hh22;
hk2?=?h1?.*?rcos.‘;
hk3?=?h1?.*?hh.‘;
r_t1?=?conv(c_t?h1);
r_t?=?r_t1(delay:?end-delay?-47);
%?figure(4);?plot(r_t?‘r.‘);
%?figure;freqz(hk3);
%?mm1?=?20?*?log(abs(fft(r_t)))?/?log(10);
%?
%?k=length(mm1);
%?
%?xx_f?=?[0:?(Fs/k):?Fs/2];
%?figure;plot(xx_f?mm1(1?:?length(xx_f)));
aI1?=?real(r_t);
bQ1?=?imag(r_t);
L?=?length(aI1);
aI=[aI1(1:2:L)];%2倍抽取?為何先8倍插值,再2倍抽取?
bQ=[bQ1(1:2:L)];
ma=max(abs(aI));
mb=max(abs(bQ));
m=max(mamb);
aI=aI/m;bQ=bQ/m;
N=floor(length(aI)/4);
Ns=4*N;??%總的采樣點數
bt=0.001;
c1=8/3*bt;
c2=32/9*bt*bt;
i=3;????%用來表示Ts的時間序號指示nn_tempnco
w=[0.5zeros(1N-1)];??%環路濾波器輸出寄存器,初值設為0.5
n=[0.7?zeros(1Ns-1)];?%NCO寄存器,初值設為0.9
n_temp=[n(1)zeros(1Ns-1)];?
u=[0.6zeros(12*N-1)];%NCO輸出的定時分數間隔寄存器,初值設為0.6
yI=zeros(12*N);???????%I路內插后的輸出數據?
yQ=zeros(12*N);???????%Q路內插后的輸出數據
time_error=zeros(1N);?%Gardner提取的時鐘誤差寄存器
ik=time_error;
qk=time_error;
k=1;????%用來表示Ti時間序號指示uyIyQ
ms=1;???%用來指示T的時間序號用來指示ab以及w
strobe=zeros(1Ns);
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);
????????%內插濾波器模塊
????????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(k2);
????????%時鐘誤差提取模塊,采用的是Gardner算法
????????if(strobe(k)==0)
????????????%取出插值數據
????????????ik(ms)=yI(k);
????????????qk(ms)=yQ(k);
????????????
????????????%每個數據符號計算一次時鐘誤差
????????????if(k>2)
???????????????Ia=(yI(k)+yI(k-2))/2;
???????????????Qa=(yQ(k)+yQ(k-2))/2;
???????????????time_error(ms)=[yI(k-1)-Ia?]??*(yI(k)-yI(k-2))+[yQ(k-1)-Qa]??*(yQ(k)-yQ(k-2));
????????????else
????????????????time_error(ms)=(yI(k-1)*yI(k)+yQ(k-1)*yQ(k));
????????????end
????????????%環路濾波器每個數據符號計算一次環路濾波器輸出
????????????if(ms>1)
????????????????w(ms+1)=w(ms)+c1*(time_error(ms)-time_error(ms-1))+c2*time_error(ms-1);
????????????????%w(ms+1)=w(ms)+c1*(time_error(ms)-time_error(ms-1));
????????????else
????????????????w(ms+1)=w(ms)+c1*time_error(ms)+c2*time_error(m
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3726??2017-09-06?20:55??my_gardner.m
?????文件???????3741??2017-09-06?19:43??g3.m
-----------?---------??----------?-----??----
?????????????????7467????????????????????2
- 上一篇:RBF神經網絡做回歸預測
- 下一篇:基于AT89S51單片機的PID溫度控制系統設計
評論
共有 條評論