Kiểm tra tính hội tụ của số lượng ăng ten

Một phần của tài liệu các kỹ thuật phân tập thu ở trong ofdm (Trang 52 - 64)

α − Việc làm này mục đích đồng pha các tín hiệu Như vậy biên độ tín

4.5 Kiểm tra tính hội tụ của số lượng ăng ten

Số gói tin đã truyền đi n = 800.

Số ăng ten thu được sử dụng N_rx= 2, 4, 9, 10, 11. Mức điều chế QAM: M =64 .

Hình 4.11 Kết quả mô phỏng với số lượng ăng ten khác nhau

Nhận xét:

Với N_rx=4, thì BER nhỏ hơn N_rx=2. Khi tăng N_rx=9 thì thì BER giảm một cách đáng kể so với N_rx=2. Tiếp tục tăng N_rx: N_rx=10, 11 thì ta nhận thấy BER giảm không đột ngột nữa. Dường như hai đường này xấp xỉ nhau.

Như vậy không phải cứ tăng số lượng anten lên là cải thiện được BER của hệ thống. Ở một số lượng anten xác định nào đó thì BER khơng tăng nữa.

4.6 Kết luận

Trong chương cuối cùng này, đã mô phỏng các kỹ thuật phân tập thu trong hệ thống OFDM bằng chương trình matlab. Kết quả mô phỏng gần như chứng minh sự khác nhau trong hiệu quả của các kỹ thuật phân tập thu trong hệ thống OFDM đã được trình bày ở chương trước. Các kỹ thuật này đã cải thiện đáng kể BER của hệ thống, giải quyết được multipath fading. Đặt biệt MRC, kỹ thuật này rất hiệu quả nhất.

Qua đề tài này cho ta thấy được hiệu quả của việc áp dụng phân tập thu đã khắc phục được nhược điểm nhiễu fading đa đường nên cải thiện đáng kể chất lượng kênh truyền, nâng cao dung lượng hệ thống và kỹ thuật ghép kênh phân chia theo tần số trực giao – OFDM là một kỹ thuật hiện đại với nhiều ưu điểm nổi bật. Chúng ta có thể hướng đến những tài liệu liên quan đến cơng nghệ OFDM đó là:

- Những kỹ thuật OFDM nâng cao: VOFDM (Vector OFDM), COFDM (Code OFDM), WOFDM (Wideband OFDM), OFDMA (OFDM Access)

- Kết hợp OFDM với những công nghệ khác như CDMA nhằm phục vụ đa truy cập của mạng.

- Ứng dụng OFDM trong WLAN, Wimax, LTE, ứng dụng điện thoại di động trong truyền hình số mặt đất DVB-T.

[1] PGS.TS Nguyễn Văn Đức “Lý thuyết và các ứng dụng của kỹ thuật OFDM”, Nhà xuất bản khoa học và kỹ thuật Hà Nội, năm 2006.

[2] TS. Phan Hồng Phương, KS. Lâm Chi Thương, “Kỹ thuật phân tập anten trong cải thiện dung lượng hệ thống MIMO.

[3] TS. Nguyễn Lê Hùng, “Bài giảng thông tin di động” năm 2011.

[4] Andrea Goldsmith, “Wireless communications”, copyright 2005 by Cambridge University Press.

% Đoạn chương trình mơ phỏng tồn bộ hệ thống

% Diversity

clear all; close all;

N_packet = 2000 % number of simulation packets

for d=1:1:4

N_rx=3;

N_tx = 1; % So ang ten phat =1

M_QAM =32; % Muc dieu che M-QAM SNR = [1:1:18]; N_data_sym =21; %============== OFDM settings-------------- L = 5; % So resolvable multipaths < N_cp N_fft =128; N_cp = 10; SigPow = N_tx*1; Ns = N_fft + N_cp; PDP = exp(-(0:L-1)/4)/sum( exp(-(0:L-1)/4) ); %---------------------------- subcarr_len = log2(M_QAM); BER = zeros(1,length(SNR)); tic

for SNR_index = 1:length(SNR)

No = SigPow/(10^(SNR(SNR_index)/10)); for packet = 1:N_packet

disp(['SNR=', num2str(SNR(SNR_index)), ';Packet=', num2str(packet)]); if d==0 N_rx=1; end [tx_data_sig,data_bit_seq,data_sym] = Tx_data_signal_generator_Diversity(subcarr_len,N_fft,N_data_sym,L); h = zeros(L,N_tx,N_rx); for rx_anten = 1:N_rx

