目录

1. DPLL简介

2. DPLL基本仿真模型

2.1 相位误差检测

2.2 环路滤波器

2.3 NCO

2.4 完整的模型

3. 代码及仿真结果

4. 小结


1. DPLL简介

DPLL(Digital PLL)的目的是使得NCO(Numerically Controlled Oscillator, 数值控制振荡器)的输出相位锁定跟踪某个参考相位信号。如下图所示为DPLL的基本模型。环路包括一个相位误差检测器、一个环路滤波器以及一个NCO。DPLL的行为特性(dynamic characteristics)主要由环路滤波器特性决定。环路滤波器的输出控制NCO的频率和相位,在环路收敛锁定后,NCO输出相位与参考信号的相位之间的误差均值趋近于零。

图 1 DPLL基本模型

常用的环路滤波器为二阶环路滤波器,可以跟踪相位(由于对相位求导会得到频率,锁定了相位自然也就消除了频率误差)。在某些特定应用中根据系统要求,也可能只使用一阶环路滤波器的话,或甚至三阶或以上的环路滤波器,但是并不常见。

2. DPLL基本仿真模型

在这个基本仿真模型中,输入信号直接就是相位信号,NCO也只生成相位信号,相位误差就是求两者的差而得。这样做是因为相位检测本身并不是DPLL内在的处理,相位误差检测在不同的应用中有不同的实现方法。这里我们只考虑DPLL本身的行为仿真,所以可以暂时撇开所有非本质的东西。

以下说明中,符号“D”表示一个时钟节拍的延迟。

2.1 相位误差检测

如上所示,本模型直接以相位信号作为输入,因此相位误差检测单纯地就是NCO生成的相位信号与输入相位信号的差,如下所示:

pe= ref_phase(n-1) - u(n-1); % phase error
pe  = 2*(mod(pe+0.5,1) - 0.5);

第2条语句表示对相位进行卷绕(wrap-around)处理,将相位值限制到[-1,1]的范围以内(参考后面NCO中的说明)。这里的乘数因子2其实没有必然性,可以与别的环路参数融合。

2.2 环路滤波器

二阶环路滤波器包含两条支路,一条是积分支路,用于跟踪频率,另一条是比例支路,用于跟踪残留相位偏差。两条支路的增益系数分别记为KI和KP(I代表Integrator, P代表Proportional),这两个参数决定了DPLL的自然频率(natural frequency)以及阻尼系数(damping factor),关于如何确定这两个参数将在后续篇章进行介绍。这种环路滤波器也被称为Proportional + Integral or Lead-Lag filter. 它所对应的差分方程如下所示:

% Loop Filter, ‘pe’ represents phase error, coming from phase error detector
int(n) = KI*pe + int(n-1); % integrator
vtune(n) = int(n) + KL*pe; % loop filter output

图 2 环路滤波器

2.3 NCO

NCO(数值控制振荡器:Numerically Controlled Oscillator)用于生成正弦波输出,或者单纯地输出相位信息,如下图所示。在本仿真中,只需要输出归一化相位。

如图所示,NCO其实就是一个相位积分器(在离散系统中也称为累加器:accumulator)。积分器的输入包含两部分信息:

  1. “Fnco*Ts”表示NCO的基本振荡频率。
  2. Vtune,这个名字中的V借自于其模拟表亲“压控振荡器VCO”(当然,这只是一个名字而已。表示它类似于或者说对应于VCO的电压输入)。来自于前级的环路滤波器输出。表示基于环路滤波器的输出信号对NCO在每一个time-step的相位增量的(相对于基准频率Fnco)的调节量。“Knco”只是一个用于提高模型调节灵活的增益参数(也可以被吸收到环路滤波器参数中去)。

“Phase wrap-around”,顾名思义,相位卷绕处理。因为相位(或者说正弦波)的周期为2*pi,所以需要把相位卷绕到长度为2*pi的区间内,可以是[0,2*pi],也可以是[-pi, pi],视实现方便而定。在本模型中,进一步可以归一化到[0,1],也可以是[-1/2, 1/2],这个也仅仅是为了实现方便而已,没有必然性。

图 3 NCO model

以上NCO模型可以用时域差分方程表示如下:

    x    = fnco*Ts + u(n-1) + vtune(n-1)*Knco; % cycles NCO phaseu(n) = mod(x,1); % cycles NCO phase mod 1y(n) = sin(2*pi*u(n-1)); % NCO sine output

2.4 完整的模型

将相位误差检测、环路滤波器和NCO组装到一起即得到了我们的基本仿真模型,如下图所示:

图 4 DPLL时域仿真模型模块框图

3. 代码及仿真结果

