본문 바로가기
programming language/MATLAB

MATLAB unipolar signaling BER simulation in AWGN channel

by __observer__ 2013. 11. 18.
반응형

아래 포스팅에서 MATLAB BPSK BER simulation 에 대해 설명 드린적이 있는데요.

 

2011/03/08 - [통신] - [디지털 통신] BPSK, QPSK

2011/03/19 - [programming language/MATLAB] - MATLAB BPSK BER simulation in AWGN channel

2011/03/27 - [programming language/MATLAB] - MATLAB QPSK BER simulation in AWGN channel


오늘은 어떤 분이 질문을 하셔서 unipolar signaling을 한 경우의 BER simulation 을 해 보려 합니다.

 

일단 시뮬레이션의 Es 는 1 로 정규화하고, unipolar signaling 의 경우 M=2 이므로 최종적인 unipolar signaling 의 잡음 분산 수식은 BPSK 시뮬레이션과 마찬가지로 아래 수식이 됩니다.

 

하지만 unipolar signaling 이므로 비트 0을 0 으로 1 을 sqrt(2) 로 mapping 해야 평균 심볼 에너지가 1이 되게 됩니다.

 

다음으로 Decision Boundary 를 설정해야 는데, BPSK 인 경우에는 -1~1 사이의 딱 중간인 0을 Decision Boundary 설정했었죠~

 

Unipolar Signaling에서는 0 ~ sqrt (2) 사이의 딱 중간인 1/sqrt(2) 가 되겠죠~

 

물론 위에 계산 한 Decision Bound는 비트 1,0의 발생 확률이 같다는 가정하에서 계산되는 겁니다. 1, 0의 발생 확률이 다르다면 Decision Boundary 는 딱 중간이 안 됩니다.

 

다음으로 Unipolar Signaling 의 이론적인 BER 성능을 알아야겠죠~

 

이제 Unipolar Signaling 에 대한 AWGN 환경에서의 BER simulation 을 위한 준비는 다 된 거 같네요.

 

위 포스팅에서 했던 BPSK 시뮬레이션 코드에서 몇 군데만 손을 보면 다음과 같이 됩니다.

 

이미지로 올렸더니 오타 나시는 분들인 많은 것 같아서 코드로 올립니다.


clc

clear

close all 

 

N_bits=7000000; % 생성할 비트 수

Eb_No_dB=0:2:10; % Eb/N0 dB scale

BER_buffer=zeros(size(Eb_No_dB)); % BER 저장할 버퍼

 

 

for n=1:length(Eb_No_dB)

Eb_No_ral_scale= 10 ^(Eb_No_dB(n)/10); % Eb/N0 real scale 값 변환

sigma_v=sqrt(1./(2*Eb_No_ral_scale)); % 잡음의 표준 편차 값 계산

 

bits_v=randi([0 1],N_bits,1); % 비트 생성

Symbols=bits_v* sqrt(2); % symbol mapping

 

noise_v=randn(N_bits,1)*sigma_v; % AWGN 생성

 

tx_signal=Symbols + noise_v ; % 신호 + 잡음

 

demapped_bits= tx_signal > (1/sqrt(2)) ; % 수신단 demapping

 

BER_buffer(n)=sum(bits_v ~= demapped_bits) ./ N_bits; % BER calculation

 

fprintf('Eb/No= %g BER: %g\n',Eb_No_dB(n) ,BER_buffer(n))

end

 

%% 이론적인 Unipolar Signaling BER 계산

 

Eb_N0_theory=0:0.05:10 ;

snr=10.^ (Eb_N0_theory./10);

Ber_value_theory= 0.5*erfc(sqrt(snr)./sqrt(2)); % Theoretical Unipolar Signaling BER

 

%% 그래프 그리기

 

figure(1),semilogy(Eb_No_dB,BER_buffer,'b*',Eb_N0_theory,Ber_value_theory,'r--'), xlabel('Eb/No [dB]'), ylabel('BER')

grid,axis([0 10 0.000001 1]), legend('Simulated result','Theoretical Unipolar Signaling result')

 

결과는 다음과 같이 나오게 되는군요.

  

참조

http://www.mathworks.co.kr/matlabcentral/fileexchange/7458-bpsk-and-ask-simulation



반응형

댓글