ICIS 학부 연구생/통신시스템 설계

[ 통신시스템설계 ] 03 채널 및 QPSK 수신

hanol02 2023. 7. 18. 11:31

 

03 Fading.zip
0.00MB
my_function.zip
0.00MB

 

 

 

01. 무선채널모델 

1. AWGN

: 시스템에서 가장 일반적인 잡음으로 모든 주파수 대역에서 고르게 잡음이 발생하는 채널이다.

  • r(n) = y(n) + z(n)
  • 즉, 수신신호 = 송신기 출력신호 + 잡음 신호
  • z(n)은 정규분포를 갖는 백색 잡음으로 모델링한다.
  • 실제 상황에서는 잡음의 분포는 일정하고 수신 신호의 크기는 거리에 따라 변화하나, 시뮬레이션 할 때는 일반적으로 송신기 출력 신호 y(n)의 크기를 일정하게 하고, z(n)의 크기를 변화시킨다.
  • SNR은 잡음신호 대비 신호의 전력 세기. 상대적인 신호 전력의 크기를 의미함 

 

 

 

2. Multipath Fading

: 송수신기 사이에 장애물이 많은 상황으로 직접파 수신이 불가능한 채널.

  • r(n) = h(n)*y(n) + z(n)
  • h(n)은 무선 채널 계수. 분산이 1인 정규분포.

 

예제) Fading 채널/AWGN 채널을 거친 수신 신호 r(n)의 성상도 비교
%% 예제) Comparing Fading / AWGN Channels
N=2000;
SNR=10;

% Generate binary data
x=randint(1,N);

% QPSK modulation
y=QPSK_mapper(x);

% fading / AWGN channel
r1=fading(y,SNR);
r2=awgn(y,SNR);

% r1, r2 plot
subplot(1,2,1);
plot(r1, 'b.');

subplot(1,2,2);
plot(r2, 'b.');

(왼쪽) fading channel / (오른쪽) AWGN channel

 

  • 위 그림과 같이 AWGN 채널과 비교했을 때, 더해지는 왜곡보다 곱해지는 왜곡이 더 심각하다는 것을 알 수 있다.
  • 이러한 곱해진 채널의 왜곡을 보상하기 위해 수신기에서 Equalizer 를 거친다.

 

 

 

 

 


 

02. Equalization

무선 채널에 의해 곱해지는 왜곡이 발생했을 경우, 이를 보상하기 위한 신호처리 방법을 말한다.

본 시뮬레이션에서는 equalizer의 동작을 간단히 구현하기 위해 수신단에서 채널왜곡정보 h(n)을 알고 있다고 가정한다.

( AWGN에서는 필요 없음)

 

동작 방법은 다음과 같다. 

수신 신호 r을 h로 각각 나눠줌

수신신호 = fading 계수 * 송신신호 + 잡음

*매트랩에서 구현할 때 : r(n)을 원소별로 h(n)으로 나눠주면 됨

 

예제) Equalizer 입력과 출력 성상도 비교 (SNR=20dB)
%% 예제) Comparing Equalizer input/Output
N=2000;
SNR=20;

% Generate binary data
x=randint(1,N);

% QPSK modulation
y=QPSK_mapper(x);

% fading channel
z=sqrt(0.5*10^(-SNR/10))*(randn(1,length(y))+1j*randn(1,length(y)));
h=sqrt(0.5)*randn(1,length(y))+1j*randn(1,length(y));

% Equalizer input
r=h.*y+z;

% Equalizer Output
eq_out=r./h;

% Eq- input output plot
subplot(1,2,1);
plot(r, 'b.');

subplot(1,2,2);
plot(eq_out, 'b.');

(왼쪽) Equalizer 입력 (오른쪽) Equalizer 출력
수신신호 r(n) 
h(n) * x(n) + z(n)
r(n)/h(n)
x(n) + z(n)/h(n)

 

 

fading 채널을 거쳐서 수신한 신호 r(n)은 데이터 복구가 어려울 정도로 왜곡이 심하지만,

Equalizer를 거친 신호 eq_out의 성상도를 보면 이러한 왜곡이 어느정도 보상되었음을 확인.

 

 

 

 

 

 

 


