欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》
目录
一、理论基础
1.1 物理层网络编码的相位同步简介
物理层网络编码的相位同步是一种解决无线通信中常见问题的技术——通过在物理层面上对编码数据相位进行同步,以增加数据传输的有效性和可靠性。物理层网络编码的相位同步的基本原理是将发送的数据编码成相位可调的正弦波信号,并利用相位的变化来表示不同的数据符号。在接收端,通过测量接收信号的相位,并和发送端的相位进行比较,来确定数据符号的内容。数学公式可以表示为以下形式:
y = A cos(ωt + φ) (4)
其中,y表示接收到的信号,A表示信号的振幅,ω表示角频率,t表示时间,φ表示相位。
在物理层网络编码的相位同步中,关键是如何准确地测量接收信号的相位。一种常用的方法是采用最大似然估计法(MLE)。MLE是一种统计方法,它假设所有的解决方案(即不同的相位)都是等可能的,然后通过最大化似然函数来寻找最可能的解。
在物理层网络编码的相位同步中,MLE可以按以下步骤进行:
- 初始化:设定一个初始相位值φ_0。
- 采样:在发送端发送一个已知相位的数据符号后,接收端对接收到的信号进行采样,得到一组复数形式的接收信号样本y_1, y_2, ..., y_N。
- 计算:对于每一个接收信号样本y_n,计算其与发送信号的相位差Δφ_n = arg(y_n/A) - φ_0 - 2πn/N(其中arg()表示求相位)。
- 最大似然估计:将所有的相位差Δφ_n进行求和,得到总的相位差Δφ = ΣΔφ_n。然后,通过求解arg(Σy_n/A) = Δφ + φ_0 + 2πn/N = 0来得到新的相位估计值φ_new。
- 迭代:将步骤2到步骤4重复多次,每次使用新的相位估计值φ_new代替初始相位值φ_0,直到达到预设的迭代次数或相位估计值变化小于某个阈值。
- 输出:最终得到的相位估计值即为发送数据的相位,从而完成了物理层网络编码的相位同步。
在物理层网络编码的相位同步中,MLE通过迭代来不断优化相位估计值,以实现更准确的相位同步。这种技术可以增加无线通信系统的可靠性和有效性,同时还可以在物理层面上实现多路复用和纠错等功能。此外,MLE方法也可以扩展到其他领域来解决类似的问题。
1.2 网络编码技术简介
网络编码技术通过在网络的中间节点处对数据流进行编码来提高无线网络的吞吐量.基于网络编码的理论,物理层网络编码(Physical-Layer Network Coding,PNC)技术利用了电磁波的叠加性,允许来自源/目的节点的无线信号在中继节点处叠加,进而"自然地"完成网络编码;PNC进一步提升了网络吞吐量. 适用于PNC的相位同步方案设计,同步误差影响下M进制正交幅度调制(M-ary Quadrature Amplitude Modulation,M-QAM)PNC的平均误符号率分析以及在二者基础上的同步方案与数据传输的相互作用研究.
目前PNC的实现依然处于研究阶段,相位同步问题是实现PNC的关键因素及主要障碍.本文首先提出了适用于PNC的相位同步方案,随后分别研究了同步方案采用基于最大似然估计(Maximum Likelihood Estimation,MLE)的频率相位估计算法和基于锁相环(Phase-Locked Loop,PLL)的频率相位跟踪的同步精度.
最大似然估计(Maximum Likelihood Estimation)是一种可以生成拟合数据的任何分布的参数的最可能估计的技术。它是一种解决建模和统计中常见问题的方法——将概率分布拟合到数据集。
例如,假设数据来自泊松(λ)分布,在数据分析时需要知道λ参数来理解数据。这时就可以通过计算MLE找到给定数据的最有可能的λ,并将其用作对参数的良好估计。
MLE是用于拟合或估计数据集概率分布的频率法。这是因为MLE从不计算假设的概率,而贝叶斯解会同时使用数据和假设的概率。MLE假设在计算方法之前,所有的解决方案(分布的参数)都是等可能的,而贝叶斯方法(MAP)不是这样,它使用了关于分布参数的先验信息。
MLE之所以有效,是因为它将寻找数据分布的参数视为一个优化问题。通过最大化似然函数,找到了最可能的解。
二、核心程序
clc;
clear;
close all;
warning off;
addpath 'func\'
%数据长度
Len = 504;
%网络数据包长度
Npkt = 1000;
%网络译码迭代次数
Niter = 5;
per = randperm(2*Len);
SNRs = [0:2:12];
ij = 0;
for i = SNRs
i
sigma = 1/sqrt(0.5*10^(i/10));
Error = 0;
ij = ij+1;
for k = 1:Npkt
%QPSK
Id = randint(1,Len);%I路
Qd = randint(1,Len);%Q路
%网络编码
Id_enc = func_enc(Id,per);
Qd_enc = func_enc(Qd,per);
Id_enc2= 1-2*Id_enc;
Qd_enc2= 1-2*Qd_enc;
Rec_ref= Id_enc2+Qd_enc2;
theta1 = pi/6;
Id_enc2= Id_enc2.*exp(-sqrt(-1)*theta1)+sigma*randn(1,2*Len);
Qd_enc2= Qd_enc2.*exp(-sqrt(-1)*theta1)+sigma*randn(1,2*Len);
%通过干扰
Rec0 = Id_enc2 + Qd_enc2;
%接收
%MLE进行相位估计
if k <= 10
thest0 = atan(sum(imag(conj(Rec_ref).*Rec0))/sum(real(conj(Rec_ref).*Rec0)));
thest = thest0;
else
%相位跟踪
Rec = Rec0.*exp(sqrt(-1)*thest);
err = real(mean(Rec0-Rec));
C1 = 0.00015;
thest = thest+C1*err;
end
Rec = Rec0.*exp(-sqrt(-1)*thest);
h = func_H(Id,per);
Y = func_dec(Rec,h,1,1,sigma,Niter);
Error = Error + sum(abs(mod(Id+Qd,2) - Y));
end
ber(ij) = Error/Npkt/Len;
end
function Dout = func_dec(Din,h0,h1,h2,sigma,Iter)
[M,N] = size(h0);
P0 = exp(-abs(Din+h1+h2).^2/2/sigma^2) + exp(-abs(Din-h1-h2).^2/2/sigma^2);
P1 = exp(-abs(Din+h1-h2).^2/2/sigma^2) + exp(-abs(Din-h1+h2).^2/2/sigma^2);
LP = log(P0./P1);
Lrji = zeros(M, N);
Lqij = repmat(LP, M, 1);
%译码迭代
for n = 1:Iter
for i = 1:M
col = find(h0(i, :));
for k = 1:length(col)
prodOfdrji = 1;
for l = 1:length(col)
if l~= k
prodOfdrji = prodOfdrji*tanh(0.5*Lqij(i,col(l)));
end
end % for l
Lrji(i, col(k)) = 2*atanh(prodOfdrji);
end % for k
end % for i
for j = 1:N
row = find(h0(:, j));
for k = 1:length(row)
dLrij = 0;
for l = 1:length(row)
if l~= k
dLrij = dLrij + Lrji(row(l), j);
end
end % for l
Lqij(row(k), j) = LP(j) + dLrij;
end % for k
LQi = LP(j) + sum(Lrji(row, j));
if LQi > 0
vHat(j) = 0;
else
vHat(j) = 1;
end
end % for j
if mod(h0*vHat',2)==0
break;
end
end % for n
for r = 1:0.5*N
Dout(r) = vHat(r);
end
三、测试结果
A15-07