comm.SymbolSynchronizer
正确的符号计时时钟倾斜
描述
的comm.SymbolSynchronizer
系统对象™用于PAM、PSK、QAM和OQPSK调制方案,纠正单载波发射机和接收机之间的符号定时时钟偏差。有关更多信息,请参见符号同步概述.
请注意
输入信号在采样率基础上工作,输出信号在符号率基础上工作。
要纠正符号定时时钟倾斜:
创建
comm.SymbolSynchronizer
对象并设置其属性。调用带有参数的对象,就像调用函数一样。
要了解更多关于System对象如何工作的信息,请参见什么是系统对象?
创建
属性
除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放
函数解锁它们。
如果属性是可调,您可以随时更改其值。
有关更改属性值的更多信息,请参见在MATLAB中使用系统对象设计系统.
调制
- - - - - -调制类型
PAM /相移键控/ QAM的
(默认)|“OQPSK”
调制类型,指定为PAM /相移键控/ QAM的
或“OQPSK”
.
可调:没有
数据类型:字符
|字符串
TimingErrorDetector
- - - - - -定时误差检测法
零交点(decision-directed)
(默认)|加德纳(non-data-aided)
|早期的后期(non-data-aided)
|Mueller-Muller (decision-directed)
定时误差检测器方法,指定为零交点(decision-directed)
,加德纳(non-data-aided)
,早期的后期(non-data-aided)
,或Mueller-Muller (decision-directed)
.此属性指定同步器中使用的定时错误检测方案。有关更多信息,请参见定时错误检测(TED).
可调:没有
数据类型:字符
|字符串
SamplesPerSymbol
- - - - - -每个符号的样本
2
(默认)|大于1的整数
DampingFactor
- - - - - -环路滤波器的阻尼系数
1
(默认)|积极的标量
NormalizedLoopBandwidth
- - - - - -环路滤波器的归一化带宽
0.01
(默认)|(0,1)范围内的标量
环路滤波器的归一化带宽,指定为(0,1)范围内的标量。环路带宽归一化为输入信号的采样率。有关更多信息,请参见BnT年代在循环过滤.
请注意
若要确保符号同步器锁定,请设置NormalizedLoopBandwidth
属性的值小于0.1
.
可调:是的
数据类型:双
|单
DetectorGain
- - - - - -鉴相器增益
2.7
(默认)|积极的标量
使用
对于R2016b之前的版本,请使用一步
函数来运行系统对象算法。关于一步
是您创建的对象,后面跟着本节中显示的参数。
例如,Y = step(obj,x)
而且Y = obj(x)
执行等效操作。
描述
输入参数
样品
- - - - - -输入样本
标量(默认)|列向量
输入样本,指定为PAM-、PSK-、QAM-或oqpsk调制的单载波信号的标量或列向量。
数据类型:双
|单
复数支持:是的
输出参数
符号
-同步符号
列向量
同步符号,作为可变大小的列向量返回。输出符号从输入示例继承数据类型。对于有维度的输入N桑普-by-1表示输出有维数N信谊1。N信谊近似等于N桑普除以Nsps,在那里Nsps等于SamplesPerSymbol
属性值。的最大输出大小将截断输出长度
.
timingErr
-估计的计时误差
[0,1]范围内的标量|范围[0,1]内元素的列向量
每个输入样本的估计计时误差,作为[0,1]范围内的标量或[0,1]范围内元素的列向量返回。估计的定时误差归一化到输入采样率。timingErr
是否具有与输入相同的数据类型和大小样品
.
对象的功能
要使用对象函数,请将System对象指定为第一个输入参数。例如,释放名为obj
,使用以下语法:
发行版(obj)
例子
qpsk调制信号的正确符号定时误差
纠正有噪声的qpsk调制信号上的固定符号计时错误。检查同步接收信号的误码率。
初始化仿真参数。
M = 4;% QPSK的调制顺序nSym = 5000;包中符号的数量SPS = 4;每个符号的样本百分比timingErr = 2;%计时误差样本信噪比= 15;信噪比% (dB)
创建根凸起余弦(RRC)传输和接收过滤器系统对象。
txfilter = com . raisedcosinetransmitfilter (...“OutputSamplesPerSymbol”, sps);rxfilter = com . raisedcosinereceivefilter (...“InputSamplesPerSymbol”sps,“DecimationFactor”2);
创建一个符号同步器系统对象来纠正计时错误。
symbolSync = comm.SymbolSynchronizer;
生成随机M-ary符号并应用QPSK调制。
data = randi([0 M-1],nSym,1);modSig = pskmod(data,M,pi/4);
创建一个延迟对象,引入2个样本的固定计时误差。由于发射RRC滤波器每个符号输出4个样本,1个样本相当于1/4的符号通过固定的延迟和通道。
fixedDelay = dsp.Delay(timingErr);fixedDelaySym = ceil(fixedDelay.Length/sps);%将固定延迟四舍五入到符号中最接近的整数
通过发射RRC滤波器对调制信号进行滤波txfilter
对象。方法应用信号计时错误fixedDelay
对象。
txSig = txfilter(modSig);delaySig = fixedDelay(txSig);
将延迟信号通过信噪比为15 dB的AWGN通道传递。
rxSig = awgn(delaySig,snr,“测量”);
通过接收RRC滤波器对调制信号进行滤波rxfilter
对象。显示散点图。由于时序误差,接收到的信号与预期的QPSK参考星座不一致。
rxSample = rxfilter(rxSig);散点图(rxSample(1001:结束),2)
方法来纠正符号计时错误symbolSync
对象。显示散点图。同步信号现在与预期的QPSK星座对齐。
rxSync = symbolSync(rxSample);散点图(rxSync(1001:结束),2)
解调QPSK信号。
recData = pskdemod(rxSync,M,pi/4);
用符号计算由于固定延迟和发送和接收RRC滤波器造成的总系统延迟。
sysDelay = dsp。延迟(fixedDelaySym + txfilter)FilterSpanInSymbols / 2 +...rxfilter.FilterSpanInSymbols / 2);
考虑系统延迟,计算误码率。
[numErr,ber] = biterr(sysDelay(data),recData)
numErr = 10
Ber = 1.0000e-03
修正bpsk调制信号的符号定时误差
纠正有噪声BPSK传输信号上的固定符号计时错误。检查同步接收信号的误码率。
初始化仿真参数。
M = 2;% BPSK的调制顺序nSym = 20000;包中符号的数量SPS = 4;每个符号的样本百分比timingErr = 2;%计时误差样本信噪比= 15;信噪比% (dB)
创建根凸起余弦(RRC)传输和接收过滤器系统对象。
txfilter = com . raisedcosinetransmitfilter (...“OutputSamplesPerSymbol”, sps);rxfilter = com . raisedcosinereceivefilter (...“InputSamplesPerSymbol”sps,“DecimationFactor”1);
创建一个符号同步器系统对象™来纠正计时错误。
symbolSync = comm.SymbolSynchronizer(...“SamplesPerSymbol”sps,...“NormalizedLoopBandwidth”, 0.01,...“DampingFactor”, 1.0,...“TimingErrorDetector”,早期的后期(non-data-aided)”);
生成随机数据符号并应用BPSK调制。
data = randi([0 M-1],nSym,1);modSig = pskmod(data,M);
创建一个延迟对象,引入2个样本的固定计时误差。由于发射RRC滤波器每个符号输出4个样本,1个样本相当于1/4的符号通过固定的延迟和通道。
fixedDelay = dsp.Delay(timingErr);fixedDelaySym = ceil(fixedDelay.Length/sps);%将固定延迟四舍五入到符号中最接近的整数
通过发射RRC滤波器对调制信号进行滤波txfilter
对象。方法应用信号计时错误fixedDelay
对象。
txSig = txfilter(modSig);delayedSig = fixedDelay(txSig);
将延迟信号通过AWGN通道传递。
rxSig = awgn(delayedSig,snr,“测量”);
通过接收RRC滤波器对调制信号进行滤波rxfilter
对象。显示散点图。由于时序误差,接收到的信号与预期的BPSK参考星座不一致。
rxSample = rxfilter(rxSig);散点图(rxSample(10000:结束),2)
方法来纠正符号计时错误symbolSync
对象。显示散点图。同步信号现在与预期的BPSK星座对齐。
rxSync = symbolSync(rxSample);散点图(rxSync(10000:结束),2)
解调BPSK信号。
recData = pskdemod(rxSync,M);
用符号计算由于固定延迟和发送和接收RRC滤波器造成的总系统延迟。
sysDelay = dsp。延迟(fixedDelaySym + txfilter)FilterSpanInSymbols / 2 +...rxfilter.FilterSpanInSymbols / 2);
考虑系统延迟,计算误码率。
[numErr1,ber1] = biterr(sysDelay(data),recData)
numErr1 = 8
Ber1 = 4.0000e-04
正确的符号定时和多普勒偏移
方法修正符号计时和频率偏移误差comm.SymbolSynchronizer
而且comm.CarrierSynchronizer
系统对象。
配置
初始化仿真参数。
M = 16;调制顺序%nSym = 2000;包中符号的数量SPS = 2;每个符号的样本百分比spsFilt = 8;用于过滤器和通道的每个符号的%样本spsSync = 2;用于同步器的每个符号的%样本lenFilt = 10;% RRC过滤器长度
为发射器和接收器创建一对匹配的根凸起余弦(RRC)过滤器系统对象。
txfilter = com . raisedcosinetransmitfilter (...FilterSpanInSymbols = lenFilt,...OutputSamplesPerSymbol = spsFilt,...获得=√spsFilt);rxfilter = com . raisedcosinereceivefilter (...FilterSpanInSymbols = lenFilt,...InputSamplesPerSymbol = spsFilt,...DecimationFactor = spsFilt / 2,...获得=√1 / spsFilt);
创建一个相频偏移系统对象来引入100赫兹的多普勒频移。
多普勒= com . phasefrequencyoffset...FrequencyOffset = 100,...PhaseOffset = 45,...SampleRate = 1 e6);
创建一个变量delay System对象来引入定时偏移量。
varDelay = sp. variablefractionaldelay;
创建载波和符号同步器系统对象,分别校正多普勒频移和定时偏移。
carrierSync = com . carriersynchronizer (...SamplesPerSymbol = spsSync);symbolSync = comm.SymbolSynchronizer(...TimingErrorDetector =早期的后期(non-data-aided)”,...SamplesPerSymbol = spsSync);
创建星座图系统对象以查看结果。
refConst = qammod(0:M-1,M,UnitAveragePower=true);星座图(...ReferenceConstellation = refConst,...SamplesPerSymbol = spsFilt标题=接收信号的);cdDoppler = com . constellation diagram (...ReferenceConstellation = refConst,...SamplesPerSymbol = spsSync,...Title =“频率校正信号”);星座图(...ReferenceConstellation = refConst,...SamplesPerSymbol = spsSync,...Title =“频率和定时同步信号”);
主处理回路
主处理循环:
生成随机符号并应用QAM调制。
对调制信号进行滤波。
应用频率和定时偏移量。
将发送的信号通过AWGN通道。
过滤接收到的信号。
校正多普勒频移。
修正定时偏移量。
为k = 1:15 data = randi([0 M-1],nSym,1);modSig = qammod(data,M,UnitAveragePower=true);txSig = txfilter(modSig);txDoppler =多普勒(txSig);txDelay = varDelay(txDoppler,k/15);rxSig = awgn(txDelay,25);rxFiltSig = rxfilter(rxSig);rxCorr = carrierSync(rxFiltSig);rxData = symbolSync(rxCorr);结束
可视化
绘制接收信号星座图、频率校正信号星座图、频率定时同步信号星座图。在接收到的信号中无法识别特定的星座点,在频率校正信号中只能识别部分星座点。然而,时间和频率同步信号与预期的QAM星座点对齐。
cdReceive (rxSig)
cdDoppler (rxCorr)
cdTiming (rxData)
噪声8-PSK信号的定时误差
修正有噪声的8-PSK信号上单调递增的符号计时错误。显示归一化计时误差。
初始化仿真参数。
M = 8;调制顺序%nSym = 5000;包中符号的个数SPS = 2;每个符号的样本百分比nsam = sps*nSym;一个包中样品的数量
创建根凸起余弦(RRC)传输和接收过滤器系统对象。
txfilter = com . raisedcosinetransmitfilter (...“OutputSamplesPerSymbol”, sps);rxfilter = com . raisedcosinereceivefilter (...“InputSamplesPerSymbol”sps,...“DecimationFactor”1);
创建一个可变的分数延迟系统对象™,引入一个单调递增的计时误差。
varDelay = sp. variablefractionaldelay;
创建一个符号同步器系统对象来纠正计时错误。
symbolSync = comm.SymbolSynchronizer(...“TimingErrorDetector”,“Mueller-Muller (decision-directed)”,...“SamplesPerSymbol”, sps);
生成随机8 ary符号并应用8-PSK调制。
data = randi([0 M-1],nSym,1);modSig = pskmod(data,M,pi/8);
通过凸起的余弦发射滤波器对调制信号进行滤波,并施加单调增加的定时延迟。
vdelay = (0:1/nSamp:1-1/nSamp)';txSig = txfilter(modSig);delaySig = varDelay(txSig,vdelay);
将延迟信号通过信噪比为15 dB的AWGN通道传递。
rxSig = awgn(delaySig,15,“测量”);
通过接收RRC滤波器对调制信号进行滤波。显示散点图。由于时序误差,接收到的信号与预期的8-PSK参考星座不一致。
rxSample = rxfilter(rxSig);散点图(rxSample, sps)
方法来纠正符号计时错误symbolSync
对象。显示散点图。同步信号现在与预期的8-PSK星座对齐。
[rxSym,tError] = symbolSync(rxSample);散点图(rxSym (1001)):
绘制定时误差估计。随着时间的推移,归一化计时误差增加到1个样本。
图图(vdelay,tError)“时间(s)”) ylabel (“计时误差(样本)”)
更多关于
符号同步概述
符号定时同步器算法基于相控锁环(PLL)算法,该算法由四个部分组成:
定时误差检测器(TED)
插入器
插补控制器
循环过滤
对于OQPSK调制,同相信号和正交信号组件首先对齐(如在QPSK调制中),使用状态缓冲区缓存前一个输入的后半符号。初始对准后,其余同步过程与QPSK调制相同。
此框图显示了一个定时同步器的示例。在图中,锁相环运行的符号定时x(t),为匹配滤波后接收的样本信号。符号定时锁相环输出符号信号, 在校正了发射机和接收器之间的时钟偏差后。
定时错误检测(TED)
符号定时同步器支持非数据辅助TED和决策导向TED方法。这个表显示了TED方法选项的时间估计表达式。
泰德方法 | 表达式 |
---|---|
零交点(decision-directed) |
|
加德纳(non-data-aided) |
|
早期的后期(non-data-aided) |
|
Mueller-Muller (decision-directed) |
|
非数据辅助TED (Gardner和早期-晚期)方法使用接收到的样本,而不知道传输信号或信道估计的结果。非数据辅助的TED用于估计具有星座点与同相轴或正交轴对齐的调制方案的信号的定时误差。适合Gardner或早期-晚期方法的信号例子包括qpsk调制的零相位偏移信号,其点为{1+0我0 + 1我1 + 0我, 0−1我}和具有零相位偏移的bpsk调制信号。
早-晚方法类似于Gardner方法,但Gardner方法在高信噪比系统中表现更好,因为它比早-晚方法具有更低的自噪声。
加德纳方法—Gardner方法是一种不依赖载波相位恢复的非数据辅助反馈方法。它用于基带系统和调制载波系统。更具体地说,这种方法用于使用线性调制类型的系统,其奈奎斯特脉冲具有大约40%到100%的额外带宽。例子包括使用PAM、PSK、QAM或OQPSK调制的系统,并使用滚动因子在0.4到1之间的凸起余弦滤波器来塑造信号。在噪声存在的情况下,这种定时恢复方法的性能随着多余带宽的增加而提高(或在升高余弦滤波器的情况下滚动因子的增加)。加德纳法类似于早-晚门法。
早期的后期方法—早-晚法是一种非数据辅助反馈方法。它用于使用线性调制类型的系统,如PAM、PSK、QAM或OQPSK调制。例如,使用带有奈奎斯特脉冲的凸起余弦滤波器的系统。在噪声存在的情况下,这种定时恢复方法的性能随着脉冲的多余带宽的增加而提高(或在升高余弦滤波器的情况下滚动因子的增加)。
决策导向TED(过零和穆勒-穆勒)方法使用标志
函数估计接收样本的同相分量和正交分量,计算复杂度低于非数据辅助的TED方法。
讨论二阶导数过零法-过零法是一种决策导向技术,在同步器的输入端每个符号需要2个样本。它用于低信噪比条件下的所有超额带宽值,以及中等信噪比条件下的中等超额带宽因子在近似范围[0.4,0.6]。
Mueller-Muller方法- muller - muller方法是一种决策导向反馈方法,需要事先恢复载波相位。当输入信号有奈奎斯特脉冲时(例如,当使用凸起余弦滤波器时),穆勒-穆勒法没有自噪声。对于存在噪声的窄带信号,随着脉冲的超额带宽因子的减小,米勒-穆勒方法的性能得到提高。
由于决策导向方法(过零和米勒-穆勒)根据传递给同步器的信号的同相分量和正交分量的符号来估计定时误差,因此不建议对具有同相分量为零或正交分量的星座使用这些方法。
而且
输入信号的同相分量和计时误差检测器的正交分量在哪里
是估计的定时误差。穆勒-穆勒法系数
而且
是对
而且
.时间估计是通过应用标志
函数的同相分量和正交分量,只用于决策导向的TED方法。
插入器
从与符号速率不同步的匹配滤波器的固定速率样本中估计时延。因为得到的样本不与符号边界对齐,所以使用插值器来“移动”样本。因为时间延迟是未知的,所以插值器必须是自适应的。此外,因为插值是可用样本的线性组合,它可以被认为是滤波器的输出。
该插补器采用具有法罗结构和系数的分段抛物线插补器α设置为1/2(参见Rice, Michael,数字通信:离散时间方法).
插补控制
插补控制为插补器提供了基准点指标和分数区间。基准点索引是离插值函数最近的样本索引。分数区间是插值函数及其基准点指数的时间与插值区间的比值。
对每个样本进行插值,并用频闪信号确定插值是否输出。同步器使用模块-1计数器插补控制来提供频闪灯和与插补器一起使用的分数阶间隔。
循环过滤
同步器使用比例加积分器(PI)环路滤波器。比例增益,K1,积分器增益,K2,按
而且
临时任期,θ,由
地点:
Nsps是每个符号的样本数。
ζ是阻尼因子。
BnT年代为归一化环路带宽。
Kp为探测器增益。
参考文献
[1]大米,迈克尔。数字通信:离散时间方法.上马鞍河,新泽西州:普伦蒂斯大厅,2008年。
[2]蒙加利,翁贝托和奥尔多·n·德安德里亚。数字接收机同步技术。纽约:全会出版社,1997年。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
看到MATLAB代码生成中的系统对象(MATLAB编码器).
版本历史
在R2015a中介绍
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。