03. FEC(에러정정코드)

 

1.  열악한 BER 성능에 대한 대처

⑴ SNR을 개선한다. 송신 전력을 높이거나 안테나를 키워서 성능을 높인다.

⑵ 변조 방식을 변경한다. (나중에 배움)

⑶ 송신기에 데이터 재전송을 요청한다. (ex. 인터넷) but 실시간 통신에서는 사용 불가.

에러정정코드를 적용한다.

 

 

2. 에러정정코드 

  • channel code, FEC(Forward Correction Code) 라고 부름
  • 수신기가 알아서 에러가 발생한 정보를 인지하고 수정하도록 하는 코드
  • 에러정정을 위해서 송신 데이터 이외에 추가적인 bits를 붙여서 보냄
  • 추가적인 bit를 붙여서 보내므로 user data를 보낼 공간이 줄어 전송 속도가 감소한다는 단점
  • 거의 모든 무선 통신시스템에 적용된 기술(WiFi, LTE, 3G, Bluetooth 등)

 

3. Repetition code

  • FEC의 종류 중 가장 간단한 코드
  • 알고리즘
1. 사용자 데이터를 생성한다
2. 사용자 데이터를 R번 반복한다
3. 데이터를 전송하고 수신한다
4. 수신 신호로부터 송신 데이터를 복원한다
5. 반복된 정보를 보냈다는 사실로부터 다수결의 원칙에 따라 송신 데이터를 복원한다

 

 

 

 

 

 

 


 

04. MATLAB으로 fading 채널 구현하기 

# functions

1. fading

function eq_out=fading(y,SNR)

z=sqrt(0.5*10^(-SNR/10))*(randn(1,length(y))+1j*randn(1,length(y)));
h=sqrt(0.5)*randn(1,length(y))+1j*randn(1,length(y));

% Equalizer Input
r=h.*y+z;

% Equalizer Output
eq_out=r./h;
end

 

2. FEC_enc

function x = FEC_enc(data,R)
x=repmat(data,1,R);
end

 

3. FEC_dec

function data_ = FEC_dec(x,R)
L = length(x);
% 수신 data bit length / 반복횟수 = 원래 data bit length 
N=L/R;

% R개의 data 묶음을 더하기
sum_ = zeros(1,N);
for n=1:R
    sum_ = sum_ + x(N*(n-1)+1:N*n);
end

% 다수결의 원칙으로 data 복원
data_ = zeros(1,N);
for n=1:N
    if sum_(n) > R/2
        data_(n) = 1;
    else
        data_(n) = 0;
    end
end

 

# 실습 1   fading function output = equalizer output 이도록 함수 수정

# 실습 2   AWGN / fading channel BER curve 비교하기

  • msg 길이 =100,000bits
  • SNR: 0:20
  • axis로 x축 0~20, y축 10^(-4) ~ 10^(0)
%% 실습 2 : AWGN과 Fading 채널의 BER 비교

% data length
N=1000000;
SNR = 0:2:20;

% 1. Generate binary data
x=randint(1,N);

% initializing BER variables
BER_AWGN = zeros(size(SNR));
BER_Fading = zeros(size(SNR));

for i = 1:length(SNR)
    % 2. QPSK mapping
    y1 = QPSK_mapper(x);
    y2 = QPSK_mapper(x);

    % 3. AWGN / fading channel
    r_AWGN = awgn(y1, SNR(i));
    r_Fading = fading(y2, SNR(i));

    % 4. QPSK demapping
    x_hat_AWGN = QPSK_demapper(r_AWGN);
    x_hat_Fading = QPSK_demapper(r_Fading);

    % 5. BER calculation
    % bit_errors = sum(data(:) ~= y(:));
    error_num_AWGN = sum(xor(x, x_hat_AWGN));
    error_num_Fading = sum(xor(x, x_hat_Fading));

    BER_AWGN(i) = error_num_AWGN / N;
    BER_Fading(i) = error_num_Fading / N;

end


