Kếtquả mô phỏng tín hiệu qua kênh Gauss và Raleigh

Một phần của tài liệu Kỹ thuật phân tập thời gian và thiết kế mã quay (Trang 55)

4.2.1 Kếtquả mô phỏng tín hiệu QPSK và QPSK quay qua kênh Rayleigh

Hình 4.2: Tín hiệu QPSK có quay và không quay qua kênh Rayleigh (3 góc)

4.3 Nhận xét kết quả

Kết luận: Kết quả mô phỏng cho thấy tín hiệu QPSK qua kênh Rayleigh sử dụng mã quay tốt hơn là mã không quay. Góc tối ưu phù hợp với lý thuyết đã trình bày.

KT LUN

Luận văn đã đạt được những kết quả như sau:

1. Luận văn trình bày một cách hệ thống các khái niệm cơ bản lý thuyết thông tin vô tuyến theo quan điểm sử dụng kỹ thuật phân tập để có được độ tin cậy

đảm bảo mà hạn chế tối ưu công suất và giới thiệu một số kỹ thuật phân tập phổ biến

2. Luận văn trình bày kỹ thuật phân tập, cụ thể: phân tập thời gian, phân tập không gian và tần số.

3. Luận văn trình bày nguyên lý của mã quay

4. Luận văn đã mô phỏng kết quả: tín hiệu qua kênh Gauss và Rayleigh, tín hiệu QPSK quay và không quay qua kênh Rayleigh để thấy được khi sử dụng mã quay ta vẫn đảm bảo được các yêu cầu mã lại tiết kiệm được công suất. Kết quả mô phỏng phù hợp với cơ sở lý thuyết đã trình bày.

5. Hạn chế của Luận văn: chưa tính toán đến cấu trúc phần cứng để thực hiện kỹ thuật mã quay theo lý thuyết đã trình bày; trong thực tế khi sử dụng độc lập mã quay hiệu quả đạt được là không cao nên người ta kết hợp mã quay và ghép xen nhưng trong phạm vi Luận văn này phần mô phỏng chưa đề cập

TÀI LIỆU THAM KHẢO

Tài liệu tiếng Việt:

[1] TS Nguyễn Phạm Anh Dũng “Lý thuyết trải phổ và đa truy nhập vô tuyến”, Học viện Công nghệ Bưu chính viễn thông, 2006

[2] TS Nguyễn Viết Kính, TS. Trịnh Anh Vũ “ Thông tin số”, NXB Giáo dục 2007

[3] TS Trịnh Anh Vũ “Thông tin di động”, NXB Đại học Quốc Gia Hà Nội Tài liệu tiếng Anh

[4] Fundamentals of Wireless Communications, David Tse, University of California, Berkeley Pramod Viswanath, University of Illinois, Urbana- Champaign August 13, 2004

PHỤ LỤC

1. Chương trình Matlab mô phỏng tín hiệu QPSK quay và QPSK qua kênh fading (với hai góc quay).

clear; clc;

N = 10^5; % Total no of of bits per simulation per SNR_dB

bitstrm1 = []; %initialisation of matrices

bitstrm2 = [];

%theta=22.5*pi/180;

theta1=20*pi/180; theta=35.24*pi/180;

A=[cos(theta) -sin(theta); sin(theta) cos(theta)]; A1=[cos(theta1) -sin(theta1); sin(theta1) cos(theta1)];

for i = 1:N

bitstrm1 = [bitstrm1 (-1+2*round(rand(1,1)))]; %creating random data for INPHASE component

% bitstrm2 = [bitstrm2 (-1+2*round(rand(1,1)))];

bitstrm2 = [bitstrm2 (1)]; %Chi dung 2 sao la: (-1,1) va (1,1) cho don gian (adsbygoogle = window.adsbygoogle || []).push({});

end

Data = [bitstrm1; bitstrm2]; %putting the two random bitstreams together

Data_new = A*Data; %Du lieu duoc quay

Data_new1 = A1*Data;

Data_st=A*[-1 1 % vi tri sao co dinh duoc quay

1 1];

Eb_No_dB = [0:5:35]; % multiple Eb/N0 values

for i = 1:length(Eb_No_dB)

sig = sqrt(1/10^(Eb_No_dB(i)/10)); % noise variance

n = sig*(randn(2,N) + 1i*randn(2,N)); % Additive white gaussian noise prototype

h = randn(2,N) + 1i*randn(2,N); % Rayleigh channel 1,

h=abs(h); % tinh do lon cua Gain

y = h.*Data + n; % bit-streams corrupted by Rayleigh channel & AWGN

y2=h.*Data_new+n; % Du lieu Quay di qua kenh

y3=h.*Data_new1+n;

y_rcv = y./h; % equalization of received data by channel information at the receiver

