Lab 5 - Digital Modulation

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 8

CHUYÊN ĐỀ 5: ĐIỀU CHẾ SỐ

5.1. THỜI GIAN.


Hướ ng dẫ n đầ u giờ : 0,5 giờ Thí nghiệm: 2,5 giờ
5.2. MỤC ĐÍCH, YÊU CẦU.
Giú p sinh viên:
- Hiểu đượ c cơ sở lý thuyết củ a điều chế số QPSK và 16-QAM.
- Biết cá ch tạ o ra mộ t mô hình mô phỏ ng sử dụ ng Matlab/Simulink
- Phâ n tích và kiểm nghiệm lý thuyết dự a trên các mô hình điều chế đã tạ o
ra.
5.3 CƠ SỞ LÝ THUYẾT
5.3.1. Sơ đồ khối điều chế
QPSK (còn gọi là 4-PSK) viết tắt của từ Quadrature Phase Shift Keying, là điều
chế khóa dịch pha cầu phương (điều chế pha vuông góc), QPSK là kỹ thuật điều
chế số, mã hóa 2 bit thành 1 symbol.

1 0 0 1

11000110

1 0 1 0

Hình 4.1: Sơ đồ nguyên lý điều chế QPSK

Dữ liệu nhị phâ n đầ u và o tố c độ bit Rb đượ c tá ch thà nh 2 kênh dữ liệu nhị


phâ n (gọ i là kênh I và kênh Q) tố c độ bằ ng 1/2 R b nhờ bộ chuyển đổ i Nố i
tiếp/song song. Kênh I và Q sau đó đượ c điều chế và o 2 só ng mang cù ng tầ n số
nhưng có pha lệch nhau π /2 (pha vuô ng gó c nhau), sau đó 2 kênh nà y đượ c
tổ ng hợ p thà nh 1 luồ ng dữ liệu QPSK để phá t đi vớ i tố c độ symbol Rs = 1/2Rb.
Hình 5.2: Sơ đồ nguyên lý giải điều chế QPSK

Hình 5.3: Các trạng thái điều chế của QPSK

Hình 5.4: Biểu đồ dạng sóng tín hiệu QPSK theo thời gian
5.4. XÂY DỰNG BÀI THÍ NGHIỆM
Bước 1: Tạo giao diện trên Guide của Matlab

Hình 5.5: Giao diện điều chế số

Bước 2: Lập trình mô phỏng điều chế QPSK


Lập trình cho phương pháp điều chế QPSK:
%--------------------------Điều chế QPSK-----------------------------------------------%

%-------------------------Dữ liệu đầu vào------------------------------------------------%


%-------------------------g=[1 1 0 0 0 1 10]---------------------------------------------%
%-------------------------f=2---------------------------------------------------------------%
function qpsk(g,f)
if nargin > 2
error('ban da dua nhieu tham so chi duoc dua 2 tham so dau vao');
elseif nargin==1
f=1;
end

if f<1;
error('tan so phai lon hon 1');
end

l=length(g);
r=l/2;
re=ceil(r);
val=re-r;
if val~=0;
error('so bit nhi phan nhap vao phai la chan');
end
t=0:2*pi/99:2*pi;
cp=[];sp=[];
mod=[];mod1=[];bit=[];
bit1=[];bit2=[];bit0=[];
for n=1:length(g)/2;
if g(2*n-1)==0;
se1=zeros(1,100);
else g(2*n-1)==1;
se1=ones(1,100);
end
bit1=[bit1 se1];

end
for n=1:length(g)/2;
if g(2*n)==0;
se2=zeros(1,100);
else g(2*n)==1;
se2=ones(1,100);
end
bit2=[bit2 se2];

end
%---------------------------------------Tách dữ liệu I & Q-----------------------------%
for n=1:2:length(g);
if g(n)==0 && g(n+1)==1;
die=sqrt(2)/2*ones(1,100);
die1=-sqrt(2)/2*ones(1,100);
se=[zeros(1,50) ones(1,50)];
elseif g(n)==0 && g(n+1)==0;
die=-sqrt(2)/2*ones(1,100);
die1=-sqrt(2)/2*ones(1,100);
se=[zeros(1,50) zeros(1,50)];
elseif g(n)==1 && g(n+1)==0;
die=-sqrt(2)/2*ones(1,100);
die1=sqrt(2)/2*ones(1,100);
se=[ones(1,50) zeros(1,50)];
elseif g(n)==1 && g(n+1)==1;
die=sqrt(2)/2*ones(1,100);
die1=sqrt(2)/2*ones(1,100);
se=[ones(1,50) ones(1,50)];
end
c=sin(f*t);
s=cos(f*t);
cp=[cp die]; %Amplitude cosino
sp=[sp die1]; %Amplitude sino
mod=[mod c]; %cosino carrier (Q)
mod1=[mod1 s]; %sino carrier (I)
bit=[bit se];
end
%--------------------------------Ghép tín hiệu I & Q -----------------------------------%
qpsk=cp.*mod+sp.*mod1;
%-------------------------------Vẽ các đường tin hiệu----------------------------------%
subplot(4,2,1);plot(bit,'LineWidth',1.5);grid on;
title('Tin hieu dua vao dieu che')
axis([0 50*length(g) -1.5 1.5]);
subplot(4,2,3);plot(bit1,'LineWidth',1.5);grid on;
title('Tin hieu I')
axis([0 50*length(g) -1.5 1.5]);
subplot(4,2,5);plot(bit2,'LineWidth',1.5);grid on;
title('Tin hieu Q')
axis([0 50*length(g) -1.5 1.5]);
subplot(4,2,7);plot(qpsk,'LineWidth',1.5);grid on;
title('Tin hieu dieu che qpsk');

