Đồ án Đi sâu phân tích các phương pháp điều chế số sử dụng khóa dich pha PSK
Các hệ thống thông tin số hiện đang phát triển rất mạnh mẽ trên toàn thế giới và đã thay thế hầu hết các hệ thống thông tin tương tự. Để đáp ứng ngày càng tốt hơn những nhu cầu về chất lượng dịch vụ, sự phong phú của các dịch vụ, hạ giá thành, đặc biệt là số lượng thuê bao đang tăng nhanh các nhà nghiên cứu đã áp dụng rất nhiều kỹ thuật và một trong số đó là kỹ thuật điều chế số. Mặc dù có nhiều phương thức điều chế số, nhưng việc phân tích các phương thức điều chế này chủ yếu tuỳ thuộc vào dạng kiểu điều chế và tách sóng.
Để hiểu rõ hơn về các loại điều chế cũng như cách thức hoạt động của các loại điều chế đặc biệt là điều chế khóa dịch pha ( phasing Shift Keying ) nên em đã chọn đề tài “Đi sâu phân tích các phương pháp điều chế số sử dụng khóa dich pha PSK”. Sau một thời gian tìm hiểu và cùng với sự hướng dẫn của các thầy giáo trong tổ bộ môn và thầy giáo TS. Lê Quốc Vượng trực tiếp hướng dẫn, đến nay em đã hoàn thành đồ án này với nội dung gồm ba chương:
Chương I: Tổng quan về lý thuyết điều chế số tín hiệuChương II: Đi sâu phân tích các loại điều chế khóa dịch pha PSKChương III: Mô phỏng một số loại điều chế khóa dich pha
Em xin bày tỏ lòng cảm ơn tới các thầy giáo đã giúp đỡ để em có thể hoàn thành đồ án tốt nghiệp này.
10 trang |
Chia sẻ: banmai | Lượt xem: 2494 | Lượt tải: 5
Bạn đang xem nội dung tài liệu Đồ án Đi sâu phân tích các phương pháp điều chế số sử dụng khóa dich pha PSK, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
CHƯƠNG TRÌNH MÔ PHỎNG
1. Chương trình mô phỏng truyền dẫn BPSK
% Chương trình của H.Harada and T.Yamamura,
%************************ Phần chuẩn bị ************************
sr=256000.0; % Tốc độ symbol
ml=1; % Số mức điều chế
br=sr.*ml; % Tốc độ truyền dữ liệu bit (trong trường hợp này bằng tốc độ symbol)
nd = 10; % Số ký hiệu (symbol) phỏng trong mỗi vòng lặp
ebn0=3; % Eb/N0
IPOINT=8; % Số mẫu
%*************************** Bộ lọc ***************************
irfn=21; % Các vòi của bộ lọc
alfs=0.5; % Hệ số Roll-off
[xh] = hrollfcoef(irfn,IPOINT,sr,alfs,1); %Hệ số bộ lọc phát
[xh2] = hrollfcoef(irfn,IPOINT,sr,alfs,0); %Hệ số bộ lọc thu
%************************* Bắt đầu tính toán*********************
nloop=100; % Số vòng mô phỏng
noe = 0; % Số lỗi dữ liệu
nod = 0; % số dữ liệu truyền
for iii=1:nloop
%************************* Dữ liệu đầu *************************
data=rand(1,nd)>0.5; % rand: hàm đã được xây dựng
%*********************** Bộ sinh dữ liệu ************************
data1=data.*2-1;
[data2] = oversamp( data1, nd , IPOINT) ;
data3 = conv(data2,xh); % conv: hàm đã được xây dựng
%************************ Attenuation Calculation ***************
spow=sum(data3.*data3)/nd;
attn=0.5*spow*sr/br*10.^(-ebn0/10);
attn=sqrt(attn);
%******************* Kênh nhiễu đa đường (Fading) **************** [ifade,qfade]=sefade(data3,zeros(1,length(data3)),itau,dlvl,th1,n0,itnd1,now1,length(data3),tstp,fd,flat)
%******************* Nhiễu trắng cộng (AWGN) *******************
inoise=randn(1,length(data3)).*attn; % randn: hàm đã được xây dựng
data4=data3+inoise;
data5=conv(data4,xh2); % conv: hàm đã được xây dựng
sampl=irfn*IPOINT+1;
data6 = data5(sampl:8:8*nd+sampl-1);
%********************** Giải điều chế BPSK ********************
demodata=data6 > 0;
%*********************** Tốc độ lỗi bit (BER) ********************
noe2=sum(abs(data-demodata)); % sum: hàm đã được xây dựng
nod2=length(data); % length: hàm đã được xây dựng
noe=noe+noe2;
nod=nod+nod2;
fprintf('%d\t%e\n',iii,noe2/nod2);
plot(data1)
title('Du lieu truyen BPSK')
gtext('Bien do')
gtext('t')
hold on
figure;
plot(data2)
hold on
figure;
plot(data3)
hold on
figure;
plot(data4)
end % for iii=1:nloop
%********************** kết quả mô phỏng ***********************
ber = noe/nod;
fprintf('%d\t%d\t%d\t%e\n',ebn0,noe,nod,noe/nod);
fid = fopen('BERbpsk.dat','a');
fprintf(fid,'%d\t%e\t%f\t%f\t\n',ebn0,noe/nod,noe,nod);
fclose(fid);
gtext('Bien do')
gtext('t')
%******************** Kết thúc chương trình **********************
2. Chương trình mô phỏng pha BPSK
clc
A=1;
M=2;
for i=1:M
Teta_m =2*pi*(i-1)/M;
x=A*cos(Teta_m);
y=A*sin(Teta_m);
plot(x,y,'m:*','LineWidth',6)
title('Do thi sao voi M=2')
xlabel('A*cos(Teta_m)')
ylabel('A*sin(Teta_m)')
axis([-1.3 1.3 -1.3 1.3]);
hold on
end
u=-1.3:0.001:1.3;
v=0;
hold on
plot(u,v,'b')
hold on
plot(v,u,'b')
hold on
grid on
gtext('01')
3. Chương trình mô phỏng truyền dẫn QPSK
% Chương trình của H.Harada and T.Yamamura
%****************** Phần chuẩn bị *****************************
sr=256000.0; % Tốc độ ký hiệu
ml=2; % ml:Số mức điều chế (BPSK:ml=1, QPSK:ml=2, 16QAM:ml=4)
br=sr .* ml; % Tốc độ truyền dữ liệu
nd = 10; % Số ký hiệu trong mỗi vòng mỗi vòng mô phỏng
ebn0=3; % Eb/N0
IPOINT=8; % Số mẫu
%**************************** Bộ lọc **************************
irfn=21; % Số vòi của bộ lọc
alfs=0.5; % Chỉ số Roll-off
[xh] = hrollfcoef(irfn,IPOINT,sr,alfs,1); %Hệ số bộ lọc phát
[xh2] = hrollfcoef(irfn,IPOINT,sr,alfs,0); %Hệ số bộ lọc thu
%************************ Bắt đầu tính toán **********************
nloop=100; % Số vòng mô phỏng
noe = 0; % Số dữ liệu lỗi
nod = 0; % Số dữ liệu đã truyền
for iii=1:nloop
%*********************** Bộ sinh dữ liệu ************************
data1=rand(1,nd*ml)>0.5; % rand: Hàm đã được xây dựng
%************************* QPSK Modulation ********************
[ich,qch]=qpskmod(data1,1,nd,ml);
[ich1,qch1]= compoversamp(ich,qch,length(ich),IPOINT);
[ich2,qch2]= compconv(ich1,qch1,xh);
%********************* Attenuation Calculation *******************
spow=sum(ich2.*ich2+qch2.*qch2)/nd; % sum: Hàm đã được xây dựng
attn=0.5*spow*sr/br*10.^(-ebn0/10);
attn=sqrt(attn); % sqrt: Hàm đã được xây dựng
%****************** Nhiễu trắng cộng (AWGN) ********************
[ich3,qch3]= comb(ich2,qch2,attn);% Thêm nhiễu trắng cộng
[ich4,qch4]= compconv(ich3,qch3,xh2);
syncpoint=irfn*IPOINT+1;
ich5=ich4(syncpoint:IPOINT:length(ich4));
qch5=qch4(syncpoint:IPOINT:length(qch4));
%********************* giải điều chế QPSK **********************
[demodata]=qpskdemod(ich5,qch5,1,nd,ml);
%********************* Tốc độ lỗi bit (BER) **********************
noe2=sum(abs(data1-demodata)); % sum: Hàm đã được xây dựng
nod2=length(data1); % length: Hàm đã được xây dựng
noe=noe+noe2;
nod=nod+nod2;
fprintf('%d\t%e\n',iii,noe2/nod2); % fprintf: Hàm đã được xây dựng
plot(data1)
title('Du lieu truyen QPSK')
hold on
Figure;
plot(ich1)
title('Dữ liệu vượt nhịp kênh I')
figure;
plot(qch1)
title('Dữ liệu vượt nhịp kênh Q')
figure;
plot(ich4)
title('Tín hiệu thu kênh I')
plot(qch4)
title('Dữ liệu vượt nhịp kênh Q')
end % for iii=1:nloop
gtext('Bien do')
gtext('t')
%*********************** Kết quả mô phỏng **********************
ber = noe/nod;
fprintf('%d\t%d\t%d\t%e\n',ebn0,noe,nod,noe/nod); % fprintf: Hàm đã được xây dựng
fid = fopen('BERqpsk.dat','a');
fprintf(fid,'%d\t%e\t%f\t%f\t\n',ebn0,noe/nod,noe,nod); % fprintf: Hàm đã được xây dựng
fclose(fid);
%**************** Kết thúc chương trình mô phỏng ******************
4. Chương trình mô phỏng Pha QPSK
clc
A=1;
M=4;
Teta=pi/M;
for i=1:M
Teta_m =Teta+2*pi*(i-1)/M;
x=A*cos(Teta_m);
y=A*sin(Teta_m);
plot(x,y,'m:*','LineWidth',6)
title('Pha QPSK')
xlabel('A*cos(Teta_m)')
ylabel('A*sin(Teta_m)')
axis([-1.3 1.3 -1.3 1.3]);
hold on
end
gtext('00')
gtext('01')
gtext('11')
gtext('10')
u=-1.3:0.001:1.3;
v=0;
hold on
plot(u,v,'b')
hold on
plot(v,u,'b')
hold on
grid on
5. Một số hàm được thiết lập thêm trong quá trình mô phỏng :
1.function [iout,qout] = comb (idata,qdata,attn)
%****************** Các giá trị *************************
% idata : Dữ liệu vào Ich
% qdata : Dữ liệu vào Qch
% iout Dữ liệu ra Ich
% qout Dữ liệu ra Qch
% attn : attenuation level caused by Eb/No or C/N
%*****************************************************
iout = randn(1,length(idata)).*attn;
qout = randn(1,length(qdata)).*attn;
iout = iout+idata(1:length(idata));
qout = qout+qdata(1:length(qdata));
2. function [iout, qout] = compconv(idata, qdata, filter)
% ****************************************************************
% idata : dãy dữ liệu ich
% qdata : Dãy dữ liệu qch
% filter : vòi lọc coefficience
iout = conv(idata,filter);
qout = conv(qdata,filter);
3.function [iout,qout] = compoversamp( idata, qdata , nsymb , sample)
iout=zeros(1,nsymb*sample);
qout=zeros(1,nsymb*sample);
iout(1:sample:1+sample*(nsymb-1))=idata;
qout(1:sample:1+sample*(nsymb-1))=qdata;
4.function [xh] = hrollfcoef(irfn,ipoint,sr,alfs,ncc)
%****************** Các giá trị *************************
% irfn : Số ký hiệu bộ lọc sử dụng
% ipoint : Số mẫu trong 1 ký hiệu
% sr : Tốc độ ký hiệu
% alfs : Hệ số Roll-off
% ncc : 1 –Bộ lọc phát 0 – Bộ lọc thu
% *****************************************************
xi=zeros(1,irfn*ipoint+1);
xq=zeros(1,irfn*ipoint+1);
point = ipoint;
tr = sr ;
tstp = 1.0 ./ tr ./ ipoint;
n = ipoint .* irfn;
mid = ( n ./ 2 ) + 1;
sub1 = 4.0 .* alfs .* tr; % 4*alpha*R_s
for i = 1 : n
icon = i - mid;
ym = icon;
if icon == 0.0
xt = (1.0-alfs+4.0.*alfs./pi).* tr; % h(0)
else
sub2 =16.0.*alfs.*alfs.*ym.*ym./ipoint./ipoint;
if sub2 ~= 1.0
x1=sin(pi*(1.0-alfs)/ipoint*ym)./pi./(1.0-sub2)./ym./tstp;
x2=cos(pi*(1.0+alfs)/ipoint*ym)./pi.*sub1./(1.0-sub2);
xt = x1 + x2; % h(t) plot((1:length(xh)),xh)
else % (4alphaRst)^2 = 1plot((1:length(xh)),xh)
xt=alfs.*tr.*((1.02.0/pi).*cos(pi/4.0/alfs)+(1.0+2.0./pi).*sin(pi/4.0/alfs))./sqrt(2.0);
end % if sub2 ~= 1.0
end % if icon == 0.0
if ncc == 0 % Trong trường hợp thu
xh( i ) = xt ./ ipoint ./ tr; % Sự chuẩn hóa
elseif ncc == 1 % Trong trường hợp phát
xh( i ) = xt ./ tr; % Sự chuẩn hóa
else
error('ncc error');
end % if ncc == 0
end % for i = 1 : n