comm.SymbolSynchronizer
正确的符号计时时钟倾斜
描述
的comm.SymbolSynchronizer
系统对象™纠正PAM, PSK, QAM和OQPSK调制方案的单载波发射机和接收机之间的符号定时时钟倾斜。有关更多信息,请参见符号同步概述.
请注意
输入信号以采样率为基础,输出信号以符号率为基础。
要纠正符号计时时钟倾斜:
创建
comm.SymbolSynchronizer
对象并设置其属性。使用参数调用对象,就像调用函数一样。
有关系统对象如何工作的详细信息,请参见什么是系统对象?
创建
描述
属性
除非另有说明,属性为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调制的单载波信号的标量或列向量。
数据类型:双
|单
复数支持:金宝app是的
输出参数
符号
-同步符号
列向量
同步符号,作为变量大小的列向量返回。输出符号继承输入样例的数据类型。对于有维度的输入N桑普-by-1,这个输出有维数N信谊1。N信谊大约等于N桑普除以Nsps,在那里Nsps等于SamplesPerSymbol
属性值。的最大输出大小时,输出长度将被截断
.
timingErr
-估计定时误差
范围[0,1]中的标量|范围[0,1]中元素的列向量
每个输入样本的估计定时误差,作为范围[0,1]中的标量或范围[0,1]中元素的列向量返回。估计的定时误差归一化到输入采样率。timingErr
具有与输入相同的数据类型和大小样品
.
对象的功能
要使用对象函数,请将System对象指定为第一个输入参数。例如,释放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 = com . symbolsynchronizer;
生成随机M-ary符号并应用QPSK调制。
data = randi([0 M-1],nSym,1);modSig = pskmod(data,M,pi/4);
创建一个delay对象来引入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。Delay(fixedDelaySym + txfilter.)FilterSpanInSymbols / 2 +...rxfilter.FilterSpanInSymbols / 2);
考虑系统延迟,计算误码率。
[numErr,ber] = biterr(sysDelay(data),recData)
数字= 10
Ber = 1.0000 -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 = com . 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);
创建一个delay对象来引入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。Delay(fixedDelaySym + txfilter.)FilterSpanInSymbols / 2 +...rxfilter.FilterSpanInSymbols / 2);
考虑系统延迟,计算误码率。
[numErr1,ber1] = biterr(sysDelay(data),recData)
numErr1 = 8
Ber1 = 4.0000 -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 Hz多普勒频移。
多普勒= com .相位频率偏移(...FrequencyOffset = 100,...PhaseOffset = 45,...SampleRate = 1 e6);
创建一个可变delay System对象来引入定时偏移。
varDelay = dsp.VariableFractionalDelay;
创建载波和符号同步器系统对象,分别校正多普勒频移和定时偏移。
carrierSync = com . carriersynchronizer (...SamplesPerSymbol = spsSync);symbolSync = com . symbolsynchronizer (...TimingErrorDetector =早期的后期(non-data-aided)”,...SamplesPerSymbol = spsSync);
创建星座图系统对象以查看结果。
refConst = qammod(0:M-1,M,UnitAveragePower=true);cdReceive = com .星座图(...ReferenceConstellation = refConst,...SamplesPerSymbol = spsFilt标题=接收信号的);cdDoppler = com .星座图(...ReferenceConstellation = refConst,...SamplesPerSymbol = spsSync,...Title =“频率校正信号”);cdTiming = com .星座图(...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;每个符号的样本百分比nSamp = sps*nSym;一个包中样品的数量
创建根凸起余弦(RRC)发送和接收过滤器系统对象。
txfilter = com . raisedcosinetransmitfilter (...“OutputSamplesPerSymbol”, sps);rxfilter = com . raisedcosinereceivefilter (...“InputSamplesPerSymbol”sps,...“DecimationFactor”1);
创建可变的分数延迟系统对象™,以引入单调递增的计时错误。
varDelay = dsp.VariableFractionalDelay;
创建符号同步器系统对象以纠正计时错误。
symbolSync = com . symbolsynchronizer (...“TimingErrorDetector”,“Mueller-Muller (decision-directed)”,...“SamplesPerSymbol”, sps);
生成随机8元符号并应用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方法金宝app。下表显示了TED方法选项的时间估计表达式。
泰德方法 | 表达式 |
---|---|
零交点(decision-directed) |
|
加德纳(non-data-aided) |
|
早期的后期(non-data-aided) |
|
Mueller-Muller (decision-directed) |
|
非数据辅助的TED (Gardner和early-late)方法使用接收到的样本,而不知道发射信号或信道估计的结果。非数据辅助TED用于估计具有星座点与同相轴或正交轴对齐的调制方案的信号的定时误差。适用于Gardner或early-late方法的信号示例包括相位偏移为零的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]大米,迈克尔。数字通信:离散时间方法.上马鞍河,新泽西州:Prentice Hall, 2008。
[2]Mengali, Umberto和Aldo N. D 'Andrea。数字接收机的同步技术。纽约:全会出版社,1997年。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
看到系统对象在MATLAB代码生成(MATLAB编码器).
版本历史
在R2015a中引入
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。