MATLAB 을 이용한 통신 시뮬레이션 코드를 찾다 보니 아래 주소의 블로그를 발견했다.
대단히 자세한 이론 설명과 훌륭한 MATLAB 예제 코드들을 보면 디지털 통신을 공부하는데 정말 부족함이 없어 보인다.
학부 시절에 FSK(Frequency Shift Keying)를 공부하면서~ BER(Bit Error Rate) 시뮬레이션 까지는 못해봤던 것 같은데~
아래 주소에 Frequency Shift Keying BER 시뮬레이션 코드가 있었다.
이론적 설명도 자세하고 세부 코드까지 포함되어 있어서 굉장히 도움이 많이 되는 포스팅이라는 생각이 든다.
아래 코드는 저자의 시뮬레이션 코드에 스펙트럼 확인을 하기 위해 몇 가지 코드를 추가한 예이다. 내가 추가한 부분은 빨간색으로 표시했다.
아래 코드에서 T 변수의 주석에 symbol duration 이라고 되어 있어서 약간 헷갈렸지만~ 변수 T 가 Sampling Rate(Fs)이다.
암튼 저자의 FSK simulation 코드를 보면 Coherent FSK 복조까지 명확하게 알 수 있어서 FSK 를 공부하는 분들이 참조하기에 대단히 좋은 코드라는 생각이 든다.
아래 코드에서 내가 스펙트럼을 확인하기 위해 사용한 pwelch() 함수를 사용하기 위해서는 MATLAB Signal Processing Toolbox 가 있어야 한다.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% All rights reserved by Krishna Pillai, http://www.dsplog.com
% The file may not be re-distributed without explicit authorization
% from Krishna Pillai.
% Checked for proper operation with Octave Version 3.0.0
% Author : Krishna Pillai
% Email : krishna@dsplog.com
% Version : 1.0
% Date : 05 June 2008
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Simple Matlab example of binary Frequency Shift Keying using
% coherent demodulation
clear
N = 10^5 % number of bits or symbols
T = 8; % symbol duration
Fs=T; % Sampling Rate
t = [0:1/T:0.99]; % sampling instants
tR = kron(ones(1,N),t); % repeating the sampling instants
Eb_N0_dB = [0:11]; % multiple Eb/N0 values
for ii = 1:length(Eb_N0_dB)
% generating the bits
ip = rand(1,N)>0.5; % generating 0,1 with equal probability
freqM = ip+1; % converting the bits into frequency, bit0 -> frequency of 1, bit1 -> frequency of 2
freqR = kron(freqM,ones(1,T)); % repeating
x = (sqrt(2)/sqrt(T))*cos(2*pi*freqR.*tR); %generating the FSK modulated signal
% noise
n = 1/sqrt(2)*[randn(1,N*T) + j*randn(1,N*T)]; % white gaussian noise, 0dB variance
% coherent receiver
y = x + 10^(-Eb_N0_dB(ii)/20)*n; % additive white gaussian noise
op1 = conv(y, sqrt(2/T)*cos(2*pi*1*t)); % correlating with frequency 1
op2 = conv(y, sqrt(2/T)*cos(2*pi*2*t)); % correlating with frequency 2
% demodulation
ipHat = [real(op1(T+1:T:end)) < real(op2(T+1:T:end))]; %
nErr(ii) = size(find([ip - ipHat]),2); % counting the number of errors
end
simBer = nErr/N;
theoryBer = 0.5*erfc(sqrt((10.^(Eb_N0_dB/10))/2)); %theoretical BER
close all
figure
semilogy(Eb_N0_dB,theoryBer,'b-');
hold on
semilogy(Eb_N0_dB,simBer,'mx-');
axis([0 11 10^-4 0.5])
grid on
legend('theory:fsk-coh', 'sim:fsk-coh');
xlabel('Eb/No, dB')
ylabel('Bit Error Rate')
title('Bit error probability curve')
%%
figure
pwelch(y,1024,512,1024,Fs)
위 MATLAB 코드를 실행시켜보면 다음과 같이 Coherent Frequency Shift Keying BER 과 FSK Power Spectral Density 그래프를 확인 할 수 있다.
< Coherent Frequency Shift Keying BER >
< Coherent FSK Power Spectral Density >
정확히 주파수 1, 2 Hz 에 톤이 뜨는 것을 확인 할 수 있다.
'programming language > MATLAB' 카테고리의 다른 글
MATLAB sparse matrix(희소 행렬) (0) | 2014.02.19 |
---|---|
MATLAB 프랙탈(Fractal) Dragon Curve (0) | 2014.01.16 |
MATLAB 테트리스(Tetris) 게임 (0) | 2014.01.15 |
MATLAB Game Stellaria (0) | 2014.01.12 |
MATLAB 소프트웨어 단속 하나 보네요~ (13) | 2013.12.25 |
MATLAB Churchill equation GUI (0) | 2013.12.10 |
MATLAB reshape() (0) | 2013.11.29 |
MATLAB 자신만의 colormap 만들기 colormapeditor (0) | 2013.11.20 |
댓글