SangQ

Matlab을 이용한 간단한 OFDM Signal Simulation 본문

과제

Matlab을 이용한 간단한 OFDM Signal Simulation

SangQ 2009. 11. 7. 01:51
개요
1. OFDM Sequence
2. OFDM Design &Channel & Data Comparison
3. Changion Channel

1. OFDM Sequence



2. OFDM Design
1) Random data = X(K), Y(K)
2) D(K) = X(K)+j(K)
3) d(n) = IFFT (D(K))
4) CP(Cyclic Prefix) added
5) Channel Passage
6) Remove CP = r(n)
7) R(K) = FFT (r(n))
8) Channel 보상
9) ML(Maximum Likelihood) 판정

1)  Random data = X(K), Y(K)
: 송신신호를 만들기위해서 Random Data를 발생시키는 부분이다.

k=linspace(1,64,64); % 64개의 Sub carrier
n=k;

for K=k
    X(K)=round(rand());
    if X(K)==0
    X(K)=-1;
end
end % Real Part 

for K=k
    Y(K)=round(rand());
    if Y(K)==0
    Y(K)=-1;
end
end % Imaginary Part
    % X(K), Y(K) 각각 64개의 Random한 data 발생

2) D(K) = X(K)+j(K)
:
랜덤한 신호를 real part 와 imag part 로 만들어 전송데이터를 만든다.

tx_data(n)=(ifft(TX_DATA(k)));
figure(2)
stem(tx_data)
title('시간 영역의 Transmission Data')


3) d(n) = IFFT (D(K))
: 전송데이터를 ifft 를 이용하여 시간영역에서 주파수영역으로 변환 시키다.

tx_data(n)=(ifft(TX_DATA(k)));
figure(2)
stem(tx_data)
title('시간 영역의 Transmission Data')



4) CP(Cyclic Prefix) added
: CP는 딜레이로 인한 신호들간의 간섭으로 인한 오류를 없애주는 구간으로 전송할 데이터의 뒷부분..
  1/4정도의 크기를 앞에 붙인다.

CPplus_tx=[tx_data(49:64) tx_data]; % 원래 길이의 1/4
figure(3)
stem(CPplus_tx)
title('CP 첨가 된 Transmission Data')



5) Channel Passage
: 전송데이터를 전송하면서 채널에 통과시키는 부분이다.

n1=1:64;
n0=1;
delta=[(n1-n0)==0];
h=delta(n1)+0.5*[delta(62:64) delta(1:61)]; % 채널생성
figure(4)
stem(fft(h))
title('Channel')

시간영역에서의 채널

주파수영역에서의 채널

rx_data=conv(CPplus_tx,h);
figure(5)
stem(rx_data)
title('Channel 통과')



6) Remove CP = r(n)
: 채널을 통과하뎌 수신된 신호의 CP부분과 뒤에 필요없는 부분을 잘라내는 부분이다.

CPminus_rx=[rx_data(17:80)];
figure(6)
stem(CPminus_rx)
title('시간 영역에서 CP 제거 된 Receive Data')



7) R(K) = FFT (r(n))
: FFT를 이용하여 송신된 시간영역의 신호를 주파수영역으로 변환하는 부분이다.

RX_DATA=fft(CPminus_rx);
figure(7)
stem(RX_DATA)
title('주파수 영역에서 Receive Data')



8) Channel 보상
: 원래는 처음에 송신신호를 모두가 다 아는 신호로 보내어 채널을 추정하고 원래의 보내고자하는 신호를 보내어 채널보상을 통해 수신신호를 알아내는것인데, 송신한신호를 알고있다고 가정하고 채널을 추정하여 그 추정한 채널을 통해 송신데이터를 알아내는 부분이다.

Estimaion_Channel=RX_DATA./TX_DATA; % 채널 추정
Estimaion_Data=RX_DATA./Estimaion_Channel; % 채널 보상

figure(8)
stem(Estimaion_Channel) % 추정한 채널
hold on
stem(fft(h),'r*') % 원래의 채널
title('추정한 채널')
hold off



figure(9)
stem(Estimaion_Data)
title('추정된 데이터')
axis([0 70 -1 1])



9) ML(Maximum Likelihood) 판정
: ML판정으로 알지못하는 신호들을 정확한 값으로 바꿔주는 부분이다.
그리고 처음 송신한 데이터와 ML판정되어 수신된 데이터를 비교하여보았다.

for L=k
        Rml(L)=real(Estimaion_Data(L)); Iml(L)=imag(Estimaion_Data(L));
    if Rml(L)>0  Rml(L)=1;
    else Rml(L)=-1;
    end
    if Iml(L)>0 Iml(L)=1;
    else Iml(L)=-1;
    end
end
Rml(1)=0; Rml(28:38)=0;
Iml(1)=0; Iml(28:38)=0;
ml=Rml+Iml*i;



figure(10)
stem(ml)
hold on
stem(TX_DATA, 'r*')
title('ML 판정을 한 최종데이터')
hold off



3. Changion Channel
: 채널을 변경하여 위와 같이 하여 다시 Sinulation 시켜봤다.

h=delta(n1)+0.2*[delta(64) delta(1:63)]+0.8*[delta(63:64) delta(1:62)]...
+0.5*[delta(62:64) delta(1:61)]; % h 변경



4. 설계를 마치며
 : 시뮬레이션된 송신신호와 수신신호가 완전히 일치하는것을 볼수있다. 이는 전송데이터를 잘 알고있다고 가정하고한 시뮬레이션이라서 그런것 같다. 실제로는 noise가 섞여서 모든 신호들이 일치하지는 않는다.
노이즈를 첨가하여 실험해보았으나...결과 값이 제대로 나왔는지 제대로 나오지 않았는지 잘 몰라서 이 글에 올리지 않았다.
이 설계를 통해 OFDM의 데이터 전속방식에해한 이해를 할 수 있었던거 같다 ^0^