Gardner定时同步算法

  • U4_733471
    了解作者
  • 3.4KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-06-07 08:42
    上传日期
完整的gardner定时同步算法,能够有效的对高阶QAM信号进行时偏校正,同时分析了环路误差和环路抖动,性能良好,适合新手学习。
Gardner定时环路.rar
  • my_gardner.m
    3.6KB
  • g3.m
    3.7KB
内容介绍
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(1,N,M); x=modulate(modem.qammod(M),s); %调制,构造用于M-QAM调制的调制器对象 % figure(1); plot(x, 'r.'); %脉冲成型 x_t=rcosflt(x,Fd,Fs,'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(ma,mb); 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的时间序号,指示n,n_temp,nco, w=[0.5,zeros(1,N-1)]; %环路滤波器输出寄存器,初值设为0.5 n=[0.7 zeros(1,Ns-1)]; %NCO寄存器,初值设为0.9 n_temp=[n(1),zeros(1,Ns-1)]; u=[0.6,zeros(1,2*N-1)];%NCO输出的定时分数间隔寄存器,初值设为0.6 yI=zeros(1,2*N); %I路内插后的输出数据 yQ=zeros(1,2*N); %Q路内插后的输出数据 time_error=zeros(1,N); %Gardner提取的时钟误差寄存器 ik=time_error; qk=time_error; k=1; %用来表示Ti时间序号,指示u,yI,yQ ms=1; %用来指示T的时间序号,用来指示a,b以及w strobe=zeros(1,Ns); ns=length(aI)-2; while(i<ns) 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(k,2); %时钟误差提取模块,采用的是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(ms); end ms=ms+1; % y(p) = yI(k) + sqrt(-1) * yQ(k); % p =p+1; end k=k+1; u(k)=n(i)/w(ms); end i=i+1; end figure(5); subplot(311);plot(u);xlabel('运算点数');ylabel('分数间隔'); subplot(312);plot(time_error);xlabel('运算点数');ylabel('定时误差'); subplot(313);plot(w);xlabel('运算点数');ylabel('环路滤波器输出'); % iq=ik+qk*sqrt(-1); % L=length(iq); % scatterplot(iq(L*0.6:end));
评论
    相关推荐
    • 程序员算法
      这是一个算法文档压缩包,其中包括《可能与不可能的边界》、《具体数学》、《算法的乐趣》、《啊哈!算法》。这些书很适合对算法感兴趣的朋友,书籍讲解算法非常有趣。注意,其中有些文档是试读版本。
    • 算法实验
      算法实验算法实验算法实验算法实验算法实验算法实验算法实验算法实验
    • 大数据算法
      本书共分为10章,第1章概述大数据算法,第2章介绍时间亚线性算法,第3章介绍空间亚线性算法,第4章概述外存算法,第5章介绍大数据外存查找结构,第6章讲授外存图数据算法,第7章概述MapReduce算法,第8章通过一系列...
    • 算法
      算法 算法
    • SIFT 算法
      SIFT 算法SIFT 算法SIFT 算法SIFT 算法
    • RSA算法
      RSA算法是公钥加密算法中重要的算法之一,本算法即实现RSA的加解密过程。
    • 分词算法介分词算法
      算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语分词介绍分词算法 汉语...
    • unify算法
      unify算法unify算法unify算法unify算法unify算法unify算法unify算法unify算法unify算法unify算法unify算法unify算法unify算法
    • 寻路算法
      寻路算法 寻路封装
    • dsp算法算法算法算法
      dsp各种算法