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.
KẾT LUẬN
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
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
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;
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
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
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');