AF, DF, CF 및 기타 릴레이 모드와 비교한 BPSK 기반 릴레이 페이딩 채널 비트 오류율 시뮬레이션

목차

1. 이론적 근거

1.1AF

1.2CF

1.3DF

2. 핵심 프로그램

3. 시뮬레이션 결론


1. 이론적 근거

       무선 통신에서 릴레이 기술은 중요한 기술적 수단으로 통신 거리를 확장하고 통신 품질을 높이며 통신 용량을 늘리는 데 사용됩니다. 릴레이는 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 함수를 사용하여 가우시안 백색 잡음 신호를 생성하여 원래 신호를 생성합니다.
예를 들어 웨이블릿 변환과 같은 압축 방법을 사용하여 원래 신호를 압축합니다.
예를 들어 컨벌루션 코드 또는 터보 코드와 같은 코딩 방법을 사용하여 압축된 신호를 코딩합니다.
릴레이 노드는 신호를 수신하고 신호를 디코딩 및 압축 해제하여 원래 신호를 얻습니다.
예를 들어 원래 신호에 노이즈를 압축, 인코딩 및 추가하여 릴레이 신호가 생성됩니다.
릴레이 노드는 디코딩된 신호와 릴레이 신호를 수신단으로 전달합니다.
수신단은 릴레이 신호를 수신하고 압축 해제 알고리즘을 사용하여 신호를 압축 해제하여 원래 신호를 얻습니다.
수신단은 압축 해제된 신호를 원래 신호에 추가하여 최종 신호를 얻습니다.
신호의 시간 영역 파형 및 주파수 영역 파형과 비트 오류율 곡선과 같은 성능 지표를 그립니다.

1.3DF

       DF 릴레이는 AF 릴레이보다 복잡한 릴레이 기술로, 릴레이 노드를 기준으로 수신 신호를 디코딩하고 디코딩된 신호를 수신단으로 전달합니다. 구체적으로 DF 릴레이의 단계는 다음과 같습니다.
릴레이 노드는 신호를 수신하고 신호를 디코딩하여 원래 신호를 얻습니다.
릴레이 노드는 디코딩된 신호를 수신기로 전달합니다.
       수신단은 원래 신호와 릴레이 신호의 두 가지 신호를 수신합니다. 최종 신호는 릴레이 신호를 디코딩하고 디코딩 결과를 사용하여 원래 신호에 대한 간섭 제거를 수행하여 얻습니다.
       DF 릴레이의 장점은 신호 간섭과 왜곡을 줄이고 신호 품질과 신뢰성을 향상시킬 수 있다는 것입니다. 그러나 DF 릴레이는 디코딩 및 인코딩의 높은 복잡성과 채널 변경에 대한 민감도와 같은 몇 가지 단점도 있습니다.
Matlab에서 DF 릴레이를 구현하려면 다음 단계를 수행할 수 있습니다.
예를 들어 randn 함수를 사용하여 가우시안 백색 잡음 신호를 생성하여 원래 신호를 생성합니다.
예를 들어 컨벌루션 코드 또는 터보 코드와 같은 코딩 방법을 사용하여 원래 신호를 코딩합니다.
릴레이 노드는 신호를 수신하고 신호를 디코딩하여 원래 신호를 얻습니다.
예를 들어 원래 신호를 노이즈로 처리하여 릴레이 신호가 생성됩니다.
릴레이 노드는 디코딩된 신호와 릴레이 신호를 수신단으로 전달합니다.
       수신단은 원래 신호와 릴레이 신호의 두 가지 신호를 수신합니다. 최종 신호는 릴레이 신호를 디코딩하고 디코딩 결과를 사용하여 원래 신호에 대한 간섭 제거를 수행하여 얻습니다.
신호의 시간 영역 파형 및 주파수 영역 파형과 비트 오류율 곡선과 같은 성능 지표를 그립니다.
 

2. 핵심 프로그램

.......................................................
    %%%%%%%%%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

3. 시뮬레이션 결론

 

추천

출처blog.csdn.net/ccsss22/article/details/130737988