在以下仿真中,我们给定的输入信号是一个采样率25MHz、频率为3.75MHz的正弦波的相位。考虑NCO的初始振荡频率Fnco相比以上频率有100ppm的偏差:

fnco  = fref*(1 + 100*1e-6);

仿真的目的是要看经过DPLL的调节后最终NCO输出的正弦波信号的频率是不是与输入信号的频率相一致,进一步,其瞬时相位与输入相位是否“一致”,毕竟DPLL的目的是相位锁定,而不仅仅是频率锁定。

clc; clear; close all;
format long;
format compact;N    = 20000; % number of samples
fref = 3.75e6;   % Hz freq of ref signal
fs   = 25e6;  % Hz sample rate
Ts   = 1/fs;  % s sample timen    = 0:N-1; % time index
t    = n*Ts*1000; % msref_phase  = fref*n*Ts + 0.7; % cycles phase of reference signal with random initial phase
ref_phase  = mod(ref_phase,1); % cycles phase mod 1, normalized radian
ref_signal = sin(2*pi*ref_phase);Knco  = 1/4096; % NCO gain constant
KI    = 0.0032; % looop filter integrator gain
KL    = 5.1; % loop filter linear (proportional) gainfnco  = fref*(1 + 100*1e-6); % Hz NCO initial frequency, with 100-ppm initial frequency error
u     = zeros(1,N);
int   = zeros(1,N);
perr_buf = zeros(1,N);
vtune    = zeros(1,N);% compute difference equations in an explicit loop
for n= 2:Nif mod(n,round(N/10)) == 0fprintf(1,'n = %d\n', n);end% NCOx    = fnco*Ts + u(n-1) + vtune(n-1)*Knco; % cycles NCO phaseu(n) = mod(x,1); % cycles NCO phase mod 1y(n) = sin(2*pi*u(n-1)); % NCO sine output% Phase Detectorif(1)pe= ref_phase(n-1) - u(n-1); % phase errorelse % Seems that this one matches with Figure9. But maybe it doesn't matter(?)pe= ref_phase(n) - u(n); % phase errorendpe  = 2*(mod(pe+0.5,1) - 0.5); % wrap if phase crosses +/- 1/2 cycleperr_buf(n) = pe;% Loop Filterint(n) = KI*pe + int(n-1); % integratorvtune(n) = int(n) + KL*pe; % loop filter output
endfigure;
subplot(2,1,1); plot(t,perr_buf),grid,axis([0 0.5 -1 1]);
xlabel('t (ms)'),ylabel('phase error'); title('phase error');subplot(2,1,2); plot(t,vtune),grid,axis([0 0.5 -3.5 1]);
xlabel('t (ms)'),ylabel('vtune');
title('vtune: loop filter output');% figure; plot(u(:)); title('NCO output');figure;
pwelch(y(10000:end),2048,512,2048,fs); hold on; % Take the stable output for frequency analysis
pwelch(ref_signal,2048,512,2048,fs);
legend('spectrum of the generate sin wave', 'spectrum of the reference input');

图 5 相位跟踪结果示意图

图 6 输入输出频谱对比

如以上两图所示,相位误差检测器的输出最终收敛于0,表明NCO输出相位很好地跟住了输入相位,实现了相位锁定。自然地,输出信号频率也与输入信号会保持一致,这一点输入输出信号频谱对比图中也可以看出来。

4. 小结

以上是一个最基本的DPLL的仿真。

进一步,将结合分析或仿真来探讨DPLL的参数设计,针对不同的应用需求如何设计参数能够获得最佳性能。

此外,以上模型只是让NCO生成了输入正弦波信号的一个复制品(replica)。如果只能做这个的话,就没有什么意思了,直接使用输入信号就好了。当然不是这样的。接下来将讨论DPLL的几种不同的实际应用,它们的核心与本文所介绍的模型相一致,只不过为了迎合不同的应用需求要在基本模型的基础上加一些“调味品”。

参考文献:

[1] Digital PLL's -- Part 1 - Neil Robertson (dsprelated.com)

