目录
基于差错检测的DF(Decode-and-Forward,解码转发)中继通信系统是一种无线通信系统,其中中继节点在转发信息之前先对接收到的信号进行解码,然后再重新编码并发送出去。这种方式的好处是中继节点可以纠正接收到的信号中的错误,从而提高通信的可靠性。
1.系统模型
考虑一个简单的DF中继通信系统,包括一个源节点(S)、一个中继节点(R)和一个目的节点(D)。源节点S发送信息给中继节点R,中继节点R解码接收到的信息,并进行差错检测。如果检测到错误,中继节点R可以选择不转发该信息或者请求重传;如果没有检测到错误,中继节点R将重新编码并转发该信息给目的节点D。
解码转发中继,指的是中继节点收到信号之后,对信号进行解码,然后将解码结果进行重新编码,最后转发给目的节点。
优点: 避免中继节点的噪声转发到目的节点,导致目的节点处噪声过大。
缺点: 协议比较复杂,同时中继节点的计算压力比较大。
在DF模式下,中继节点对用户的信息进行解调,解码之后仍用原来的编码方式进行编码,然后发送给目的节点。通过循环冗余校验来判断是否收到正确的数据包,如果无误则进行转发,如果有误则将其丢弃。
DF方式:通过对数据先进行解调解码从而将源节点与中继节点之间的噪声剔除掉,同时利用循环冗余校验(CRC)避免了错误信息的扩散,但是会降低频谱效率,丢弃数据包也会损失一定的能量,造成接收端信噪比的下降。因此比较适合信道状况较好时使用。
AF和DF方式都是对信息的重复传输。
DF方式不会带来噪声传播的问题,但是如果不采用CRC循环冗余校验,则得不到满分集阶数。并且中继节点对源节点信息解码错误所带来的的误差会随着跳数(经历的中继节点的个数)的增加而产生累积。
2.DF中继的工作原理
2.1 源节点发送信息
源节点S首先将数据编码为二进制序列,并通过无线信道发送给中继节点R。发送的信号可以表示为:
其中,d 是源节点S要发送的数据,f 是编码函数,xS 是发送的信号。
2.2 中继节点解码与差错检测
中继节点R接收到信号后,首先进行解码操作,得到解码后的数据:
其中,yR 是中继节点R接收到的信号,g 是解码函数,d^ 是解码后的数据。
接着,中继节点R对解码后的数据进行差错检测。差错检测可以通过添加冗余信息(如校验位)来实现。如果检测到错误,中继节点R可以选择不转发该数据或者请求源节点S重传;如果没有检测到错误,中继节点R将进行下一步操作。
2.3 中继节点重新编码与转发
中继节点R对解码后且通过差错检测的数据进行重新编码,并发送给目的节点D。重新编码后的信号可以表示为:
其中,xR 是中继节点R发送的信号。
2.4 目的节点接收信息
目的节点D接收到中继节点R发送的信号后,进行解码操作,得到最终的数据:
其中,yD 是目的节点D接收到的信号,d~ 是最终解码得到的数据。
3.差错检测的数学原理
差错检测通常通过添加冗余信息来实现。一种常见的差错检测方法是使用奇偶校验。假设要发送的数据是一个k位二进制序列,可以添加一位校验位,使得整个序列中1的个数为偶数(偶校验)或奇数(奇校验)。接收端在接收到数据后,会计算接收到的序列中1的个数,并与发送端使用的校验方式进行比较,从而判断数据是否在传输过程中发生了错误。
对于更复杂的差错检测方法,如循环冗余校验(CRC),可以通过生成多项式来生成校验位,并在接收端使用相同的生成多项式来检测错误。CRC的数学原理涉及到有限域理论和多项式运算,这里不再赘述。
4.MATLAB仿真程序
.............................................................
for snr=0:25
snr
BerSnrTable(snr+1,1) = snr;
sig=1/sqrt(10^(snr/10));
temp=0;
temp1=0;
for i=1:N
BitsTx = floor(rand(1,L)*2);
BitsTxcrc=CrcEncode(BitsTx);
BitsTxcnv=cnv(BitsTxcrc);
Mod8Tx=mod_8psk(BitsTxcnv);
M=length(Mod8Tx);
%以下为假设信道模型和噪声模型,由于本次仿真重点不在于此,所以做以下简化
H1d=RayleighCH();
H12=RayleighCH();
H2d=RayleighCH();
Z1d=randn(1,M)+j*randn(1,M);
Z12=randn(1,M)+j*randn(1,M);
Z2d=randn(1,M)+j*randn(1,M);
% d接收
Y1d=H1d.*Mod8Tx+sig*Z1d;
%user2接收并解码
Y12=H12.*Mod8Tx+sig*Z12;
R12=conj(H12).*Y12;
BitR12=demod_8psk(R12);
BitR12viterbi=viterbi(BitR12);
BitR12viterbi=BitR12viterbi(1:length(BitR12viterbi)-1);
[BitR12decrc,error]=CrcDecode(BitR12viterbi);
%error=0,正确解码 error=1,错误解码
%非协作情况
if(error==1)
R1d=conj(H1d).*Y1d;
BitR1d=demod_8psk(R1d);
BitR1dviterbi=viterbi(BitR1d);
BitR1dviterbi=BitR1dviterbi(1:length(BitR1dviterbi)-1);
BitR1ddecrc=CrcDecode(BitR1dviterbi);
[Num,Ber] = symerr(BitR1ddecrc,BitsTx);
BerSnrTable(snr+1,2)=BerSnrTable(snr+1,2)+Num;
end
%协作情况
if(error==0)
Bits2d=BitR12decrc;
Bits2dcrc=CrcEncode(Bits2d);
Bits2dcnv=cnv(Bits2dcrc);
Mod8_2d=mod_8psk(Bits2dcnv);
Y2d=H2d.*Mod8_2d+sig*Z2d;
%最大合并比在此处的简化形式
Rd=conj(H2d).*Y2d+conj(H1d).*Y1d;
BitRd=demod_8psk(Rd);
BitRdviterbi=viterbi(BitRd);
BitRdviterbi=BitRdviterbi(1:length(BitRdviterbi)-1);
BitRddecrc=CrcDecode(BitRdviterbi);
[Num,Ber] = symerr(BitRddecrc,BitsTx);
BerSnrTable(snr+1,2)=BerSnrTable(snr+1,2)+Num;
temp=temp+1;
end
end
BerSnrTable(snr+1,3)=BerSnrTable(snr+1,2)/(L*N); %此处将M改成N
BerSnrTable(snr+1,4)=temp;
end
figure
semilogy(BerSnrTable(:,1),BerSnrTable(:,3),'b-o');
xlabel('SNR');
ylabel('errir');
grid on
figure
semilogy(BerSnrTable(:,1),BerSnrTable(:,4),'b-o');
xlabel('SNR');
ylabel('协作次数');
grid on
time_of_sim = toc
echo on;
up4024
5.仿真结果
基于差错检测的DF中继通信系统的性能可以通过误码率(BER)或误帧率(FER)来衡量。误码率是指在接收端解码错误的比特数与发送的总比特数之比;误帧率是指在接收端解码错误的帧数与发送的总帧数之比。误码率和误帧率可以通过理论分析和仿真实验来得到。理论分析通常基于信道模型、调制方式、编码方式等因素,推导出误码率或误帧率的闭合表达式或近似表达式。仿真实验则通过模拟实际的通信过程,统计解码错误的比特数或帧数,从而得到误码率或误帧率的估计值。基于差错检测的DF中继通信系统通过在中继节点进行解码和差错检测,提高了通信的可靠性。该系统适用于无线信道质量较差或源节点与目的节点之间直接通信困难的情况。通过选择合适的编码方式、调制方式和差错检测方法,可以进一步优化系统的性能。