Hàm Px đều biểu thị cho hàm số mũ lũy thừa có cơ số e 1.2 Ý nghĩa và ứng dụng của hàm phân phối xác suất Gauss trong thông tin số Hàm phân phối xác suất Gauss trong thông tin số cho biế
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - VIỄN THÔNG
BÁO CÁO THÍ NGHIỆM THÔNG TIN SỐ ( ET3250)
Họ và tên : Đậu Công Dụng
Mssv : 20172504
Mã lớp TN : 713389
Nhóm TN : T02
Hà Nội, 2022
Trang 2BUỔI 1 THÍ NGHIỆM :
Bài 1.1
Mã nguồn matlab:
x=-5:0.1:5; %Tạo vector x
Px=(1/sqrt(2*pi))*exp(-power(x,2)/2); %P(x) ứng với giá trị của x
plot(x,Px); %Vẽ đồ thị
xlabel('x'); % Dán nhãn x
ylabel('P(x)'); %Dán nhãn y
Kết quả mô phỏng
Trả lời câu hỏi :
1.1 Mô tả hình dạng đồ thị của hàm P(x) trên :
Trang 3Đồ thị có dạng hình chuông Hàm P(x) đều biểu thị cho hàm số mũ lũy thừa có cơ số e 1.2 Ý nghĩa và ứng dụng của hàm phân phối xác suất Gauss trong thông tin số
Hàm phân phối xác suất Gauss trong thông tin số cho biết mật độ phân bố tập trung của thông tin trong 1 thời gian xác định
1.3 Nếu thay đổi kỳ vọng u và phương sai thì P(x) thay đổi
Nếu tăng kỳ vọng và phương sai thì đồ thị có xu hướng thoải ra và lệch sang bên phải
Đó là do đăc trưng của hàm lũy thừa
Bài 1.2:
Mã nguồn Matlab:
leng=100000; % Độ dài của quá trình ngẫu nhiên
x=randn(1,leng); %Tạo quá trình ngẫu nhiên theo pp chuẩn
step=0.1; %step = 0.1;
k=-5:step:5; %vector k
px=hist(x,k)/leng/step; % Phân bố xác suất vào các khoảng vector k
stem(k,px); % Vẽ lên đồ thị
hold on;
Px_theo=(1/sqrt(2*pi))*exp(-power(k,2)/2);
plot(k,Px_theo);
title('Phan bo xac suat Gauss'); % Tiêu đề
xlabel('x'); % Dán nhãn x
ylabel('P(x)'); % Dán nhãn y
legend('Analysis','Simulation'); % Chú thích
hold off;
Trang 4 Kết quả mô phỏng
Trả lời câu hỏi :
1 Kết quả hai hàm mô phỏng và lý thuyết khá tương đồng với nhau
2 Thay đổi quá trình ngẫu nhiên lên 10000000 phần tử Kết quả mới chính xác hơn
so với kết quả cũ , thay đổi độ dài của quá trình ngẫu nhiên thì càng chính xác
3 Câu lệnh : px= hist(x,k) /len/step thì phải chia cho len để tạo net liền và phải chia cho step để tăng độ dài mỗi phần tử
Bài 2.1 Hàm lquan
function [id qy]= lquan(x,xmin,xmax,nbit)
nlevel = 2^nbit;
q = (xmax-xmin)/nlevel;
[id qy] = quantiz(x,xmin+q:q:xmax-q,xmin+q/2:q:xmax-q/2);
Trang 5Chạy chương trình:
xs = rand(1,5)*2-1;
[xi xq] = lquan(xs,-1,1,3)
Trả lời câu hỏi
xs = [0.6180 0.0006 0.9721 0.2069 -0.3657]
xi = [ 6 4 7 4 2]
xq = [0.6250 0.1250 0.8750 0.1250 -0.3750 ]
Bài 2.2.
Mã nguồn Matlab:
t=0:0.01:20; %Thời gian
xt=sin(randn()+t).*cos(rand()*t); %Tín hiệu x(t)
[inx xqt]=lquan(xt,-1,1,randi(3)+1); %Lượng tử hóa
plot(t,xt); %Vẽ đồ thị x(t)
hold on;
plot(t,xqt); %Vẽ đồ thị lượng tử
xlabel('time'); %Dán nhãn x
ylabel('signal'); %Dán nhãn y
Trang 6 Kết quả mô phỏng:
Trả lời câu hỏi :
1 Số bit dung để lượng tử cho 1 mẫu tín hiệu : n=3 ( 8 mức lượng tử hóa )
2 Bước lượng tử q: q=0.25
3 Mức biên độ của tất cả các mức lượng tử : 0.875, 0.625, 0.375, 0.125, 0.125, -0.375, -0.625, -0.875
Bài 3
N = 1000;
x_uni = 2*rand(1,N)-1;
x_sin = sin(linspace(1,5,N));
nbit = 1:10;
SNqR_uni = zeros(size(nbit));
SNqR_sin = zeros(size(nbit));
SNqR_lt = 6.02*nbit;
Ps_uni = sum(x_uni.^2)/N
Trang 7Ps_sin = sum(x_sin.^2)/N;
for i = 1:size(nbit,2)
[indx_uni xq_uni] = lquan(x_uni,-1,1,nbit(i));
[indx_sin xq_sin] = lquan(x_sin,-1,1,nbit(i
eq_uni = x_uni - xq_uni;
eq_sin = x_sin - xq_sin;
Pq_uni = sum(eq_uni.^2)/N;
Pq_sin = sum(eq_sin.^2)/N;
SNqR_uni(i) = 10*log10(Ps_uni/Pq_uni);
SNqR_sin(i) = 10*log10(Ps_sin/Pq_sin);
end
plot(nbit,SNqR_uni,'b-');
hold on;
plot(nbit,SNqR_sin,'r ');
plot(nbit,SNqR_lt,'m-.');
title('Do thi SN_qR theo nbit');
xlabel('nbit');
ylabel('SN_qR');
legend('Phan bo deu','Hinh sin','Ly thuyet');
grid on;
hold off;
Kết quả:
Trang 8SNqR_lt= [6.0200 12.0400 18.0600 24.0800 30.1000 36.1200 42.1400 48.1600 54.1800 60.2000]
SNqR_uni= [6.1217 12.0590 18.0125 23.9371 29.9149 36.2382 42.0380 48.2333 54.1255 59.9320]
SNqR_sin= [6.4171 12.8834 19.3981 25.6702 32.0389 38.1620 44.3266 50.4033 56.4544 62.5722]
Trả lời câu hỏi :
1 Khi n tăng lên 1 thì SNqR sẽ tăng lên 2 lần
2 SNqR chỉ phụ thuộc vào n , mà không phụ thuộc vào kích thước lượng tử và dải biên độ lượng tử bởi vì : SNqR= 32(2n)2
( n là độ dài từ mã )
3 Khi thay đổi tín hiệu x là tín hiệu điều hòa thì giá trị SNqR thay đổi so với khi x phân bố đều
BUỔI 2 THÍ NGHIỆM
Bài số 4: Mật Độ Phổ Năng Lượng Và Hàm Tự Tương Quan Của Tín Hiệu
4.1 Đồ thị tín hiệu hàm tương quan
- Code :
Trang 9L=500;
x=randn(1,L);
x1=linspace(-1,1,L);
x2=sin(linspace(-10,10,L));
[acorr_x nx]=xcorr(x);
[acorr_x1 nx1]=xcorr(x1);
[acorr_x2 nx2]=xcorr(x2);
figure; plot(nx,acorr_x); xlabel('n'); ylabel('R_{xx}');
figure; plot(nx1,acorr_x1); xlabel('n'); ylabel('R_{xx}');
figure; plot(nx2,acorr_x2); xlabel('n'); ylabel('R_{xx}');
- Kết quả mô phỏng
- Trả lời câu hỏi :
1 Đồ thị của hàm tự tương quan trong trường hợp tổng quát luôn thì biên độ luôn tăng dần và đạt cực đại tại 0
2 Giá trị cực đại của hàm tự tương quan nằm ở khoảng bên phải đồ thị
3 Hàm tương quan của các trường hợp tín hiệu khác nhau như yêu cầu của bài thí nghiệm thì nó hầu hết là khác hẳn nhau vì đầu vào khác nhau
Trang 104.2 Biến đổi Fourier của hàm tự tương quan
Code
L=50; x=rand(1,L); % 50 mẫu ngẫu nhiên từ 0 đến 1
N=200; % Số lượnng tần số rời rạc
w=linspace(0,2*pi,N); % w từ 0 - 2*pi
fx=freqz(x,1,w); %Biến đổi fourier của vector x
esd_x=fx.*conj(fx); %esd_x là bình phương biên độ của fx
acorr_x=xcorr(x); %Tự tương quan x
ft_acorr_x=freqz(acorr_x,1,w); %Phổ hàm từ tương quan chưa chính xác ft_acorr_x=freqz(acorr_x,1,w).*exp(j*w*(N-1)); % Phổ hàm tự tương quan subplot(2,1,1); semilogy(w/pi,esd_x);
xlabel('\omega (\pix)'); ylabel('S(e^{j\omega)}');
subplot(2,1,2); semilogy(w/pi,real(ft_acorr_x),'r');
xlabel('\omega (\pix)'); ylabel('FT[r_{xx}(n)]');
Kết quả mô phỏng
Trả lời câu hỏi :
1 Phổ biên độ rời rạc của tín hiệu có đặc điểm là biến đổi liên tục trên miền tần số
2 Đồ thị phổ tín hiệu của esd_x và ft_acorr_x :
Trang 11- Với esd_x thì đồ thị phổ biên độ là biên độ đều
- Với ft-acorr_x đồ thị có biên độ tăng dần
3 Khi vẽ đồ thị thì cách 1 trục hoành là w/pi và cách 2 trục hoành là 2k/N để tránh chổng phổ
4 Chọn N >200 để kết quả chính xác
5 Ý nghĩa và ứng dụng của định lý Weiner-Khintchine trong thông tin số là : Phổ tần số của hàm tự tương quan chính là hàm mật độ phổ năng lượng của tín hiệu số
Bài số 5 : Mã đường dây NRZ
- Code :
len=100000;
SNR_db=0:2:8;
SNR= 10.^(SNR_db/10);
bsignal=randi(2,1,len)-1;
NRZ_signal=bsignal*2-1;
N0=1./SNR;
BER=zeros(1,length(SNR_db));
for i=1:length(SNR_db)
noise=sqrt(N0(i))*randn(1,len);
r_signal=NRZ_signal+noise;
NRZ_decoded=sign(r_signal);
BE_sum=sum(NRZ_signal~=NRZ_decoded);
BER(i)=BE_sum/len;
end
Pe=(1/2)*(1-erf(sqrt(SNR/2)));
plot(SNR,Pe); hold on;
plot(SNR,BER,'o');
xlabel('SNR'); ylabel('BER');
Trang 12- Trả lời câu hỏi
1 Phải sử dụng các mã đường dây vì :
- Chuyển đổi tín hiệu băng gốc khi miền tần số cao hơn để vào băng thông đường dây , tăng mật độ chuyển đổi tích cực của tín hiệu
- Giúp kiểm soát lỗi
2 Khi tỷ sô SNR tăng thì xác suất lỗi giảm do tỉ lệ nghịch với nhau Kết quả trên đồ thị phù hợp với lý thuyết
3 Nếu giải mã tín hiệu NRZ bằng lệnh “ NRZ_decoded = sign(r_signal)” như hướng dẫn ở trên sẽ có một số trường hợp không chính xác , đó là trường hợp không mang dấu bởi vì có hai loại tín hiệu NRZ đơn cực và lưỡng cực
Trang 13Kết quả :
Nhận xét : Kết qủa thay đổi nhiều khi SNR tăng dần
BUỔI 3 THÍ NGHIỆM
BÀI 6: KỸ THUẬT ĐIỀU CHẾ SỐ QPSK
Chạy chương trình:
len = 50000; % Do dai dong bit mo phong
SNR_db = 0; % SNR co don vi Decibel
SNR = 10^(SNR_db/10); % Doi SNR tu Decibel sang lan
bsignal = randi([0 1],1,len); % Tao dong bit ngau nhien do dai len
% Thuc hien dieu che QPSK
for i=1:2:len
if bsignal(i)==0 & bsignal(i+1)==0 % 00
qpsk_signal((i+1)/2) = exp(j*3*pi/4);
elseif bsignal(i)==0 & bsignal(i+1)==1 % 01
qpsk_signal((i+1)/2) = exp(j*5*pi/4);
elseif bsignal(i)==1 & bsignal(i+1)==1 % 11
qpsk_signal((i+1)/2) = exp(j*7*pi/4);
elseif bsignal(i)==1 & bsignal(i+1)==0 % 10
qpsk_signal((i+1)/2) = exp(j*pi/4);
end
end
Es = std(qpsk_signal)^2; % Nang luong ky hieu
N0 = Es/SNR; % Cong suat tap am
% Tao nhieu Gauss
noise = sqrt(N0/2)*(randn(1,length(qpsk_signal))
+j*randn(1,length(qpsk_signal)));
qpsk_awgn = qpsk_signal + noise; % Cho tin hieu dieu che di qua kenh AWGN plot(qpsk_awgn,'.'); % Ve bieu do chom sao tin hieu co nhieu title('Do thi chom sao 4-QPSK');
xlabel('I');
ylabel('Q');
hold on;
plot(qpsk_signal,'r*'); % Ve bieu do chom sao tin hieu khong nhieu
Trang 14Kết quả:
SNR = 0 dB
Với SNR = 3 dB
Với SNR = 6 dB
Trang 15Trả lời câu hỏi :
33 Điều chế tín hiệu để mang thông tin đi xa hơn Phải điều chế số bởi vì tín hiệu đã mã hóa sẽ bảo mật tốt hơn
Khối điều chế đóng vai trò trung gian quan trọng trong quá trình xử lý tín hiệu để truyền
đi
34 Kết quả mô phỏng : tín hiệu thu được có dạng vùng mây bao quanh các điểm của chòm sao
35 Trong điều chế PSK , phía thu sẽ giải mã sai khi mức điều chế khác với bên phát
36 Năng lượng tín hiệu Es và năng lượng bit Eb trong các trường hợp trên là : Es=3db, Eb=1.5dB
BÀI 7: XÁC SUẤT LỖI BIT TRONG ĐIỀU CHẾ QPSK
Chạy chương trình:
len = 50000; % Do dai dong bit mo phong
SNR_db = 0:2:8; % Tao vector SNR_db = 0 2 4 6 8
SNR = 10.^(SNR_db/10); % Doi SNR tu Decibel sang lan
bsignal = randi([0 1],1,len); % Tao dong bit ngau nhien do dai len
Trang 16if bsignal(i)==0 & bsignal(i+1)==0 % 00
qpsk_signal((i+1)/2) = exp(j*3*pi/4);
elseif bsignal(i)==0 & bsignal(i+1)==1 % 01
qpsk_signal((i+1)/2) = exp(j*5*pi/4);
elseif bsignal(i)==1 & bsignal(i+1)==1 % 11
qpsk_signal((i+1)/2) = exp(j*7*pi/4);
elseif bsignal(i)==1 & bsignal(i+1)==0 % 10
qpsk_signal((i+1)/2) = exp(j*pi/4);
end
end
% Tim BER mo phong
for i=1:length(SNR_db)
r_signal = awgn(qpsk_signal,SNR_db(i)); % Dieu che QPSK di qua nhieu AWGN for j=1:2:len % Giai dieu che tin hieu QPSK co nhieu
if real(r_signal((j+1)/2))>=0
if imag(r_signal((j+1)/2))>=0 % Goc phan tu I
r_bsignal(j) = 1;
r_bsignal(j+1) = 0;
else % Goc phan tu IV
r_bsignal(j) = 1;
r_bsignal(j+1) = 1;
end
else
if imag(r_signal((j+1)/2))>=0 % Goc phan tu II
r_bsignal(j) = 0;
r_bsignal(j+1) = 0;
else % Goc phan tu III
r_bsignal(j) = 0;
r_bsignal(j+1) = 1;
end
end
end
[n,BER(i)] = biterr(r_bsignal,bsignal);
end
Pb = 1/2*erfc(1/sqrt(2).*sqrt(SNR)); % Xac suat loi bit
plot(SNR_db,Pb,'ro '); % Ve do thi Pb ly thuyet
title('Do thi ty le bit loi ly thuyet va mo phong');
xlabel('SNR_d_B');
ylabel('BER');
hold on;
plot(SNR_db,BER); % Ve do thi BER mo phong
legend('Ly thuyet','Mo phong');
hold off;
Kết quả:
Trang 17SNR 0dB 2dB 4dB 6dB 8dB
Pb lý thuyết 0.1587 0.1040 0.0565 0.0230 0.0060
BER mô phỏng 0.1606 0.1043 0.0551 0.0221 0.0062
Trả lời câu hỏi :
37 So sánh điều chế BPSK và QPSK
- Về xác suất lỗi bit : Xác suất lỗi bit trong BPSK và QPSK là như nhau , về tương quan thì QPSK có tỷ lệ thấp hơn
- QPSK thì giảm được BER , tăng hiệu suất phổ , tốc độ truyền dữ liệu hơn BPSK
38 Một số hệ thống thực tế sử dụng điều chế QPSK : ứng dụng vào truyền hình số
Trang 18BÀI 8: MÔ PHỎNG ĐIỀU CHẾ M-QAM QUA KÊNH NHIỄU GAUSS
Chạy chương trình:
n_sym = 50000; % So ky tu dieu che
M = [16 32 64]; % So symbol ky hieu
SNR_db = 0:25; % Tao vector SNR = 0 - 25 Decibel
BER = zeros(length(M),length(SNR_db)); % BER de luu ti le loi bit
for k = 1:size(M,2) % size(M,2) la so cot cua M
s_stream = randi([0 M(k)-1],1,n_sym); % Tao dong bieu tuong do dai n_sym
s_mod = qammod(s_stream,M(k),0,'GRAY'); % Dieu che M-QAM
for r = 1:size(SNR_db,2) % Vong lap tinh BER
s_mod_awgn = awgn(s_mod,SNR_db(r),'measured'); % Tin hieu qua nhieu s_demod = qamdemod(s_mod_awgn,M(k),0,'GRAY'); % Giai dieu che M-QAM [num ratio] = biterr(s_stream,s_demod); % Tinh ti le loi bit
BER(k,r) = ratio; % Luu ti le loi bit vao BER
end
end
semilogy(SNR_db,BER(1,:),'bo-'); % Ve do thi BER ung voi M = 16
hold on;
semilogy(SNR_db,BER(2,:),'rs-'); % Ve do thi BER ung voi M = 32
semilogy(SNR_db,BER(3,:),'m*-'); % Ve do thi BER ung voi M = 64
grid on;
title('Do thi the hien ty le loi bit M-QAM');
xlabel('SNR_d_B');
ylabel('BER');
legend('16-QAM','32-QAM','64-QAM');
hold off;
Kết quả:
Trang 19SNR 0dB 5dB 10dB 15dB 20dB 25dB
Trả lời câu hỏi :
39 Khi số mức điều chế M tăng thì BER thay đổi là nó sẽ càng giảm dần Nhưng, nếu tăng lên quá lớn thì sẽ mất khả năng khôi phục tín hiệu
40 Số mức điều chế tăng lên cao thì làm mất khả năng khôi phục tín hiệu nên không thể tăng lên quá lớn