平方变换载波同步 matlab,matlab源码-costas载波同步环.docx

41528d3028836879cd698677c3999917.gifmatlab源码-costas载波同步环.docx

在利用相干解调的数字通信系统中,载波同步是正确解调的前提,也是实际通信中的一项关键技术,没有载波同步就不可能正确的恢复出数字信号。常用的载波同步方法有平方环和COSTAS环等,由于COSTAS环有跟踪低信噪比的抑制载波信号的特性而在实际系统中得到广泛的应用,目前国内外对COSTAS环尤其是改进后的COSTAS环进行了一系列的研究,尚耀波等建立了COSTAS环的Z域模型,通过软件编程实现,称之为软件COSTAS环;李波等根据COSTAS环的结构,在FPGA芯片中完成了硬件实现。然而,这些研究大部分都是基于传统的COSTAS环结构,同时也没有考虑到程序在实际应用中的资源占用情况。本文在仔细分析COSTAS环的构成原理后,根据实际硬件的片上资源调整了滤波器的结构,提出一种用CIC滤波器来取代传统的环路滤波器。最后,本文结合项目的应用,首先在SIMULINK平台上实现了该算法,然后移植到VERILOG上,用实际的FPGA芯片对此算法进行了验证。1COSTAS环原理11传统COSTAS环的结构科斯塔斯环又称同相正交环COSTAS环,COSTAS环由COSTAS1956年提出,其环路工作频率为载波频率,远远低于平方环的工作频率,实现成本较低。其原理框图如图1(A)ACOSTAS环原理框图B改进后COSTAS环原理框图图1改进前后COSTAS环原理框图在COSTAS环环路中,误差信号V7是通过两路低通滤波输出相乘得到。压控振荡器VCO输出信号直接供给一路相乘器,供给另一路的则是压控振荡器输出经90O移相后的信号。两路相乘后经过低通滤波和环路可以得到仅与载波相位偏差信号有关的信号V7用此信号来控制VCO就可以调整VCO输出和载波信号保持一致的相位。现在从理论上对COSTAS环的工作过程加以说明。设输入调制信号为,则(11)(12)经低通滤波器后的输出分别为将V5和V6在相乘器中相乘,得,(13)(13)中Θ是压控振荡器输出信号与输入信号载波之间的相位误差,当Θ较小时,(14)(14)中的V7大小与相位误差Θ成正比,它就相当于一个鉴相器的输出。用V7去调整压控振荡器输出信号的相位,最后使稳定相位误差减小到很小的数值。这样压控振荡器的输出就是所需提取的载波。12本设计COSTAS环的结构考虑到FPGA资源的消耗的问题,本设计在实际过程中采用了CIC加低通滤波器的结构,并且用CIC滤波器代替了环路滤波器,改进后的结构图如图1(B)所示,仿真结果表明,在提取载波效果相同的基础上,改进后的COATAS环大大节省了资源。2COSTAS环的SIMULINK实现本SIMULINK仿真在MATLAB65环境下通过。仿真模型如图2所示。调制模块采用BERNOULLIBINARYGENERATOR模块产生的32K的NRZ码与SINEWAVE模块产生的128K的载波相乘,然后与压控振荡器VCO恢复的本地载波进行相乘,VCO输出信号90度移相是通过希尔伯特变换来完成的。图2COSTAS环载波恢复和解调模型调制后的信号与VCO恢复的相互正交的两路本地载波进行相乘后,分为IQ两路,经过低通滤波器成为基带信号的解调输出,考虑到采样频率过高会造成FPGA芯片资源消耗严重,所以此处低通滤波器用CIC滤波器加低通滤波器的结构代替。COSTAS环设计的重点是环路滤波和VCO参数的调整。1环路滤波本设计环路滤波部分用CIC滤波取代。CIC滤波器可以对数据流进行降速处理,本设计IQ两路采用抽取后滤波,降低4倍的采样速率(见图3中的DOWNSAMPLE模块)。图2中的CIC内部结构图如图3所示,后面的FPGA仿真也验证了此方法的优点和正确性。图3CIC滤波器结构图2VCO本COSTAS环调频信号用VOLTAGECONTROLLEDOSCILLATOR产生,中心频率和输出信号幅度和载波信号保持一致,压控灵敏度根据实际情况计算调节。(21)(22)本设计中为信号的中心频率,为调整步进,MCLK取4096M,N取22位,则(23)压控灵敏度取09765625。(3)仿真结果图4为运行SIMULINK模型后的波形。图4(A)是图2中示波器SCOPE的波形,为低通滤波后的IQ两路信号与VCO输入电压。图4(B)是图2中示波器SCOPE1的波形,为调制载波与恢复载波。A低通滤波后的IQ两路信号与VCO输入电压B调制载波与恢复载波图4COSTAS环SIMULINK仿真结果由图4(A)仿真波形可以看出,VCO输入电压在过一段时间后波形稳定,低通滤波后的IQ两路信号恒包络并且一路趋于为零,表示环路得到锁定。图4(B)仿真波形可以看出,环路恢复出的载波与调制载波频率相同,表示环路已经成功的恢复出了载波信号。3COSTAS环的FPGA实现本系统由VERILOG语言进行设计,硬件选择CYCLONEⅡ系列的EP2C5Q208C8芯片,布局布线。综合工具选择QUARTUSⅡ81,波形仿真工具MODELSIMSE61F,系统由正交分量相乘模块,CIC滤波模块,低通滤波模块,误差相乘模块和DDS模块组成。FPGA实现后的顶层RTL结构图如图5所示。图5FPGA实现后的顶层RTL结构图1DDS模块DDS模块调用QUARTUS自带的IPCORENCO数控振荡器。NCO在波形仿真中要注意拷贝CORE中的DDS_COS_CHEX,DDS_COS_FHEX,DDS_SIN_CHEX,DDS_SIN_FHEX这4个文件到SIMULATION\MODELSIM文件夹下,此4个文件用来产生正弦波,如果仿真过程中VCO没波形,要注意检查此问题,并且在改变NCO的设置时,同样要检查这4个文件是否同时更新。2环路锁定的判定图6A为环路锁定后的波形,图6B为环路锁定后的波形放大图。图中COSTAS_OUT为环路恢复出的正弦波,DDS_IN为压控振荡器的输入电压,I_LPF为I路信号经过低通滤波器后信号,Q_LPF为Q路信号经过低通滤波器后信号。A环路锁定后的波形B环路锁定后的波形放大图图6COSTAS环MODELSIM仿真结果由图6可以看出,此环路已经很好的锁定。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
clear all; close all; clc; % 最近同步技术里面有很多关于costas的帖子,很多集中讨论路滤波的,也有自己做了程序发出来。但都没有一个完整的结论和系统的有方向性的讨论点.最近做了一个simulink仿真.个人认为现有的所谓经典方法很难被别人掌握.因此,从锁相的原理出发,结合现成的经典方法,做了这个仿真.说明一下: % 一个是高载频,一个是低载频的。低载频的我用的FIR代替的积分清零器,大家可以换成积分清零器件.阶数应该几阶就可以了。 % % 1:如果是没有进行成形滤波的数据,那么信息数据率不要太高,以防止在锁定 时间内发生极性翻转,这样就锁不住了。(说简单点就是信息数据对载波的调制作用引起的载波相位的突变.) % % 2.积分清零的目的是滤除倍频信号,在系统采样率(系统时钟)相对中频信号频率只是几倍关系时,积分清零阶数可以很低,几阶.原理在于数字频率对模拟频率的 归一化. % % 3.鉴相方式非常关键.将鉴频差和相差结合起来,是一个新的发现.这样可以很好的锁定.通过调整对应的两个控制增益,便可独立的控制相位和频率的锁定速度.相差(信号点所在的位置的相位)和频差(相位点旋转的方向和快慢)可以很直观的在星座图上看出来. % % 4.路滤波器的输出进行积分操作,能够很好的把反馈送入NCO. % % 5.路滤波器参数设置没什么新意思.阻尼0.707.噪声带宽25 % % 欢迎大家下回去琢磨,然后讨论!论坛空间也有限,想好了再把你的问题说出来,谢谢! % 阅过之后,更敢无新意,我的看法如下: % 1,costas loop在不同的应用场合(诸如,符号速率,动态应力,多谱勒,信道境等等),其路设计就会有非常大的差异. % 比如,在某些情况下,路滤波的前或后,可能要进行滤更新操作.以匹配NCO的需要.但通常的科并不需要这样的设计等等. % 2,变型的科很多,难以统一一种模式. % 3,经典的科理论很重要,很多变型都是根据不同的应用进行改进的. % 切忌:想以一种仿真结论来定论所有形式的科设计. % 同意楼上的。掌握一个跟踪路的本质是重要的,光Costas就有好多种,关键看你要应用在什么场合,实现复杂度有什么要求。 % 如果楼主想对costas有点更深入的认识,建议考虑一下低SNR境下或者高动态境的载波跟踪这种例子可能会更有些帮助。这种情况下每一个节的设计考虑就都不像你所说的那样简单了。至少不会有“路滤波器参数设置没什么新意思.阻尼0.707.噪声带宽25”。 % 楼上两位说得很有道理,确实,针对不同的应用场合,路的参数设置,滤波器的设计,鉴相方式,都会有所变化. % 我发这篇帖的目的,就是希望大家可以从costas原理的角度,通过仿真,掌握各种参数,各个关键部分,对的影响,从而真正掌握锁相的设计方法.而不是每遇到新问题就失去了主动权,找不到北. % % 还希望大家够针对具体的锁相的问题,各抒己见.不泛泛而谈,深入下去,发扬我们大家的研学精神! % gardner定时同步算法是一种适合高速信号的 % 反馈式算法,它只需要每符号两个采样点,且载波 % 相位误差不影响算法的定时性能,鉴于以上优点, % 该算法适合多种应用场合。 % % 它是从平方律定时推导出的,依靠检测码元转换处的 % 过零点来定时,因此数字基带信号的归零特性很大程度 % 上影响算法的性能,一般升余弦滤波器成型的数字波形 % 在码元转换点是不归零的,使码元转换点归零,一般使用 % 模拟系统中针对平方律定时的预滤波方法,理论和实践证明 % 这种方法是有效的,几乎可以消除定时抖动。 % % 这里分享我找到的有关gardner算法的一些文章,基本涵盖了 % 各个放面的内容,包括算法原文,算法性能分析,算法的应用 % 和改进方面的文章 % 锁相有几个体现捕捉性能的参数: % 对于无源滤波二阶路 % 捕捉带=4*sqrt(K*阻尼因子*路自然角频率) % 快捕带= 4*阻尼因子*路自然角频率 %% % 对于二阶 % 根据带宽与阻尼系数的关系 % 一般取阻尼系数为0.707 % 剩下的就是确定路带宽了 % 当然要确定最终的k1k2,鉴相或者鉴频增益也是很重要的 % GPS的跟踪,一般采用数字锁相的结构. 路等效噪声带宽的设计数字路的一个重要参数, %该参数影响着路的收敛速度,跟踪精度,以及路可收敛的输入频差范围等, 反过来带宽的设计也由这些因素决定. % % 5楼给的数值应该分别是载波锁相路噪声带宽, 锁频的噪声带宽以及码的噪声带宽. %通过噪声带宽可以求出路滤波器的参数,(通常限定在3阶路以下), 具体方法可以参考书籍: % GPS原理及应用 第一, 二版, 还有一本是fundamentals of global positonging system receiver % 这两本书比较适合初学者. % 经常有师弟师妹问我怎样学习LDPC码,现在我将个人学习LDPC码的心得写在下面,以供参考。 % 1. 了解LDPC码的基本概念(主要是校验矩阵与Tanner图的关系)之后,学习LDPC码的和积译码算法。这里建议首先用概率测度推出无图下,变量节点和校验节点消息的更新公式,透彻理解“消息”、“更新”和“传递”的含义。 % 2. 看LDPC码和积译码算法的程序。要点在双循链表、两个消息更新的计算步骤(检验节点和变量节点运算,也叫水平步骤和垂直步骤)。(c 程序可以在网上Mackey的网站下,我这也有)。 % 3. 对LDPC码的和积译码算法充分理解之后,可以看密度进化理论及其高斯逼近算法,推倒文章中的公式是很有助于理解和积译码算法的。 % 4.经过步骤3,我们应该对什么样的LDPC码性能会好有一个初步的理解,这样我们可以试着设计 LDPC码。(高斯逼近和密度进化程序我这也有) % 5.理解信道编码定理和Turbo原理,“码长”“随机”“迭代译码“”对于一个实用好码很重要。 % 另外,在这之前最好弄清楚信噪比,编码速率,BER和FER的含义。 %% gardner 位同步测试程序 %% M.Moeneclaey提出的数控方法 %% m(k+1)-m(k)=int[Ti/Ts+uk]; %% u(k+1)=[uk+Ti/Ts]mod1 clc;clear;format long; fb=2e+6; %% 符号速率 fs=56e+6; %% 采样速率 ps=0; %%%%%%%%%平方根滤波器%%%%%%%%%因为是采样率是28倍符号速率,所以采用了500阶的滤波器系数,保证通带和阻带的特性 load FIR2M; Num=FIR2M; i=0;q=0; %%%%%%%%建立数据缓存区间%%%%%%%%%%%%% dataI=zeros(1,501); dataQ=zeros(1,501); bufferI=zeros(1,501); bufferQ=zeros(1,501); bitsyninI=zeros(1,4); %% 插值滤波器的输入,每次插值需要连续四个数据 bitsyninQ=zeros(1,4); GarI=zeros(1,3); GarQ=zeros(1,3); %%========路滤波器=============== K0=fb*0.05; %% 路的NCO增益 C2=2; Alpha=0.5; Kd=2*C2/((1-Alpha^2/4))*sin(pi*Alpha/2); %% 鉴相增益 K=K0*Kd; %% 路增益 wn=0.03*fb; %% 路滤波器的自然频率 Kesai=1/sqrt(2); %% 路滤波器的衰减因子 %%============ 路滤波器系数设计=========== g1=2*wn*Kesai/K; g2=wn^2/fb/K; g=[-g1;g1+g2]; cnt=0; %% 控制数据输出 LPF=0; %% 路滤波输出 pre_TED=0; %% 前一鉴相值 TED=0; %% 当前鉴相值 %% NCO控制参数 deltamk=1; deltamkcnt=0; V=fs/fb/2; uk=0; t=0.014; %% 仿真时间 TimeLen=fix(t*fs); %%-------建立存储文件------------------------------------- if (exist('data1.txt')>0) delete data1.txt; end fid1=fopen('data1.txt','a+'); if (exist('data2.txt')>0) delete data2.txt; end fid2=fopen('data2.txt','a+'); if (exist('data3.txt')>0) delete data3.txt; end fid3=fopen('data3.txt','a+'); disp('QPSK---------BitSync') for k=1:TimeLen ProcessShow(k,TimeLen,25); %%过程显示 ps=ps+fb; %% if(ps>=fs) ps=ps-fs; i=randint*2-1; %% 输入随机数据 输出转化为双极性 q=randint*2-1; end dataI=[dataI(2:end),i]; %% 没有采用常规的插0方法,而是采用采样保持的方式 dataQ=[dataQ(2:end),q]; di=dataI*Num'; %% 成型滤波,Num为501位平方根升余弦滤波器 dq=dataQ*Num'; T_sign=(di+1j*dq); %% 发送信号 %%%%%%滑动窗存储接收信号,并完成卷积运算%%%%%%%%%%%%% bufferI=[bufferI(2:end),real(T_sign)]; %滑动窗存储接收信号 bufferQ=[bufferQ(2:end),imag(T_sign)]; ri=bufferI*Num'; %% 匹配滤波 rq=bufferQ*Num'; fprintf(fid1,'%f,%f\n',ri,rq); %%存储匹配滤波后的波形 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% deltamkcnt=deltamkcnt+1; bitsyninI=[bitsyninI(2:4),ri]; %%存储插值滤波前的连续4点 bitsyninQ=[bitsyninQ(2:4),rq]; if (flag) flag=0; C_4 = 0.5 * uk^2 - 0.5 * uk; % c_4=c(-2);其中内插系数为BS_Alpha=0.5 C_3 = -0.5 * uk^2 + ( 0.5 + 1 ) * uk; % c_3=c(-1) C_2 = -0.5 * uk^2 + ( 0.5 - 1 ) * uk + 1; % c_2=c(0) C_1 = 0.5 * uk^2 - 0.5 * uk; % c_1=c(1) C=[C_1,C_2,C_3,C_4]; Inter_I=bitsyninI*C'; %插值输出 Inter_Q=bitsyninQ*C'; GarI=[GarI(2:3),Inter_I]; %用数组存放,表示I(k-2),I(k-1),I(k) GarQ=[GarQ(2:3),Inter_Q]; cnt=mod(cnt+1,2); if (cnt==1) %% 以数据速率完成路滤波 I=Inter_I; %% 同步数据输出 Q=Inter_Q; fprintf(fid2,'%f,%f\n',I,Q); %% 存储同步后的I,Q路数据 TED=GarI(2)*(GarI(3)-GarI(1))+GarQ(2)*(GarQ(3)-GarQ(1)); %Error=I(k-1)*[I(k)-I(k-2)]+Q(k-1)*[Q(k)-Q(k-2)]; LPF=[pre_TED,TED]*g+LPF; %路滤波 pre_TED=TED; end end V=V-LPF/256; %V近似等于Ti/Ts; if (deltamkcnt==deltamk) flag=1; %%产生插值脉冲 deltamkcnt=0; %%计数器, deltamk=fix(uk+V); %%计算下一脉冲时刻 uk=mod(uk+V,1); V=fs/fb/2; %%保证V是一个近似等于Ti/Ts的值 end fprintf(fid3,'%f,%f,%f,%f\n',uk,deltamk,LPF,TED);%%%%%%%%%%%%%%%%存储观测参数 end disp('The End!'); load data3.txt; figure; plot(data3(:,1)) title('小数间隔索引uk'); figure; plot(data3(:,2)) title('整数间隔索引差M') load data2.txt figure;plot(data2(12000:end,1)+1j*data2(12000:end,2),'.') title('同步后的星座图')

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值