发明内容
技术问题:本发明的目的是提供一种基于正交频分复用的电力线通信系统的FPGA的实现方法,使用该方法,通信速率≥100Kbps;直接通信距离≥100米;并且实现系统的Internet的接入;为下一步设计通信速率为1-10Mbps的电力线载波通信系统做好基础性工作。
技术方案:
发射端的实际工作流程:
由上位机产生数据流,同时按照我们系统的帧格式中数据段部分的要求发送。将数据流进行卷积编码,我们采用的是采用的是约束长度为3一个输入比特对应两个输出比特的编码方式,有两个寄存器来完成编码工作。为了提高信道的带宽利用率,提高抗干扰能力,我们在卷积编码的基础上对数据流进行QPSK调制,QPSK调制具有很强的抗干扰能力同时又能满足我们系统的传输速率的要求,取两比特数据为一组,共有四种状态:00,01,11,10。分别映射为希星座图上面的(1,1),(1,-3),(-3,1),(-3,-3),再传送给下一级进行处理。在经过前面的一系列的基带信号编码和映射以后,数据进行串并转换,然后作IFFT处理,因为我们采用的是OFDM多载波调制方式,所以进行IFFT处理将信号放到各个子载波上同时进行信道分配,信号从频域变换到时域中。在送入下一步处理前先进行并串转换,将数据变成串行的数据流。然后将数据流加入循环前缀和同步头,这个时候我们系统的帧结构就完全形成了然后进行D/A转换,D/A转换后进行成形滤波,然后进行载波搬移,将载波搬移到2MHz~22MHz的中心频率。然后将信号耦合进入信道传输。
接收端的实际工作流程:
信号经由信道的传输在接收端首先通过耦合器,然后进行载波搬移这个是和发送端相对应的一个将信号下变频过程。在信号作完下变频以后,经过A/D采样将模拟信号变为数字信号,并且将其保存在FPGA内的寄存器中,我们对信号进行过采样将信号的实部和虚部分别保存(通过程序的控制)。同步处理,这是系统中非常重要的部分之一,直接决定了系统的性能好坏,我们的同步分为四步,符号粗同步,小数频率估计和纠正,整数频率估计和纠正以及精细同步,整个这个同步过程需要很好的控制时钟,在完成以上的同步过程后我们进行相位的估计和纠正,和最佳采样点判别。在完成同步以后我们对信号的帧进行处理,我们丢弃信号帧中的循环前缀和同步头,直接将数据帧中的数据段交给后面的处理单元。首先对数据进行串并转换,然后作FFT变换,这一步是对应于发送端的的IFFT的过程,正是由于IFFT/FFT的引入才使得OFDM技术从理论研究跨入了实际应用。经过这一步,数据信号从时域变换为频域中。接下来进行信道估计,这一步也是整个系统实现中非常关键的一步,同样决定了系统的性能好坏,我们的信道估计的实现是采用了块状信道估计的算法,主要是充分利用了系统的帧结构中的同步头,在经过同步处理以后,信号帧的同步头中的数据已经得到了频率偏移纠正,然后在信道估计的时候利用其中的64点来进行估计,即基于时域训练序列的信道估计算法。这大大提高了系统的频带利用率。在我们的系统中这种信道估计方法很好的平衡了计算复杂度,估计范围和估计精度。信号的解映射。在发送端我们采用了QPSK的编码方式,所以在接收端就必须进行解映射,在解映射的时候可以通过判断信号的实部和虚部的符号来确定,例如在发送端映射完成后的点落在星座图上的第一象限内的话符号的(+,+),对应00。所以在接收端就可以直接利用符号来判断完成解映射。紧接着进行Viterbi译码。系统在发送端对信号进行卷积编码,在接收端就需要解码,我们使用最大似然解码。Viterbi译码实际就是找到一条最佳路径,这种译码方式也是比较流行的一种译码方式。在译码完成以后,我们就利用接收端的通信串口来传输和接收数据。
系统方案设计
OFDM基本参数设计:带宽 B=200kHz
使用频段 FPGA实现方案:10.6~10.8MHz
子信道数N=128
循环前缀CP=32
子信道映射模式选择:16QAM:4bit/子信道
DQPSK:2bit/子信道
传输方式实现:FPGA方案:同相、正交分量载波发送
通信距离100m~1000m左右
码元长度
T=N×1/B=640us
保护时间间隔
Δ=160us
子信道间隔
Δf=1/T=1.5625kHz
实际传输码元长度
Ts=T+Δ=800us
实际的符号率
fs=1/Ts=1/800us=1.25kbaud
总的比特速率:FPGA
1.25kbaud×128×2bit/symbol=320kps
主要器件:
·FPGA:XC2VP20
·AD:ADS2806
·DA:DAC7802
·调制:MIQA-10M
·解调:MIQA-10D
系统的理论研究和仿真:
对低压电力线信道的特性的研究包括了传输特性、阻抗特性以及噪声特性等
对系统各个部分的算法进行了系统而深入的研究和改进
在Matlab平台下完成系统功能的仿真;
在SIMULINK平台下完成系统动态仿真,验证了系统的实时通信性能;用硬件设计语言(verilog)实现系统的算法;发射端:
1):由上位机产生数据流,同时按照系统的帧格式要求发送;
2):将数据流进行卷积编码,采用的是约束长度为3一个输入比特对应两个输出比特的编码方式,由两个寄存器来完成编码工作;
3):在卷积编码的基础上对数据流进行QPSK调制,提高信道的带宽利用率,提高抗干扰能力,取两比特数据为一组,共有四种状态:00,01,11,10,分别映射为星座图上的(1,1),(1,-3),(-3,1),(-3,-3),再传送给下一级进行处理;
4):在经过前面的一系列的基带信号编码和映射以后,数据进行串并转换,然后进行IFFT处理将信号放到各个子载波上同时进行信道分配,信号从频域变换到时域中,在送入下一步处理前先进行并串转换,将数据变成串行的数据流;
5):将数据流加入循环前缀和同步头,这个时候我们系统的帧结构就完全形成了,然后进行D/A转换,D/A转换后进行成形滤波,然后进行载波搬移,将载波搬移到2MHz~22MHz的中心频率,然后将信号耦合进入信道传输;
接收端:
6):信号经由信道的传输在接收端首先通过耦合器,然后进行载波搬移这个是和发送端相对应的一个将信号下变频过程;
7):在信号作完下变频以后,经过A/D采样将模拟信号变为数字信号,采用8倍过采样来实现,并且将其保存在FPGA内的寄存器中,对信号进行过采样后将信号的实部和虚部分别保存;
8):同步处理,同步分为四步,即符号粗同步、小数频率估计和纠正、整数频率估计和纠正以及精细同步,整个这个同步过程需要很好的控制时钟,在完成以上的同步过程后进行相位的估计和纠正,和最佳采样点判别,再对信号的帧进行处理,丢弃信号帧中的循环前缀和同步头,直接将数据帧中的数据段交给后面的处理单元;
9):先对数据进行串并转换,然后作FFT变换,这一步是对应于发送端的的IFFT的过程,经过这一步,数据信号从时域变换为频域中;
10):信道估计,信道估计的实现是采用了块状信道估计的算法,充分利用系统的帧结构中的同步头,在经过同步处理以后,信号帧的同步头中的数据已经得到了频率偏移纠正,然后在信道估计的时候利用其中的64点来进行估计,即基于时域训练序列的信道估计算法,提高系统的频带利用率;
11):信号的解映射,在发送端采用了QPSK的编码方式,所以在接收端就必须进行解映射,在解映射的时候通过判断信号的实部和虚部的符号来确定,可以在接收端就直接利用符号来判断完成解映射。在发送端映射完成后的点落在星座图上的第一象限内的话符号为(+,+),对应00;
12):Viterbi译码,使用最大似然解码,Viterbi译码实际就是找到一条最佳路径,这种译码方式也是比较流行的一种译码方式;
13):在译码完成以后,就利用接收端的通信串口来完成数据的传输,并且在接收终端进行显示。
同步模块处理方法的步骤为:
1)同步分为四步,符号粗同步,小数频率估计和纠正,整数频率估计和纠正以及精细同步;在完成以上的同步过程后进行相位的估计和纠正,最佳采样点判别;在成功同步以后对信号的帧进行处理,丢弃信号帧中的循环前缀和同步头部分,直接得到数据帧中的数据段部分,并且将数据段部分交给后面的处理单元,
2)采用模块同步的方法,电力线载波通信系统由一个模块来协调各个同步模块的工作,主要是给出各个模块完成的标志位。然后根据标志位提示一步一步的完成同步接收端接收数据信号后保存在RAM中,以40MHz的内部处理时钟进行同步处理,完全满足了系统同步的需要,提高了程序运行的效率,
3)粗同步:在接收端,当接收机发现M(n)的输出值在一段时间内保持大于某个门限时,则认为帧头被正确捕获,然后进行下一步处理,
4)细同步:帧头捕获算法得到的帧头定位只落入帧头相关函数的平原区内就可以,采用的精细定时是基于IEEE 802.11a中用双相关来精细同步的实现方法,即让接收序列与本地的参考序列作复相关,获得突出而且尖锐的相关峰,检测是否有周期噪声产生的伪帧头捕获,提高了同步的准确性。
有益效果:本发明是基于正交频分复用的电力线通信系统的FPGA的实现,采用正交频分复用(OFDM)技术,利用电力线实现宽带高速电力载波通信系统的关键技术的研究和开发。OFDM技术在电力线通信中的应用逐步得到了国内外同行的认同,国外研制并推出了10Mbps甚至更高的通信模块。由于国内未掌握其核心技术,因此,积极开展我国的电力载波通信核心技术研究是非常必要的。
该方法目的在于推动我国低压电力线载波通信核心技术的发展,为我国电力线通信标准的指定提供决策依据,为研制适应我国电网现状的电力线通信系统提供关键技术和产品。使用该方法,通信速率≥100Kbps;直接通信距离≥100米;并且实现系统的Internet的接入;为下一步设计通信速率为1-10Mbps的电力线载波通信系统做好基础性工作。设计了基于Xilinx公司的XC2V20的FPGA基带实现电路,对系统算法进行了FPGA实现验证。主要可以概括为以下几个方面:
设计了FPGA实现的硬件电路;用Verilog语言在FPGA平台上实现了OFDM通信系统(包括同步、编解码、信道估计等模块);设计了正交调制和解调电路以及电力线耦合电路;成功地实现了100kbps的数据传输。
本发明在工作人员理论研究和仿真结果的基础上进行了对OFDM系统完善和实现的工作。在硬件设计方面,一起完成了基于FPGA的电力线载波通信系统的设计,实现在实际的电力线信道上的数据传输。在软件设计方面,采用了模块化的设计思想,运用了verilog语言完成FPGA各个模块的设计,可以比较容易对各个模块进行移植,对系统性能的进一步提高和完善迈出了具有决定性的一步。
具体实施方式
系统采用了OFDM作为系统的调制技术,OFDM是一种频谱部分重叠的多载波调制技术,最早于20世纪50年代末应用于军队无线通信。60年代中期,Chang提出一种带限信号的多信道传输方法,即在一个线性带限信道上同时传输多路信息,并消除载波间干扰(Inter-Carrier Interference,ICI)及符号间干扰(Inter-Symbol Interference).1971年,Weinstein和Ebert将DFT(DiscreteFourier Transform)引入OFDM系统,用它来进行基带调制和解调。但是他们利用了符号保护间隔和时域升余弦窗来控制ISI和ICI,这使得载波间的正交性受到了破坏。在1980年Peled和Rui提出了循环前缀(CP)方式代替了保护间隔来控制ISI和ICI,解决了正交性的问题,为OFDM做出了另一重大的贡献。90年代以后由于能够使用FFT技术实现有效的调制,并随着近年来数字信号处理技术、半导体技术的飞速发展及大规模集成电路的应用,OFDM进入实用化阶段。
系统采用了FPGA(x2pro20)作为主要的开发平台,Xilinx的ISE集成综合开发环境,Synplicity的Synplify综合工具,Model Technology公司的Modelsim仿真软件。硬件描述语言verilog作为系统的开发语言。
该系统包括发射端和接收端两部分,该两部分之间由电力线连接,其实现方法为:
发射端:
1):由上位机产生数据流,同时按照系统的帧格式要求发送;
2):将数据流进行卷积编码,采用的是约束长度为3一个输入比特对应两个输出比特的编码方式,由两个寄存器来完成编码工作;
3):在卷积编码的基础上对数据流进行QPSK调制,提高信道的带宽利用率,提高抗干扰能力,取两比特数据为一组,共有四种状态:00,01,11,10,分别映射为星座图上的(1,1),(1,-3),(-3,1),(-3,-3),再传送给下一级进行处理;
4):在经过前面的一系列的基带信号编码和映射以后,数据进行串并转换,然后进行IFFT处理将信号放到各个子载波上同时进行信道分配,信号从频域变换到时域中,在送入下一步处理前先进行并串转换,将数据变成串行的数据流;
5):将数据流加入循环前缀和同步头,这个时候我们系统的帧结构就完全形成了,然后进行D/A转换,D/A转换后进行成形滤波,然后进行载波搬移,将载波搬移到2MHz~22MHz的中心频率,然后将信号耦合进入信道传输;
接收端:
6):信号经由信道的传输在接收端首先通过耦合器,然后进行载波搬移这个是和发送端相对应的一个将信号下变频过程;
7):在信号作完下变频以后,经过A/D采样将模拟信号变为数字信号,采用8倍过采样来实现,并且将其保存在FPGA内的寄存器中,对信号进行过采样后将信号的实部和虚部分别保存;
8):同步处理,同步分为四步,即符号粗同步、小数频率估计和纠正、整数频率估计和纠正以及精细同步,整个这个同步过程需要很好的控制时钟,在完成以上的同步过程后进行相位的估计和纠正,和最佳采样点判别,再对信号的帧进行处理,丢弃信号帧中的循环前缀和同步头,直接将数据帧中的数据段交给后面的处理单元;
9):先对数据进行串并转换,然后作FFT变换,这一步是对应于发送端的的IFFT的过程,经过这一步,数据信号从时域变换为频域中;
10):信道估计,信道估计的实现是采用了块状信道估计的算法,充分利用系统的帧结构中的同步头,在经过同步处理以后,信号帧的同步头中的数据已经得到了频率偏移纠正,然后在信道估计的时候利用其中的64点来进行估计,即基于时域训练序列的信道估计算法,提高系统的频带利用率;
11):信号的解映射,在发送端采用了QPSK的编码方式,所以在接收端就必须进行解映射,在解映射的时候通过判断信号的实部和虚部的符号来确定,可以在接收端就直接利用符号来判断完成解映射。在发送端映射完成后的点落在星座图上的第一象限内的话符号为(+,+),对应00;
12):Viterbi译码,使用最大似然解码,Viterbi译码实际就是找到一条最佳路径,这种译码方式也是比较流行的一种译码方式;
13):在译码完成以后,就利用接收端的通信串口来完成数据的传输,并且在接收终端进行显示。
我们的系统总体结构图由图1给出,下面给出系统主要部分的具体实施方案。
QPSK的实现方式
本次电力系统载波通信系统中的映射方法是采用了QPSK,将数据流每两比特映射为星座图上的一点,两比特的组合共有4中状态:00,01,11,10;分别被映射为(1,1),(1,-3),(-3,1),(-3,-3)。
卷积编码的实现方法
卷积码是将发送的信息序列通过一个线性的,有限状态的移位寄存器而产生的编码。通常卷积码的编码器由K级(每级k比特)的移位寄存器和n个线性代数函数发生器(这里是模2加法器)组成,如图9所示
需要编码的二进制数据串行输入移位寄存器,每次移入k比特数据。每个k比特的输入序列对应一个n比特的输出序列。因此卷积码的编码效率定义为Rc=k/n。参数K被称作卷积码的约束长度,它表示当前的n比特输出序列与多少个k比特输入序列有关系,同时也是一个决定编码复杂程度的重要参数。
描述卷积码的方法之一是给出其生成矩阵。一般说来卷积码的生成矩阵是一个半无限矩阵,因为输入序列是半无限长度的。
另一种描述卷积码的方法是用一组n个矢量——称为卷积码的生成多项式,来表示。对应于n个代数函数发生器(这里是模2加法器)与移位寄存器的连接方式,我们得到n个生成多项式,这里是n个长度为K×k的矢量。某个矢量的第i个元素为1,表示寄存器相应的位置与该矢量对应的模2加法器相连;反之,如果该元素为0则表示寄存器相应的位置与该矢量对应的模2加法器不连接。
另外三个关于卷积码的重要描述是树图、网格图和状态图。
树图以带有分支的树的形式表示编码器的结构:树根表示编码器的初始状态,通常都是全零状态“00……00”;树的分支根据输入的序列产生,分别代表编码器在相应输入下的后续状态和输出序列。
网格图是由树图变化而来。仔细观察树图可以发现,当树的长度超过约束长度K时,树图的结构就出现了重复的现象——具有相同状态的两个节点所发出的所有分支具有相同的结构和输出。这说明超过约束长度之后,具有相同状态的节点可以合并。通过在树图中作节点合并我们就获得了比树图更加紧凑的网格图。在网格图上可以直观的表示和分析编码和译码的过程。
状态图比网格图更为紧凑,它表明了编码器可能存在的状态,以及各状态间可能存在的转移路线。在状态图上还标有状态转移的条件,及相应的编码器输出。
在系统中使用的编码就是按照上面的表述来实现的。编码效率为1/2。
IFFT与FFT的实现方式
本次实现的IFFT与FFT采用了16位的精度,采用Q13的定点表示方法,保证了足够的运算精度。
综合考虑了系统的传输速度,以及参照了802.11a,我们选择128点的IFFT与FFT。算法采用了频域的基2算法,在保证速度的情况下降低了硬件资源的消耗。
IFFT/FFT运算电路复用了4个芯片内部自带的硬件乘法器,采用硬件乘法器的目的首先在于提高速度,其次是工作稳定。此外,还用到了芯片内部的存储器资源,主要用来存放运算的中间结果。旋转因子存放与rom中,采用的是18位的精度。整个IFFT在x2pro20的芯片上只占用了3%的资源。
对于128点的IFFT和FFT运算,都有7级的碟型运算过程。
频率抽取算法的蝶形运算是:
A(k)=X1(k)+X2(k)
当7级运算完成以后,就到数据输出了。输入数据{x(n)}是按自然数顺序排列的,而输出数据看起来很混乱,但其中也是有规律的。对于基2算法来说,需要位顺序的翻转这些数字,就得到了所输出的序列,也就是位逆序。
IFFT运算的FPGA硬件实现框图见附图中的图5。
IFFT模块工作过程如下:
1)控制单元产生读使能信号,地址产生器产生相应的地址,将输入的数分别存入实部RAM和虚部RAM。
2)数据存储完毕后,产生一个标志位,开始进行基2碟型运算。
3)使用计数器,分别计算运算所处的级数(N=log2 N)和蝶形变换的单元(M=N/2)。
4)使用查找表的方法,产生相应的地址,从存储器RE和存储器IM中读出数据,送入基2碟型运算模块。
5)产生旋转因子的读地址,读取相应的旋转因子送入基2碟型运算模块。
6)将计算完的结果,根据地址产生器产生的地址,写入原来的存储单元。
7)计算完成后,控制器产生一个脉冲,通知外部器件,将要发送数据。
8)地址产生器将计数器产生的顺序数字进行位序重排后,产生相应的读地址,将变换后的乱序数字按自然数序列读出。
FFT的实现流程和IFFT的实现流程完全相同,只是存放在RAM里面的旋转因子不一样。
同步模块的FPGA实现方法
系统的同步主要分为粗帧同步,小数频偏估计与纠正,整数频偏估计与纠正,精细帧同步,最佳采样点判别,载波相位估计等,具体的流程见附图中的图6下面对整个同步流程中粗帧同步作详细说明。
一:粗同步实现方法
粗帧同步实现利用公式:
因为:
可以得到:
P(n)=P(n-1)+r(n+N-1)·r*(n+2N-1)-r(n-1)·r*(n+N-1)
这样在每有新的采样数据输入时根据上式可以只需进行2次乘法运算即可得到相应的P(n)。同样R0(n)和RN(n)也可以进行相应的快速计算,提高粗帧同步的运算速度。
由上可得同步模块的流程:
1)在系统上电或者系统复位的情况下,给P(n)、R0(n)和RN(n)赋零初值。
2)在未检测到粗帧的情况下,每间隔8个采样点同步控制模块发送给粗帧同步模块请求信息和数据,粗帧同步接收信息以及相应的数据计算出P(n)、R0(n)和RN(n)。
3)根据设定的门限,因为数字电路实现的除法操作较为复杂需要消耗大量资源,将门限转化为分数形式
判断M1=a·|R
0(n)|·|R
N(n)|与M2=b·|P(n)|
2的大小。当M2>M1时,将用于记录M(n)超过预设门限次数的计数器加1,否则将此计数器置零,以保证信号是连续的超过预设的门限。
4)当计数器数值大于一指定值时,认为此时已经检测到粗帧,发送标志信息到同步控制模块。同步控制模块接收到此信息时即将粗帧同步子模块挂起,同时将P(n)数据锁存用于小数频偏估计。
二:小数频偏估计和纠正的实现方法
小数频偏估计是在粗帧检测到信号发出标志信息以后进行的,由同步模块控制端控制进行的。同步控制模块在收到粗帧同步检测到有效帧的标志位后,使能小数频偏估计模块,同时将粗帧同步中得到的数据P(n)发给小数频偏估计模块。小数频偏估计采用前述估计公式: 在计算小数频偏时采样将圆周等分50份,将各个角度的正余弦值与P(n)比较取最接近者作为P(n)的相位。
小数频偏估计完成以后需要对数据的小数频偏进行纠正。纠正的过程采用开环方法,通过设计一个DDS频率源,在FPGA内将数据与对应的频率相乘达到补偿小数频偏的目的。
上式表明通过使用内建数字频率源可以补偿小数频偏,但是因为并不知道确切的起始点,在数据纠正时假设起始点是粗帧同步得到的起始位置,这就导致存在
的相位误差。这种相位误差对系统的影响等同于两地载波的相位差。可以和载波相位误差综合在一起纠正。
小数频偏估计与纠正实现的流程如图10所示。
在估计的过程中我们需要求得P(n)的角度,我们利用了查表法和Cordic核来求去角度的两种方法
三:整数频偏估计和纠正的实现方法
整数频偏的估计需要使用序列的频域信息。首先需要将粗帧同步确定的起点后的64个数据进行fft变换,这部分电路可以调用OFDM信号的解调的模块,需要完成的主要是接口问题。在得到数据的频域序列后,将数据送入整数频偏估计单元进行估计,所采用下面的估计公式:
整数频偏估计流程如图11所示。
整数频偏估计模块首先接收数据的频域序列,利用本地序列与整数频偏估计模块计算相关能量,然后对本地序列做循环移位,再与数据频域序列求相关能量直到循环移位到原始本地序列。在这个过程中得到的最大相关能量的最大值点就是所对应的整数频率偏移量,第32次循环以后所对应的偏移量为负的归一化频偏
在数据纠正时,同样使用数字频率源信号,原理与小数频偏纠正相同。
四:精细同步
精细帧同步使用的归一化相关函数如下:
其中 为接收信号和本地参考序列的相关能量, 为接收信号在相关窗内的能量,因为纠正频率偏差影响的只是信号的相位这样,E(n)可以使用在粗帧同步过程中计算得到的R0(n)序列代替。以减少系统消耗。 为参考序列的能量是一个常量。所以在精细帧同步阶段主要的任务是有两个,一是P(n)的计算,二是寻找M(n)的最大值。
精细帧同步流程如图12所示。
精细帧同步处理流程为:
1)从粗帧同步定义的起点开始,同步控制模块将随后的64个数据,以及这64个数据由粗帧同步过程计算得到的能量值E(n)发给精细帧同步处理模块;
2)精细帧同步在初始化的时候设定一个较低的门限。在精细帧同步中将接收到的64个数据与本地参考序列求相关能量。分别计算M(n)的分子和分母,然后利用交叉相乘法(避开除法运算)比较M(n)与预设门限的大小。当M(n)大于预设的门限值时,将预设门限的分子分母用M(n)的分子分母代替,用于后续的比较,同时存储相应的位置信息;
3)在一段64点数据传输结束以后,同步控制模块预留一定的时间余量用于精细帧同步模块进行数据处理。然后,将粗帧同步定义的起始点后移,重新进行1,2两步骤,直到移动到粗帧同步起始点的后64位,以保证在信息序列中包含有同步训练序列的第一段sync符号;
4)此时,精细帧同步模块输出的位置信息,即为所求的M(n)最大的位置。五:最佳采样点判别的实现方式
为了解决最佳采样点定时偏差,OFDM系统采用了过采样技术。前面所讨论的内容中,采样点是指在8倍采样率的情况下,每8个点选取其中的第一个点组成的采样点序列。在进行频偏纠正时,除需对所使用采样点序列进行纠正外,还需要对其余的采样点序列进行同样的数据纠正。
在精细帧同步得到较为精确的帧起始点的情况下,使用公式:
其中r(n+k)为过采样的数据,按照顺序分成8组,Sk为本地训练序列。在确定精细帧同步位置后。对8组采样数据以精细帧定位位置为起点,分别计算公式(3.24),然后以精细帧定位位置前一个点为起点,分别计算公式(3.24)。在计算完成以后得到的M(n)最大值以及相应的采样点可以近似认为是最佳采样点。
六:相位估计和纠正的实现方式
在判断完最佳采样点后的数据,可以认为是接近理想数据的情况。这样根据已知的本地信号与采样所得的数据进行之间的相位进行比较,则可以得到需要的载波相位的偏差。在实现时,因为本地参考信号的相位是已知的,因为载波相位的偏差对各个子信道的影响相同,造成同样的旋转角度,可以在本地参考信号选取若干个子信道进行相位比较。
假设采用的比较点数为N,则所得到的载波相位偏差为:
这样得到的相位是一个相位偏差的平均值,可以避免一些突发噪声对所选择的数据产生的干扰,抵抗性能随N的增大而增强,但因为设计到求解相位的问题,需要消耗大量的系统资源与运算时间,N的选取需要有一个折中考虑。若各个子信道之间采用差分形式进行调制,则载波相位偏差对系统性能的影响都可以通过差分过程消除,但差分解调相对繁琐。
相位估计和纠正流程如图13所示
其中,数据提取模块是值从最佳序列中提取出若干个点(因为计算相位需要消耗运算时间目前只取用其中一点),用于计算这些点的相位差。首先求得这些数据的相位,求相位的过程出现在小数频偏估计中出现过,此处可以通过调用相应的资源完成相位的计算。然后,将这些数据的相位与在这些数据位置理论情况下的相位做比较求出差值。最后对这些差值求和进行平均,就可以得到相位差。使用得到的相位差可以进一步的纠正数据部分的数据,完善同步过程。
信道估计的实现方式
由于我们的系统同步是利用时域内的训练序列完成的。信道估计算实现框图见图7所示。
因此,我们可以充分利用这些导频信息进行信道估计,而无需在频域额外的插入导频。这样,就可以大大的提高系统的频带利用率。下面,简要说明该算法的实现过程。
在接收端,同步完成之后,首先取出训练序列记为
将和本地存储的PN序列p(n)做互相关运算
表示相关运算。我们采用的训练序列PN为m序列,其自相关函数具有类似于白噪声自相关函数的性质。因此,
可以近似看成一个常数R。所以
为了减少噪声对信道估计的影响,我们丢弃了时域冲击响应h(n)中较小的估计值,其作用相当于时域滤波。门限值设为估计最大径幅度的5%,其他点处补零,然后做FFT变换,得到H(k);y(n)经过FFT变换之后,得到Y(k)=X(k)H(k);所以
X(k)=Y(k)H(k)-1
X(k)即为均衡后的数据。
图7给出了基于时域训练序列的信道估计算实现框图
Viterbi译码的实现方式
Viterbi译码是卷积码的最佳译码算法。Viterbi译码算法是Andrew J.Viterbi提出的卷积码译码算法,他关于此算法的论文于1967年发表在IEEETransactions on Information Theory上,题目是“Error Bounds for ConvolutionCodes and An Asymptotical Optimum Decoding Algorithm”。
Viterbi译码算法的优点是固定的译码延时,并且适合硬件实现。但是它对计算量和存储量的要求随着约束长度K成指数增长,所以对Viterbi算法的应用一般局限于K≤9的场合。
Vitetbi译码算法可以描述如下:
把在时刻i,状态Sj所对应的网格图节点记作Sj,i,每个网格节点被分配一个最小不完全路径长度值V(Sj,i)。节点值按如下方式计算:
1.设V(S0,0)=0,i=1。
2.在时刻i,对于进入每一个节点的所有路径计算其不完全路径长度。
3.令V(Sj,i)为在i时刻,到达与状态Sj相对应的节点Sj,i的最小不完全路径长度。该路径为留存路径,其余非留存路径将从网格图中删除。以这种方式可以从S0,0处生成一组最小路径。
4.L表示输入的待编码信息序列的符号长度,其中每个符号为k比特,m为编码器中移存器长度,若i<L+m,令i=i+1,返回第2步。
5.一旦计算出所有的节点值,则从i=L+m时刻,沿网格图中留存路径里具有最小路径长度的支路回溯即可得到译码序列。
关于不完全路径长度,硬判决时将采用Hamming距离,软判决时将采用Euclidean距离。
我们以系统中K=3,k=1,和n=2(Rc=1/2)的二进制卷积码说明Viterbi译码算法的具体过程。计算最小不完全路径采用Hamming距离,也就是硬判决。
K=3,k=1,和n=2(Rc=1/2)的二进制卷积码编码过程见图14所示
如图14所示,为该编码器的一次编码过程的示意图,我们选择的输入序列为15比特的信息——“010111001010001”,以及2比特的“Flushing”信息——“00”。图中的实线表示编码过程中的状态转移,即实际的编码路径。由图中可以看出,编码过程始于状态“00”,同时也结束于状态“00”。
图中还在编码路径的下面标出了编码输入序列,编码输出序列和接收端接收到的含有错误的序列,并且标出了错误的位置。
在图中的每个符号间隔,我们会接收到2比特的符号。我们用一个累计错误矩阵(Accumulated Error Metric)来存放计算得到的最小不完全路径值,即我们接受到的符号序列与所有可能接受到的符号序列之间的“距离”。我们使用硬判决的Hamming距离,就是计算接受到的符号序列与所有可能接受到的符号序列之间不同比特的个数。对于每一个分支,这个距离只可能是“0”,“1”或“2”。从第二个符号间隔开始,该矩阵的值为前一个符号间隔的矩阵值与当前分支的“距离”之和。
另外,在实际的系统中当编码序列过长时,译码延时对于大多数应用场合来说无法忍受,同时用来存储全部留存路径的大容量存储器代价昂贵。这个也是我们系统中的实际遇到的情况。解决这个问题的办法是设法修改Vitetbi译码算法,使修改后的算法既能保持一个合适、固定的译码延时,又对算法的性能没有太大的影响。
根据这个要求对Viterbi算法提出的修改是:
在任意的给定时间t内只保留每个留存路径里最新的δ个译码信息符号。当收到每一个新的信息符号时,译码器对各留存路径的度量进行比较,找出具有最小度量的留存路径,再在网格图上沿着时间回溯δ个分支,将该留存路径在这个时刻的最早的信息符号判决输出。
如果δ选的足够大,在时间上回溯δ个分支后,所有的留存路径将包含相同的译码输出符号。计算机模拟的结果证明,当延时δ≥5K时,与最佳Vitetbi译码算法相比,性能的下降可忽略不计。
综上所述,改进后的Viterbi算法可以表述如下:
把在时刻i,状态Sj所对应的网格图节点记作Sj,i,每个网格节点被分配一个最小不完全路径长度值V(Sj,i)。节点值按如下方式计算:
1.设V(S0,0)=0,i=1。
2.在时刻i,对于进入每一个节点的所有路径计算其不完全路径长度。
3.令V(Sj,i)为在i时刻,到达与状态Sj相对应的节点Sj,i的最小不完全路径长度。该路径为留存路径,其余非留存路径将从网格图中删除。以这种方式可以从S0,0处生成一组最小路径。
4.δ表示每条留存路径中保留的最新译码信息符号(其中每个符号为k比特)的个数,即留存路径的长度,δ≥5K。若i<δ,令i=i+1,返回第2步。
5.i=δ时,沿网格图中留存路径里具有最小路径长度的支路回溯δ即个分支,将此分支的译码信息符号输出,并且把所有留存路径的最前一个分支删除。L表示输入的待编码信息序列的符号长度,m为编码器中移存器长度,若i<L+m,令i=i+1,返回第2步。
一旦计算出所有的节点值,则从i=L+m时刻,沿网格图中留存路径里具有最小路径长度的支路回溯即可得到剩下的译码序列。Viterbi译码的实现结构图见附图中的图8。