h(:,1,rx_anten) = sqrt(PDP.'/2).*( randn(L,1) + 1j*randn(L,1) ); end

[rx_sig,FD_rx_sig] = Rx_Sig_Generator(N_tx,N_rx,L,N_fft,No,h,tx_data_sig); [reco_bits, reco_sym] = Diversity( h, FD_rx_sig, subcarr_len, N_fft, N_data_sym, N_rx, L, d );

BER(SNR_index) = BER(SNR_index) + sum( abs(data_bit_seq - reco_bits) ); end end BER = BER/(N_packet*subcarr_len*N_fft*N_data_sym); switch(d) case 1 figure(1)

case 2 semilogy(SNR,BER,'b*:','LineWidth',2); hold on; case 3 semilogy(SNR,BER,'yx-','LineWidth',2); hold on; case 4 semilogy(SNR,BER,'k-->','LineWidth',2); hold on; otherwise end xlabel('SNR (dB)');

ylabel('Bit error rate (BER)'); legend( 'MRC Bloc-fading',... 'EGC Block-fading' ,... 'SC Block-fading',... 'TC Block-fading'); end

% Đoạn chương trình mơ tả khối tạo thơng sơ kênh truyền và khối các kỹ thuật phân tập thu MRC, SC, TC, EGC cũng như khơng có phân tập.

function [ reco_bits, reco_sym ] = Diversity( h, FD_rx_sig, subcarr_len, N_fft,

N_data_sym, N_rx, L, d ) N_tx=1; H = zeros(N_fft, 1, N_rx); for rx = 1:N_rx for k = 1:N_fft H(k, 1, rx) = exp(-2j*pi*(k-1)*[0:L-1]/N_fft)*h(:,1,rx); end end reco_bits = zeros(1,subcarr_len*N_fft*N_data_sym); for sym = 1:N_data_sym

reco_sym = zeros(N_fft,1);

for i =1:N_fft %go through all subcarrier y=0;

t=0;

if d == 1

%Maximal Ratial Combining for rx = 1:N_rx

y=y+FD_rx_sig(i,rx,sym)*conj(H(i,1,rx)); t=t+(conj(H(i,1,rx))*H(i,1,rx));

elseif d==0 % No Diversity y=FD_rx_sig(i,rx,sym); t=H(i,1,rx); s1=y/t; reco_sym(i)=[s1]; elseif d==2

% Equal Gain Combining for rx=1:N_rx y=y+FD_rx_sig(i,rx,sym)*conj(H(i,1,rx))/abs(H(i,1,rx)); t=t+abs(H(i,1,rx)); end s1=y/t; reco_sym(i) = [s1]; elseif d == 3 %Selection Combining [Hmax, rx] = max( abs(H(i,1,:))); y=FD_rx_sig(i,rx,sym); s1=y/(H(i,1,rx)); reco_sym(i) = [s1]; elseif d==4 % Threshold Combining SigPow = N_tx*1; threshold = SigPow; rx = 1; count = 0;

while ((abs(H(i,1,rx)) < threshold) && (count < N_rx)) rx = mod(rx,N_rx)+1; count = count + 1; end reco_sym(i) = FD_rx_sig(i,rx,sym)/H(i,1,rx); end end reco_bits((subcarr_len*N_fft*(sym-1)+1):subcarr_len*N_fft*sym) = MQAM_Demodulator(reco_sym,2^subcarr_len); end end

% Đoạn chương trình mơ tả khối tạo tín hiệu phát

function [tx_data_sig,data_bit_seq,data_sym] =

Tx_data_signal_generator_Diversity(subcarr_len,N_fft,N_data_sym,L)

% Data OFDM signal generation

data_bit_seq = randint(1,subcarr_len*N_fft*N_data_sym); %tao ra chuoi bi ngau

nghien, 1 hang, chua chen CP

pre_QAM_seq = reshape(data_bit_seq,subcarr_len,N_fft,N_data_sym);% chia ra

tx_data_1 = MQAM_modulator(pre_QAM_seq(:,:,sym));%????????? data_sym = tx_data_1.';

% According to the Gray Mapping USED

tx_data_sig(1:N_fft,1:L,1,sym) = circulant_ma(sqrt(N_fft)*ifft(tx_data_1.'),L);% end

end

% Đoạn chương trình mơ phỏng khối tín hiệu thu được

function [rx_sig,FD_rx_sig] = Rx_Sig_Generator(N_tx,N_rx,L,N_fft,No,h,tx_data_sig)

N_data_sym =21; for mm=1:N_data_sym for rx_anten = 1:N_rx rx_sig_nonoise = zeros(N_fft,1); rx_sig_nonoise = rx_sig_nonoise... + tx_data_sig(1:N_fft,1:L,N_tx,mm)*h(1:L,N_tx,rx_anten); AWGN_sig = sqrt(No/2)*( randn(N_fft,1) + j*randn(N_fft,1) ); rx_sig(1:N_fft,rx_anten,mm) = rx_sig_nonoise + AWGN_sig; FD_rx_sig(1:N_fft,rx_anten,mm) = sqrt(1/N_fft)*fft(rx_sig(1:N_fft,rx_anten,mm));%

chuyen lai qua mien tan so

end

end end

% Đoạn chương trình mơ phỏng khối điều chế

function [QAM_sym] = MQAM_modulator(bit_tupple)

tupple_Len = length(bit_tupple(:,1));%so bit/subcarrier burst_len = length( bit_tupple(1,:) );%so subcarriers

%[int_value] = two_bit_to_int(two_bits);

QAM_sym = zeros(1,burst_len);%

for sam =1:burst_len

if tupple_Len == 1 %M = 2

QAM_sym(sam) = 2*bit_tupple(1,sam) -1; elseif tupple_Len == 2 %M = 4

QAM_sym(sam) = (2*bit_tupple(1,sam) -1) +1i*(2*bit_tupple(2,sam) -1); elseif tupple_Len == 3 %M = 8

QAM_sym(sam) = 2*bit_tupple(1,sam) -1+ 1i*sign(bit_tupple(2,sam)-0.5)*(- 2*bit_tupple(3,sam) +3);

elseif tupple_Len == 5 %M = 32 QAM_sym(sam) = sign(bit_tupple(1,sam)-0.5)*(-2*bit_tupple(2,sam) +3) +... 1i*sign(bit_tupple(3,sam)-0.5)*two_bit_to_int(bit_tupple(4:5,sam)); elseif tupple_Len == 6 %M = 64 QAM_sym(sam) = sign(bit_tupple(1,sam)-0.5)*two_bit_to_int(bit_tupple(2:3,sam)) +... 1i*sign(bit_tupple(4,sam)-0.5)*two_bit_to_int(bit_tupple(5:6,sam)); elseif tupple_Len == 7 %M = 128 QAM_sym(sam) = sign(bit_tupple(1,sam)-0.5)*two_bit_to_int(bit_tupple(2:3,sam)) +... 1i*(sign(bit_tupple(4,sam)-0.5)*8 - sign(bit_tupple(4,sam)- 0.5)*sign(bit_tupple(5,sam)-0.5)*two_bit_to_int(bit_tupple(6:7,sam))); elseif tupple_Len == 8 %M = 256

QAM_sym(sam) = sign(bit_tupple(1,sam)-0.5)*8 - sign(bit_tupple(1,sam)- 0.5)*sign(bit_tupple(2,sam)-0.5)*two_bit_to_int(bit_tupple(3:4,sam)) + ...

1i*(sign(bit_tupple(5,sam)-0.5)*8 - sign(bit_tupple(5,sam)- 0.5)*sign(bit_tupple(6,sam)-0.5)*two_bit_to_int(bit_tupple(7:8,sam))); end

end

% Đoạn chương trình mơ phỏng khối giải điều chế

function [recovered_bits] = MQAM_Demodulator(sig,M)

num_sam = length(sig);%

if M == 2

%bits:0 1 s = [-1 1];

for sam = 1:num_sam

[distance,min_index] = min( abs( sig(sam) - s ).^2 ); recovered_bits(sam) = min_index-1;

end

%=============================================================== elseif M == 4

%bits:00 10 01 11 s = [-1-1i 1-1i -1+1i 1+1i]; for sam = 1:num_sam

[distance,min_index] = min( abs( sig(sam) - s ).^2 );

recovered_bit_temp(1:2,sam) = dec2bin(min_index-1,2); end recovered_bits = reshape(recovered_bit_temp,1,2*(num_sam)); %=============================================================== elseif M == 8 %new load QAM8dectab.mat

recovered_bits = horzcat(recovered_bits, reshape(QAMbintab(y, x, :), 1, 3)); end

%=============================================================== elseif M == 16 %new

load QAM16dectab.mat

[QAMbintab, QAMcplxtab] = make_tables(4,QAM_in); recovered_bits = [];

for sam = 1:num_sam

[y, x] = nearestIndex(sig(sam),QAMcplxtab);

recovered_bits = horzcat(recovered_bits, reshape(QAMbintab(y, x, :), 1, 4)); end

%=============================================================== elseif M == 32 %new

load QAM32dectab.mat

[QAMbintab, QAMcplxtab] = make_tables(5,QAM_in); recovered_bits = [];

for sam = 1:num_sam

[y, x] = nearestIndex(sig(sam),QAMcplxtab);

recovered_bits = horzcat(recovered_bits, reshape(QAMbintab(y, x, :), 1, 5)); end

%=============================================================== elseif M == 64 %new

load QAM64dectab.mat

[QAMbintab, QAMcplxtab] = make_tables(6,QAM_in); recovered_bits = [];

for sam = 1:num_sam

[y, x] = nearestIndex(sig(sam),QAMcplxtab);

recovered_bits = horzcat(recovered_bits, reshape(QAMbintab(y, x, :), 1, 6)); end

%=============================================================== elseif M == 128 %new

load QAM128dectab.mat

[QAMbintab, QAMcplxtab] = make_tables(7,QAM_in); recovered_bits = [];

for sam = 1:num_sam

[y, x] = nearestIndex(sig(sam),QAMcplxtab);

recovered_bits = horzcat(recovered_bits, reshape(QAMbintab(y, x, :), 1, 7)); end

%=============================================================== elseif M==256 %new

load QAM256dectab.mat

[QAMbintab, QAMcplxtab] = make_tables(8,QAM_in); recovered_bits = [];

for sam = 1:num_sam

[y, x] = nearestIndex(sig(sam),QAMcplxtab);

% Đoạn chương trình nguồn mơ phỏng tính hội tụ các ăng ten

clear all; close all;

N_packet =800; % number of simulation packets d=3; for x=1:5 if x==1 N_rx=2; elseif x==2 N_rx=4; elseif x==3 N_rx=9; elseif x==4 N_rx=10; elseif x==5 N_rx=11; end

N_tx = 1; % So ang ten phat =1

M_QAM =64; % Muc dieu che M-QAM SNR = [0:2:20].'; N_data_sym =21; %============== OFDM settings-------------- L = 5; % So resolvable multipaths < N_cp N_fft =128; N_cp = 10; SigPow = N_tx*1;

Ns = N_fft + N_cp; % OFDM symbol length (in sample) after CP insertion PDP = exp(-(0:L-1)/4)/sum( exp(-(0:L-1)/4) );

%----------------------------

subcarr_len = log2(M_QAM); BER = zeros(1,length(SNR)); tic

for SNR_index = 1:length(SNR)

No = SigPow/(10^(SNR(SNR_index)/10)); for packet = 1:N_packet

disp(['SNR=', num2str(SNR(SNR_index)), ';Packet=', num2str(packet)]); if d==0 N_rx=1; end [tx_data_sig,data_bit_seq,data_sym] = Tx_data_signal_generator_Diversity(subcarr_len,N_fft,N_data_sym,L); h= zeros(L,N_tx,N_rx); for rx_anten = 1:N_rx

[rx_sig,FD_rx_sig] = Rx_Sig_Generator(N_tx,N_rx,L,N_fft,No,h,tx_data_sig); [reco_bits, reco_sym] = Diversity( h, FD_rx_sig, subcarr_len, N_fft, N_data_sym, N_rx, L, d );

BER(SNR_index) = BER(SNR_index) + sum( abs(data_bit_seq - reco_bits) ); end end BER = BER/(N_packet*subcarr_len*N_fft*N_data_sym); switch(x) case 1 figure(1) semilogy(SNR,BER,'b*:','LineWidth',2); hold on; case 2 semilogy(SNR,BER,'r+-','LineWidth',2); hold on; case 3 semilogy(SNR,BER,'k>--','LineWidth',2); hold on; case 4 semilogy(SNR,BER,'yx-','LineWidth',2); hold on; case 5 semilogy(SNR,BER,'go-','LineWidth',2); hold on; otherwise end xlabel('SNR (dB)');

ylabel('Bit error rate (BER)'); legend( 'N_rx=2',... 'N_rx=4',... 'N_rx=9',... 'N_rx=10',... 'N_rx=11'); end

Một phần của tài liệu các kỹ thuật phân tập thu ở trong ofdm (Trang 52 - 64)

Tải bản đầy đủ (DOCX)

(64 trang)
w