y_rcv2 = y2./h; % equalization du lieu quay

y_rcv3 = y3./h;

a1=abs(real(y_rcv(1,:))+1+j*(real(y_rcv(2,:))-1)); % tinh k/cach den sao 1

a2=abs(real(y_rcv2(1,:))-1+j*(real(y_rcv2(2,:))-1));% tinh k/cach den sao2

b1= abs(real(y_rcv2(1,:))-Data_st(1,1)+j*(real(y_rcv2(2,:))-Data_st(2,1))); % k/cach den sao 1 quay

b2= abs(real(y_rcv2(1,:))-Data_st(1,2)+j*(real(y_rcv2(2,:))-Data_st(2,2)));% k/cach den sao 2 quay

c1= abs(real(y_rcv3(1,:))-Data_st(1,1)+j*(real(y_rcv3(2,:))-Data_st(2,1))); % k/cach den sao 1 quay

c2= abs(real(y_rcv3(1,:))-Data_st(1,2)+j*(real(y_rcv3(2,:))-Data_st(2,2)));% k/cach den sao 2 quay

for t=1: N if a1(t)<=a2(t)

Data_rcv (1,t)=-1;% Quyet dinh la sao 1

Data_rcv(2,t)=1; else

Data_rcv (1,t)=1; % quyet dinh la sao 2 (adsbygoogle = window.adsbygoogle || []).push({});

Data_rcv(2,t)=1; end

if b1(t)<=b2(t)

Data_rcv2 (1,t)=-1;% Quyet dinh la sao 1

Data_rcv2(2,t)=1; else

Data_rcv2 (1,t)=1;% Quyet dinh la sao 2

Data_rcv2(2,t)=1; end

if c1(t)<=c2(t)

Data_rcv3 (1,t)=-1;% Quyet dinh la sao 1

Data_rcv3(2,t)=1; else

Data_rcv3 (1,t)=1;% Quyet dinh la sao 2

Data_rcv3(2,t)=1; end

end

err_ml = Data ~= Data_rcv; % Tim loi bit

err_ml2 = Data ~= Data_rcv2; err_ml3 = Data ~= Data_rcv3;

err_sym=or(err_ml(1,:),err_ml(2,:)); % Tim loi sao

err_sym2=or(err_ml2(1,:),err_ml2(2,:)); err_sym3=or(err_ml3(1,:),err_ml3(2,:));

Err(i)=sum(err_sym); % dem loi sao

Err2(i)=sum(err_sym2); Err3(i)=sum(err_sym3);

end

simBer = Err/(N); % average BER on total no. of bits simulated simBer2 = Err2/(N); simBer3 = Err3/(N); semilogy(Eb_No_dB,simBer,'m-'); axis([0 35 10^-5 0.5]) grid on hold on semilogy(Eb_No_dB,simBer3,'b-'); grid on hold on semilogy(Eb_No_dB,simBer2,'r-');

legend('QPSK khong quay','QPSK quay voi goc 20 do', 'QPSK quay voi 35,24 do'); xlabel('Eb/No, dB');

ylabel('Bit Error Rate');

title('BER for QPSK modulation in Rayleigh channel');

2. Chương trình Matlab mô phỏng tín hiệu QPSK quay và QPSK qua kênh fading (với ba góc quay).

clear; clc;

N = 10^5; % Total no of of bits per simulation per SNR_dB

bitstrm1 = []; %initialisation of matrices

bitstrm2 = []; theta1=20*pi/180; theta2=48*pi/180; theta=35.24*pi/180; (adsbygoogle = window.adsbygoogle || []).push({});

A=[cos(theta) -sin(theta); sin(theta) cos(theta)]; A1=[cos(theta1) -sin(theta1); sin(theta1) cos(theta1)]; A2=[cos(theta2) -sin(theta2); sin(theta2) cos(theta2)];

for i = 1:N

bitstrm1 = [bitstrm1 (-1+2*round(rand(1,1)))]; %creating random data for INPHASE component

% bitstrm2 = [bitstrm2 (-1+2*round(rand(1,1)))];

bitstrm2 = [bitstrm2 (1)]; %Chi dung 2 sao la: (-1,1) va (1,1) cho don gian

end

Data = [bitstrm1; bitstrm2]; %putting the two random bitstreams together

Data_new = A*Data; %Du lieu duoc quay

Data_new1 = A1*Data; Data_new2 = A2*Data;

Data_st=A*[-1 1 % vi tri sao co dinh duoc quay

1 1];

Data_st1=A1*[-1 1 % vi tri sao co dinh duoc quay

1 1];

Data_st2=A2*[-1 1 % vi tri sao co dinh duoc quay

1 1];

Eb_No_dB = [0:5:35]; % multiple Eb/N0 values

for i = 1:length(Eb_No_dB)