% Plot BER
semilogy(SNR, BER_AWGN, 'ro-', 'LineWidth', 1)
hold on;
semilogy(SNR, BER_Fading, 'bo-', 'LineWidth', 1);
xlabel('SNR(dB)');
ylabel('BER');
title('BER Curve of AWGN/Fading Channel')
grid on;
axis([0 20 10^(-4) 1]);
% xlim([0 20]);  ylim([10^(-4) 1]);
N = 10,000 N=1,000,000
**왼쪽에서 중간에 그래프가 끊긴 이유
N=10,000에서 SNR이 10dB 이상이 되면 오류날 확률이 10^(-4) 이상이 된다.
data bit가 10,000 = 10^(4)개 인데 오류 확률이 1/10,000 = 10^(-4) 이라는 것은
10000개 보내면 한 bit가 오류난다는 뜻.
즉, 오류 확률이 10^(-4) 이상이면 BER이 0이라는 의미 → 그래프가 그려지지 않는다!

 

 

 

 

# 실습 3   FEC encoding / decoding 함수 작성

 

# 실습 4   AWGN / fading channel BER 비교

 

1. AWGN

  • QPSK, data 길이 200,000bits
  • SNR = 0:10
  • No FEC,  FEC R=1/3,  FEC R=1/5 비교
N=200000;
SNR=0:10;

BER_FEC1 = zeros(length(SNR));
BER_FEC3 = zeros(length(SNR));
BER_FEC5 = zeros(length(SNR));

for i=1:length(SNR)

    % 1. Generate Binary data
    data=randint(1,N);

    % 2. FEC Encoding (Repeat binary data R번)
    x3=FEC_enc(data,3);
    x5=FEC_enc(data,5);

    % 3. QPSK mapping
    y1=QPSK_mapper(data);
    y3=QPSK_mapper(x3);
    y5=QPSK_mapper(x5);

    % 4. Insert AWGN noise
    z1=AWGN(y1,SNR(i));
    z3=AWGN(y3,SNR(i));
    z5=AWGN(y5,SNR(i));

    % 5. QPSK demapping
    x_1 = QPSK_demapper(z1);
    x_3 = QPSK_demapper(z3);
    x_5 = QPSK_demapper(z5);

    % 6. FEC decoding (다수결 원칙에 따라 data 복원)
    data_3 = FEC_dec(x_3,3);
    data_5 = FEC_dec(x_5,5);
    
    % BER calculation
    err_count1 = sum(abs(data-x_1));
    err_count3 = sum(abs(data-data_3));
    err_count5 = sum(abs(data-data_5));

    BER_FEC1(i) = err_count1/N;
    BER_FEC3(i) = err_count3/N;
    BER_FEC5(i) = err_count5/N;
end


% Plot BER
figure;
semilogy(SNR, BER_FEC1, 'b-', 'LineWidth', 1);
hold on;
semilogy(SNR, BER_FEC3, 'r-', 'LineWidth', 1);
semilogy(SNR, BER_FEC5, 'g-', 'LineWidth', 1);
hold off;

grid on;
title('BER of AWGN Channel', 'fontsize', 13);
xlabel('SNR(dB)', 'FontSize', 13);
ylabel('BER', 'FontSize', 13);

legend('AWGN, without FEC', 'AWGN, with FEC R=3', 'AWGN, with FEC R=5');
axis([0 10 1e-4 1]);

 

2. fading

  • QPSK, data 길이 200,000bits
  • SNR = 0:2:20
  • No FEC, FEC R=1/3, FEC R=1/5
위의 코드에서
z1=fading(y1,SNR(i));
z3=fading(y3,SNR(i));
z5=fading(y5,SNR(i));
만 바꿔주면 됨

 

 

AWGN fading
legend 가 왜 저럴까요 엉엉 알려주실분
legend Whyrano
**그래프 읽기
예를 들어 FEC R=5일 때 10^(-2)
AWGN은 100개 중 1bit가 오류가 나는 성능에 도달하기 위해서 SNR이 2dB 필요
fading은                                               ''                                      SNR이 3.xxdB 필요
즉, fading 채널에서 더 큰 SNR 값이 요구된다.  (더 안좋음)