基于BPSK的中继衰减信道误码率仿真,对比AF,DF,CF等中继方式

目录

一、理论基础

1.1AF

1.2CF

1.3DF

二、核心程序

三、仿真结论


一、理论基础

       在无线通信中,中继技术是一种重要的技术手段,用于扩大通信距离、增强通信质量和提高通信容量。中继可以分为三种类型:AF(Amplify and Forward)、DF(Decode and Forward)和CF(Compress and Forward)。本文将详细介绍这三种中继的原理、优缺点和Matlab实现方式。

1.1AF


        AF中继是一种简单的中继技术,它基于放大中继的信号,将信号转发给接收端。具体来说,AF中继的步骤如下:
中继节点接收信号,放大信号并转发给接收端。
接收端接收到两个信号:原始信号和中继信号。将这两个信号相加,得到最终的信号。
       AF中继的优点在于实现简单,对信号的处理也比较简单。然而,由于信号放大过程中会引入噪声和失真,因此AF中继的性能较差,容易出现信号干扰和误码等问题。
      在Matlab中实现AF中继,可以按照以下步骤进行:
生成原始信号,例如通过使用randn函数生成高斯白噪声信号。
生成中继信号,例如通过将原始信号经过放大和加噪声处理得到。
生成接收端信号,例如通过将原始信号和中继信号相加得到。
绘制信号的时域波形和频域波形,以及误码率曲线等性能指标。

1.2CF

       CF中继是一种基于信号压缩的中继技术,它通过对中继信号进行压缩和发送,以减小传输的数据量。具体来说,CF中继的步骤如下:
       中继节点接收信号,并对信号进行压缩和编码,得到压缩后的信号。
       中继节点将压缩后的信号转发给接收端。
        接收端接收到中继信号,并使用解压缩算法对信号进行解压缩,得到原始信号。
        接收端将解压缩后的信号与原始信号相加,得到最终的信号。
         CF中继的优点在于可以减小传输的数据量,提高通信效率。然而,CF中继也存在一些缺点,例如解压缩算法的复杂度较高,对信号的质量和可靠性也有一定的要求。
在Matlab中实现CF中继,可以按照以下步骤进行:
生成原始信号,例如通过使用randn函数生成高斯白噪声信号。
对原始信号进行压缩,例如使用小波变换等压缩方法。
对压缩后的信号进行编码,例如使用卷积码或Turbo码等编码方式。
中继节点接收信号,并对信号进行解码和解压缩,得到原始信号。
生成中继信号,例如通过将原始信号经过压缩、编码和加噪声处理得到。
中继节点将解码后的信号和中继信号转发给接收端。
接收端接收到中继信号,并使用解压缩算法对信号进行解压缩,得到原始信号。
接收端将解压缩后的信号与原始信号相加,得到最终的信号。
绘制信号的时域波形和频域波形,以及误码率曲线等性能指标。

1.3DF

       DF中继是一种比AF中继更为复杂的中继技术,它基于中继节点对接收到的信号进行解码,并将解码后的信号转发给接收端。具体来说,DF中继的步骤如下:
中继节点接收信号,并对信号进行解码,得到原始信号。
中继节点将解码后的信号转发给接收端。
       接收端接收到两个信号:原始信号和中继信号。通过解码中继信号,并使用解码结果对原始信号进行干扰消除,得到最终的信号。
       DF中继的优点在于可以减小信号的干扰和失真,提高信号的质量和可靠性。然而,DF中继也存在一些缺点,例如解码和编码的复杂度较高,对信道的变化较为敏感。
在Matlab中实现DF中继,可以按照以下步骤进行:
生成原始信号,例如通过使用randn函数生成高斯白噪声信号。
对原始信号进行编码,例如使用卷积码或Turbo码等编码方式。
中继节点接收信号,并对信号进行解码,得到原始信号。
生成中继信号,例如通过将原始信号经过加噪声处理得到。
中继节点将解码后的信号和中继信号转发给接收端。
       接收端接收到两个信号:原始信号和中继信号。通过解码中继信号,并使用解码结果对原始信号进行干扰消除,得到最终的信号。