sig = sqrt(1/10^(Eb_No_dB(i)/10)); % noise variance

n = sig*(randn(2,N) + 1i*randn(2,N)); % Additive white gaussian noise prototype

h = randn(2,N) + 1i*randn(2,N); % Rayleigh channel 1,

h=abs(h); % tinh do lon cua Gain

y = h.*Data + n; % bit-streams corrupted by Rayleigh channel & AWGN

y2=h.*Data_new+n; % Du lieu Quay di qua kenh

y3=h.*Data_new1+n; y4=h.*Data_new2+n;

y_rcv = y./h; % equalization of received data by channel information at the receiver

y_rcv2 = y2./h; % equalization du lieu quay

y_rcv3 = y3./h; y_rcv4 = y4./h;

a1=abs(real(y_rcv(1,:))+1+j*(real(y_rcv(2,:))-1)); % tinh k/cach den sao 1

a2=abs(real(y_rcv2(1,:))-1+j*(real(y_rcv2(2,:))-1));% tinh k/cach den sao2 (adsbygoogle = window.adsbygoogle || []).push({});

b1= abs(real(y_rcv2(1,:))-Data_st(1,1)+j*(real(y_rcv2(2,:))-Data_st(2,1))); % k/cach den sao 1 quay

b2= abs(real(y_rcv2(1,:))-Data_st(1,2)+j*(real(y_rcv2(2,:))-Data_st(2,2)));% k/cach den sao 2 quay

c1= abs(real(y_rcv3(1,:))-Data_st(1,1)+j*(real(y_rcv3(2,:))-Data_st(2,1))); % k/cach den sao 1 quay

c2= abs(real(y_rcv3(1,:))-Data_st(1,2)+j*(real(y_rcv3(2,:))-Data_st(2,2)));% k/cach den sao 2 quay

d1= abs(real(y_rcv4(1,:))-Data_st(1,1)+j*(real(y_rcv4(2,:))-Data_st(2,1))); % k/cach den sao 1 quay

d2= abs(real(y_rcv4(1,:))-Data_st(1,2)+j*(real(y_rcv4(2,:))-Data_st(2,2)));% k/cach den sao 2 quay

for t=1: N if a1(t)<=a2(t)

Data_rcv (1,t)=-1;% Quyet dinh la sao 1

Data_rcv(2,t)=1; else

Data_rcv (1,t)=1; % quyet dinh la sao 2

Data_rcv(2,t)=1; end

if b1(t)<=b2(t)

Data_rcv2 (1,t)=-1;% Quyet dinh la sao 1

Data_rcv2(2,t)=1; else

Data_rcv2 (1,t)=1;% Quyet dinh la sao 2

Data_rcv2(2,t)=1; end

if c1(t)<=c2(t)

Data_rcv3 (1,t)=-1;% Quyet dinh la sao 1

Data_rcv3(2,t)=1; else

Data_rcv3 (1,t)=1;% Quyet dinh la sao 2

Data_rcv3(2,t)=1; end

if d1(t)<=d2(t)

Data_rcv4 (1,t)=-1;% Quyet dinh la sao 1

Data_rcv4(2,t)=1; else

Data_rcv4 (1,t)=1;% Quyet dinh la sao 2

Data_rcv4(2,t)=1; end

end

err_ml2 = Data ~= Data_rcv2; err_ml3 = Data ~= Data_rcv3; err_ml4 = Data ~= Data_rcv4;

err_sym=or(err_ml(1,:),err_ml(2,:)); % Tim loi sao (adsbygoogle = window.adsbygoogle || []).push({});

err_sym2=or(err_ml2(1,:),err_ml2(2,:)); err_sym3=or(err_ml3(1,:),err_ml3(2,:)); err_sym4=or(err_ml4(1,:),err_ml4(2,:));

Err(i)=sum(err_sym); % dem loi sao

Err2(i)=sum(err_sym2); Err3(i)=sum(err_sym3); Err4(i)=sum(err_sym4);

end

simBer = Err/(N); % average BER on total no. of bits simulated

simBer2 = Err2/(N); simBer3 = Err3/(N); simBer4 = Err4/(N); semilogy(Eb_No_dB,simBer,'mx-'); axis([0 35 10^-5 0.5]) hold on grid on semilogy(Eb_No_dB,simBer3,'b-'); hold on grid on semilogy(Eb_No_dB,simBer4,'g-'); hold on grid on semilogy(Eb_No_dB,simBer2,'r-');

legend('QPSK khong quay','QPSK quay voi goc 20 do','QPSK quay voi goc 48 do','QPSK quay voi goc 35,24 do');

xlabel('Eb/No, dB'); ylabel('Bit Error Rate');

Một phần của tài liệu Kỹ thuật phân tập thời gian và thiết kế mã quay (Trang 55)