数字锁相环路(DPLL)介绍及其matlab仿真相关推荐

  1. 数字PID控制算法原理及Matlab仿真

    引言 最近碰到一个项目需要用到PID控制算法,于是在网上找了一些资料学习了一下,发现网上对于PID算法的Matlab仿真方面的内容比较少,所以我就把我自己所学习到的内容分享给大家.本次博文主要介绍了位 ...

  2. 数字基带调制解调matlab仿真,数字通信系统课程设计--基于MATLAB数字基带调制.doc...

    吉林工程技术师范学院 信息工程学院 第一章 绪论3 1.1通信的发展史简介3 1.2设计的目的及意义4 第二章 数字基带信号5 2.1数字基带调制原理5 2.2单极性不归零波形6 2.3双极性不归零波 ...

  3. 数字信号载波传输的Matlab仿真

    摘要:数字信号与信息科学的迅猛发展,计算机和通信系统的迅速发展的理论和实践,通信系统是将信息从信源发送到一个或者多个目的地,用来达到各种信息传输过程的一般技术体系.数字信号调制与解调过程中起着重要的信 ...

  4. fvdm 跟驰模型 matlab仿真_【新书推荐】【2009.01】控制系统MATLAB计算及仿真(第3版)(黄忠霖)...

    本书包括MATLAB语言基础.控制系统MATLAB仿真基础.控制系统MATLAB计算与仿真3篇. 本书上篇介绍了MATLAB 7.1 系统的相关知识,包括MATLAB 7.1系统概述与活的笔记本Not ...

  5. 使用python代替matlab仿真线性控制系统(倒立摆)

    matlab可以仿真很多控制系统,其实python也有这种中功能.不仅是基础的自动控制原理所涉及的定理如伯德图,奈奎斯特曲线,pid之类的能够仿真,较为复杂的线性系统理论上面的一些原理也可以仿真. 这 ...

  6. lf模型下声门脉冲matlab程序,数字语音处理及MATLAB仿真.rar第二章

    <数字语音处理及MATLAB仿真.rar第二章>由会员分享,可在线阅读,更多相关<数字语音处理及MATLAB仿真.rar第二章(60页珍藏版)>请在人人文库网上搜索. 1.第二 ...

  7. 语音信号调制matlab,第二章 语音信号的数字模型 数字语音处理及MATLAB仿真 教学课件.ppt...

    第二章 语音信号的数字模型 数字语音处理及MATLAB仿真 教学课件 第二章 语音信号的数字模型 2.1 概述 本章重点介绍语音信号产生的数字模型,对语音信号的特性和听觉特性做一般介绍. 2.2 语音 ...

  8. matlab抽样仿真混叠图,数字信号处理及MATLAB仿真__前言

    前言 历史背景 像许多电子工程课程一样,数字信号处理(Digital Signal Processing,DSP)最初是一门研究生课程,近30年来,其逐渐向本科课程渗透,成为电子与计算机工程的本科课程 ...

  9. 超级干货:BPSK/QPSK数字调制系统误码率MATLAB仿真

    本文旨在通过简单实例来对基于MATLAB的数字调制解调系统仿真进行一个较为全面的介绍,并加深对一些基础知识的理解.且有详细解释大多数人在进行数字调制MATLAB仿真时遇到的大部分问题. 数字调制的概念 ...

最新文章

  1. 在团800运维工作总结之squid做回源图片的二级缓存
  2. windows下flink示例程序的执行
  3. bugku-杂项 听首音乐
  4. telnet到设备里 php_PHP自动生成设备周检修计划
  5. [蓝桥杯][算法提高VIP]凶手-思维
  6. .流程引擎对接的三种方式_02
  7. 解封装(四):avformat_find_stream_info探测获取封装上下文并打印
  8. python实现团队游戏小程序——你画我猜
  9. CCS 软件仿真 支持6678
  10. win10隐藏任务栏_推荐我使用的一个任务栏软件:7+ Taskbar Tweaker
  11. windows11百度网盘下载,win11iso镜像百度云下载
  12. 凯恩斯乘数到底有多么神奇?
  13. php超链接打不开了,excel超链接无法打开怎么办
  14. linux程序接口实验,实验 一 操作系统接口实验
  15. python进行表白,画爱心
  16. 【iMessage苹果推信家庭推】位置推通过苹果实现iMessage群发的Apple script脚本代码如下: tell application “Messages” set csvDatator
  17. Authentication(认证方式)与 Authorization(授权)
  18. Git与Bitbucket配合使用教程
  19. 【Java并发】double-checked-locking设计模式
  20. 【Docker】——镜像

热门文章

  1. 标签软件如何批量打印多排条码标签
  2. hmacsha256 java实现_java实现HMACSHA256(md5私钥key)加密签名
  3. 基本农田卫星定位图_多种全球定位导航系统的对比,信号及频谱分布
  4. 面试经历(签约华为,违约华为,签约移动)
  5. 团队任务分配管理软件,可以分配团队任务的团队管理软件
  6. 《战地3》9800gt 画面设置 ultra跑50帧以上,最优设置方法公开
  7. 利用Python3.x 删除字符串中的特殊字符——即ASCII控制字符
  8. 小程序主体为个人的教育类小程序备案——教育APP备案问题
  9. AMS1117 sot-223 稳压芯片的dxp库
  10. C语言每日一练——第72天:打印杨辉三角(使用两种方法)