绘制信号的时域波形和频域波形,以及误码率曲线等性能指标。
 

二、核心程序

.......................................................
    %%%%%%%%%Channel characteristics%%%%%%%%%%%%%%%% 
    SNRdB = -3:30; %Range of SNR for which BER is investigated. 

    %additive noise and channel response for the relay channel: 
    %Source uplink channel: 
    noise_d = 1/sqrt(2) * (randn(2 * N_bits,1) + j * randn(2 * N_bits,1)); 
    h_d = 1/sqrt(2) * (randn(2 * N_bits,1) + j * randn(2 * N_bits,1)); 

    %interuser channel: 
    noise_r1 = 1/sqrt(2) * (randn(2 * N_bits,1) + j * randn(2 * N_bits,1)); 
    h_r1 = 1/sqrt(2) * (randn(2 * N_bits,1) + j * randn(2 * N_bits,1)); 

    %for Relay uplink: 
    noise_r2 = 1/sqrt(2) * (randn(2 * N_bits,1) + j * randn(2 * N_bits,1)); 
    h_r2 = 1/sqrt(2) * (randn(2 * N_bits,1) + j * randn(2 * N_bits,1)); 

    for k = 1:length(SNRdB) 

    SNR = 10^(SNRdB(k)/10); %convert SNRdB to linear value SNR 

    ftx_r1 = sqrt(SNR) * h_r1 .* tx + noise_r1; 

    %%%%%%%%%%%%%%%%% At the Relay %%%%%%%%%%%%% 
    %%%%%%%%%%%%%%%%%%%%%%%%%Decode n F%%%%%% 
    %equalizing at relay 
    eq_rx1 = ftx_r1 .* conj(h_r1); 
    %hard decision and converting from bipolar to bits 
    r_bits = (sign(real(eq_rx1)) + 1)/2; 
    %channel decoding: 
    dec_dcf_r1 = vitdec(r_bits,trellis,3,'term','hard'); 
    %re-encoding using the same procedure as Source: 
    c_data2 = convenc(dec_dcf_r1,trellis); 
    %BPSK signal for the relay coded data: 
    tx2_dcf = 2 * c_data2 - 1; 
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

    %%%%%%%%%%%%%%%%%%Detect n F%%% 

    dec_dtf_r1 = sign(real(eq_rx1)); 
    tx2_dtf = dec_dtf_r1; 

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%Apmlify n F%% 

    beta = sqrt(1./((SNR * abs(h_r1).^2) + 1)); 
    %amplification: 
    ftx_amp = ftx_r1 .* beta; 

    %%%%%%%%%%%%%%%%%%%%%%%%%%Relay to Destination% 
    %DCF 
    ftx_dcf_r2 = sqrt(SNR) * tx2_dcf .* h_r2 + noise_r2 ; 
    %DTF 
    ftx_dtf_r2 = sqrt(SNR) * tx2_dtf .* h_r2 + noise_r2 ; 
    %AF 
    ftx_af_r2 = sqrt(SNR) * ftx_amp .* h_r2 + noise_r2 ; 

....................................................................................
 
figure 
semilogy(SNRdB,avgber_dcf,SNRdB,avgber_dtf,SNRdB,avgber_af,SNRdB,theberawgn,SNRdB,theberrayleigh,SNRdB,mrcth); 
axis([SNRdB(1) max(SNRdB) 10^-5 0.5]); 
grid on 
legend('DCF','DTF','AF','AWGN','Rayleigh','MRC 2 senders'); 
xlabel('SNR dB'); 
ylabel('BER'); 
title(['BER curves for comparison,(averaged for ',num2str(N_iter),' iterations)']); 
UP189

三、仿真结论

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/130737988
今日推荐