- Lập trình chòm sao tín hiệu QPSK có nhiễu :


%------Trang thai tin hieu QPSK-----------------------------------------%
x= round(rand(1,10000));
for i=1:2:length(x)
if x(i)==0 & x(i+1)==0
S((i+1)/2)=exp(j*pi/4);
elseif x(i)==0 & x(i+1)==1
S((i+1)/2)=exp(j*3*pi/4);
elseif x(i)==1 & x(i+1)==1
S((i+1)/2)=exp(j*5*pi/4);
elseif x(i)==1 & x(i+1)==0
S((i+1)/2)=exp(j*7*pi/4);
end
end
subplot(233);
plot(S,'*');
hold on;
t=0:0.01:2*pi;
plot(exp(j*t),'r--');
xlabel('I');
ylabel('Q');
title('Trang thai tin hieu QPSK');
%%% QPSK voi nhieu da duong co can nhieu trang AWNG%%%%%%%%%
Es=var(S);
Eb=Es/2;
N_0=Eb/10^(SNR_db/10);
N=sqrt(N_0/2)*(randn(size(S))+j* randn(size(S)));
R=S+N;
subplot(236);
plot(R,'.');
hold on;
plot(S,'r*');
hold on;
t= 0:0.01:2*pi;
plot(exp(j*t),'r--');
legend('S_m','S');
xlabel('I');
ylabel('Q');
title('Trang thai QPSk khi co nhieu AWGN');
hold off;

Lập trình cho phương pháp điều chế 16-QAM

%---------------Du lieu dau vao----------------------------------------------------------%


numberOfBits = 1e5;
x = randint(1,numberOfBits);
x( x < 0.5 ) = 0;
x( x >= 0.5 ) = 1;
% --------------ban kinh chom sao----------------------------------------------------%
r1 = 1;
r2 = 2;

% --------------------------------Ma Gray---------------------------------------------%
mappingTable(1) = r1 * exp(1i* 0);
mappingTable(2) = r1 * exp(1i* pi/4);
mappingTable(3) = r1 * exp(1i* 3*pi/4);
mappingTable(4) = r1 * exp(1i* pi/2);
mappingTable(5) = r1 * exp(1i* 7*pi/4);
mappingTable(6) = r1 * exp(1i* 3*pi/2);
mappingTable(7) = r1 * exp(1i* pi);
mappingTable(8) = r1 * exp(1i* 5*pi/4);
mappingTable(9:16) = mappingTable(1:8) ./ r1 .* r2;

if mod(numberOfBits, 4) ~= 0
error('numberOfBits must be a multiple of 4.');
end
mappedSymbols = zeros(1, numberOfBits / 4);

% ---------------------sap xep ky tu---------------------------------------------------%

for i = 1:4:length(x)
symbolBits = x(i:i+3);
symbolIndex = 2^3 * symbolBits(1) + 2^2 * symbolBits(2) + 2^1 *
symbolBits(3) + 2^0 * symbolBits(4);
% Mapping
mappedSymbols((i - 1)/4 + 1) = mappingTable( symbolIndex + 1);
end

% ------Nhieu trang GWNG---------------------------------------------------%


%snr = 20; % signal-to-noise ratio in dB
meanSignalPower = (r1^2 + r2^2)/2;
snr_lin = 10^(SNR_db/10); % linear scale
meanNoisePower = meanSignalPower ./ snr_lin;
receivedSignal = mappedSymbols + randn(1, length(mappedSymbols)) *
sqrt(meanNoisePower/2) +... 1i * randn(1, length(mappedSymbols)) *
sqrt(meanNoisePower/2);
%------------------------------Ben nhan----------------------------------------%
receivedBits = zeros(1, numberOfBits / 4);
for i = 1:length(receivedSignal)
[mindiff minIndex] = min(receivedSignal(i) - mappingTable);
symbolIndex = minIndex - 1;
bitString = dec2bin(symbolIndex, 4);
receivedBits((i-1)*4 + 1) = str2double(bitString(1));
receivedBits((i-1)*4 + 2) = str2double(bitString(2));
receivedBits((i-1)*4 + 3) = str2double(bitString(3));
receivedBits((i-1)*4 + 4) = str2double(bitString(4));
end

%numberOfBitErrors = nnz( x - receivedBits );


%ber = numberOfBitErrors / numberOfBits; % bit error rate
%set(handles.hienthi,'string','SNR:',num2str(SNR_db),' dB');
%set(handles.hienthi,'string','Bit error rate (BER):', num2str(ber));
%-------------------------------Hien thi----------------------------------------------%
figure;
plot( real(receivedSignal), imag(receivedSignal), '.'); hold on;
absLim = max( max(real(receivedSignal)), max(imag(receivedSignal)));
xyLimits = [-absLim*1.1 absLim*1.1];
xlim( xyLimits );
ylim( xyLimits );
plot( real(mappedSymbols), imag(mappedSymbols), '.r'); hold off;
xlim( xyLimits );
ylim( xyLimits );
xlabel('real part');
ylabel('imaginary part');
legend('received', 'transmitted');
Bước 3: Đánh giá kết quả
- Kết quả mô phỏng QPSK tín hiệu vào [1 1 0 0 0 1 1 0]:

Hình 5.6 a

Hình 5.6 b
Hình 5.6: Kết quả mô phỏng điều chế QPSK:
SNR = 25 dB
SNR = 0,5
5.5. BÀI TẬP
Mô phỏ ng bộ điều ASK, FSK, PSK và 64 - QAM
5.6. BÁO CÁO TỔNG KẾT

You might also like