1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Mã nguồn và kết quả mô phỏng thí nghiệm Thông tin số Viện điện tử Viễn Thông ĐHBKHN

20 442 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 0,97 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Mã nguồn và kết quả mô phỏng thí nghiệm Thông tin số (ET 3250) Bài 1.1: Quá trình ngẫu nhiên của tín hiệu x = 5:0.1:5; %Khoi tao mang x co gia tri tu 5 den 5 step = 0.1 Px = (1sqrt(2pi))exp(x.22); %Gia tri cua P(x) plot(x,Px); title(Ham phan bo xac suat Gauss);%Dat ten do thi xlabel(x); %Tieu de truc x ylabel(P(x)); %Tieu de truc y Bài 1.2: Tạo một quá trình ngẫu nhiên với phân phối chuẩn với độ dài 100000 phần tử. Bài 2.1: Lượng tử hóa tuyến tính Bài 2.2: Cho tín hiệu vào x(t) (lưu vào các biến xt) ngẫu nhiên có biên độ 1 đến 1 và xét trong khoảng 0 ≤t≤20 , và tín hiệu lượng tử xq(t) được tạo ra từ hàm lquan. Bài 3: Tạp âm lượng tử trong kĩ thuật lượng tử hóa tuyến tính Bài 4.1: Mật độ phổ năng lượng và hàm tương quan của tín hiệu Bài 4.2: Biến đổi Fourier của hàm tương quan chính là mật độ phổ năng lượng của tín hiệu. Bài 5.1: Mã đường dây NRZ Bài 5.2: So sánh tỉ lệ bit lỗi BER thu được Bài 6.1: Kĩ thuật điều chế số QPSK

Trang 1

Mã nguồn và kết quả mô phỏng thí nghiệm Thông tin số (ET 3250)

Bài 1.1: Quá trình ngẫu nhiên của tín hiệu

x = -5:0.1:5; %Khoi tao mang x co gia tri tu -5 den 5 step = 0.1

Px = (1/sqrt(2*pi))*exp(-x.^2/2); %Gia tri cua P(x)

plot(x,Px);

title('Ham phan bo xac suat Gauss');%Dat ten do thi

xlabel('x'); %Tieu de truc x

ylabel('P(x)'); %Tieu de truc y

Trang 2

Bài 1.2: Tạo một quá trình ngẫu nhiên với phân phối chuẩn với

độ dài 100000 phần tử.

len = 1000000; %Do daicua qua trinh ngau nhien

x = randn(1,len); %Tao qua trinh ngau nhien theo phan phoi chuan

step = 1;

k = -5:step:5; %Khoang cach deu 0.1 tu -5 den 5

px= hist(x,k)/len/step; %Tinh so vecto trong khoang tu -5 den 5

stem(k,px); %Do thi roi rac

Px_lythuyet = exp(-k.^2/2)/sqrt(2*pi);

hold on ; %Giu lai do thi P(x) vave them do thi roi rac vao

plot(k,Px_lythuyet, '-r' ); %Hien thi dang do thi

title( 'Phan bo xac suat Gauss' ); %Ten do thi

xlabel( 'x' ); %Ten truc hoanh

ylabel( 'P(x)' ); %Ten truc tung

legend( 'Ly thuyet' , 'Mo phong' ); %Ky hieu do thi

hold off ;

Trang 3

Bài 2.1: Lượng tử hóa tuyến tính

function [indx qy] = lquan(x,xmin,xmax,nbit)

nlevel = 2^nbit; %Buoc luong tu

q = (xmax - xmin)/nlevel; %So muc luong tu

[indx qy] = quantiz(x,xmin+q:q:xmax-q,xmin+q/2:q:xmax-q/2);

Bài 2.2: Cho tín hiệu vào x(t) (lưu vào các biến xt) ngẫu nhiên

có biên độ -1 đến 1 và xét trong khoảng 0 t20 , và tín hiệu lượng tử xq(t) được tạo ra từ hàm lquan.

t = 0:.01:20;

xt = sin(randn()+t).*cos(rand()*t); %Tin hieu vao

[inx xqt] = lquan(xt,-1,1,randi(3)+1); %Luong tu hoa tin hieu vao xqt la tin hieu da duoc luong tu hoa

plot(t,xt,'b',t,xqt,'r'); %Ve dang tin hieu dau vao xt va dang tin hieu da qua luong tu hoa xqt

title('Do thi tin hieu vao va tin hieu sau khi luong tu hoa');

xlabel('t');%Tieu de cho truc hoanh

Trang 4

ylabel('xt&xqt');%Tieu de cho truc tung

legend('xt','xqt');%Giai thich tung duong tren do thi

grid on;%Bat luoi

Trang 5

Bài 3: Tạp âm lượng tử trong kĩ thuật lượng tử hóa tuyến tính

N = 1000;

x_uni = 2*rand(1,N) - 1; %x phan bo deu tu -1 den 1

x_sin = sin(linspace(1,5,N)); %Tin hieu sin

nbit = 1:10; %So bit tu 1 den 10

SNqR_uni = zeros(size(nbit)); %Khoi tao mang chua gia tri ket qua SNqR_uni

SNqR_sin = zeros(size(nbit)); %Khoi tao mang chua gia tri ket qua SNqR_sin

SNqR_lt = 6.02*nbit; %Tinh SNqR ly thuyet

%Ps = sum(x.^2)/N; %Cong suat tin hieu x

for i=1:size(nbit,2) %size(n,2) tra ve so cot cua n

[indx_sin xq_sin] = lquan(x_sin,-1,1,nbit(i)); %Luong tu hoa tin hieu x_sin ket qua luong tu hoa luu vao bien xq_sin

[indx_uni xq_uni] = lquan(x_uni,-1,1,nbit(i)); %Luong tu hoa tin hieu x_uni ket qua luong tu hoa luu vao bien xq_uni

eq_uni = x_uni - xq_uni; %Tinh sai so luong tu hoa

eq_sin = x_sin - xq_sin;

Pq_uni = sum(eq_uni.^2)/N; %Tinh cong suat tap luong tu

Pq_sin = sum(eq_sin.^2)/N;

Ps_uni = sum(x_uni.^2)/N; %Tinh cong suat tap am tin hieu

Ps_sin = sum(x_sin.^2)/N;

SNqR_uni(i) = 10.*log10(Ps_uni./Pq_uni); %Tinh ty so SNqR doi ra decibel

SNqR_sin(i) = 10.*log10(Ps_sin./Pq_sin);

end

plot(nbit,SNqR_uni,'*r',nbit,SNqR_sin,' *k',nbit,SNqR_lt);

title('LUONG TU HOA TUYEN TINH'); %Tieu de cho do thi

legend('SNqR_uni','SNqR_sin','SNqR_lt'); %Chu thich moi duong

xlabel('nbit'); %Tieu de cho truc x

ylabel('SNqR'); %Tieu de cho truc y

grid on;

Trang 6

Bài 4.1: Mật độ phổ năng lượng và hàm tương quan của tín hiệu

L = 500; %So luon gmau tin hieu

x = randn(1,L);

acorr_x = xcorr(x); %Ham tu tuong quan

n = -(L-1):1:L-1;

plot(n,acorr_x);

title('Ham tu tuong quan');

xlabel('pi');

ylabel('acorr(x)');

hold on;

%bien do tang dan

x = linspace(-1,1,L);

acorr_x = xcorr(x);

n = -(L-1):1:L-1;

plot(n,acorr_x,'-r');

hold on;

%Tin hieu sin

x = sin(linspace(-10,10,L));

acorr_x = xcorr(x);

Trang 7

n = -(L-1):1:L-1;

plot(n,acorr_x,'g.');

hold on;

Bài 4.2: Biến đổi Fourier của hàm tương quan chính là mật độ phổ năng lượng của tín hiệu.

L = 50; %Khoi tao gia tri mau

N = 200; %Khoi tao gia tri tan so roi rac

w = linspace(0,2*pi,N);

x = randn(1,L);

acorr_x = xcorr(x); %Ham tu tuong quan cua tin hieu x

fx = freqz(x,1,w); %Bien doi Fourier cua tin hieu x tai cac tan so roi rac

esd_x = fx.*conj(fx); %Tinh mat do pho nang luong x

ft_acorr_x = freqz(acorr_x,1,w).*exp(j*w*(L-1)); %Bien doi FT cua ham tu tuong quan cua tin hieu x

subplot(2,1,1); %Chia khoang ve do thi ra lam 2

semilogy(w/pi,esd_x);

title('Mat do pho nang luong');

Trang 8

ylabel('S(ejw)');

legend('S(ejw)')

subplot(2,1,2);

semilogy(w/pi,real(ft_acorr_x),'r');

xlabel('pi');

ylabel('Rxx(ejw)');

legend('Rxx(ejw)');

hold on;

Bài 5.1: Mã đường dây NRZ

len = 100000; %Do dai dong bit mo phong

SNR_db = 0:2:8; %Tao vectoSNR_db = 0 2 4 6 8

SNR = 10.^(SNR_db/10); %Doi SNR tu decibel sang lan

bsignal = randint(1,len); %Dong bit ngau nhien co do dai len

NRZ_signal = bsignal*2 -1;

N0 = 1./SNR;

for i = 1:length(SNR_db)

noise = sqrt(N0(i))*randn(1,len);

Trang 9

r_signal = NRZ_signal + noise;

NRZ_decoder=sign(r_signal);

[Num,Rat]=symerr(NRZ_decoder,NRZ_signal);

BER(i) = Rat;

end

plot(SNR_db,BER,'ko ');

title('Ty le bit loi');

xlabel('SNR_db');

ylabel('BER');

Bài 5.2: So sánh tỉ lệ bit lỗi BER thu được

len = 100000; %Do dai dong bit mo phong

SNR_db = 0:2:8; %Tao vecto SNR_db = 0 2 4 6 8

SNR = 10.^(SNR_db/10); %Doi SNR tu decibel sang lan

bsignal = randint(1,len); %Dong bit ngau nhien co do dai len

NRZ_signal = bsignal*2 -1;

N0 = 1./SNR;

for i = 1:length(SNR_db)

Trang 10

noise = sqrt(N0(i))*randn(1,len);

r_signal = NRZ_signal + noise;

NRZ_decoder=sign(r_signal);

[Num,Rat]=symerr(NRZ_decoder,NRZ_signal); BER(i) = Rat;

end

plot(SNR_db,BER,'o');

title('Ty le bit loi');

xlabel('SNR_db');

ylabel('BER');

hold on;

SNR = 0:2:8;

Pe = 1./2.*(1-erf(sqrt(10.^(SNR/10))./sqrt(2))); plot(SNR,Pe,'r');

legend('Mo phong','Ly thuyet');

Trang 11

Bài 6.1: Kĩ thuật điều chế số QPSK

len = 50000;

bit = randint(1,len); %Tin hieu vao

for i=1:2:len; %Tao vong lap, step 2

switch bit(i)

case 0

if bit(i+1)==0

qpsk_signal((i+1)/2) = exp(j*3*pi/4);

else

qpsk_signal((i+1)/2) = exp(j*5*pi/4);

end

case 1

if bit(i+1)==0;

qpsk_signal((i+1)/2) = exp(j*pi/4);

else

qpsk_signal((i+1)/2) = exp(j*7*pi/4);

end

end

end

plot(qpsk_signal,'o');

hold on;

t = 0:0.01:2*pi;

plot(exp(j*t),'r '); %Ve duong tron don vi

title('Bieu do chom sao cua tin hieu dieu che QPSK'); xlabel('I');

ylabel('Q');

hold off;

Trang 12

len = 50000;

bit = randint(1,len); %Tin hieu vao

for i=1:2:len; %Tao vong lap, step 2

switch bit(i)

case 0

if bit(i+1)==0

qpsk_signal((i+1)/2) = exp(j*3*pi/4); else

qpsk_signal((i+1)/2) = exp(j*5*pi/4); end

case 1

if bit(i+1)==0;

qpsk_signal((i+1)/2) = exp(j*pi/4);

else

qpsk_signal((i+1)/2) = exp(j*7*pi/4); end

end

end

plot(qpsk_signal,'o');

hold on;

Trang 13

t = 0:0.01:2*pi;

plot(exp(j*t),'r '); %Ve duong tron don vi

title('Bieu do chom sao cua tin hieu dieu che QPSK');

xlabel('I');

ylabel('Q');

hold on;

Es = std(qpsk_signal).^2; %Tinh nang luong

N0 = Es/(10^(6/10)); %Cong suat tap am cua nhieu voi SNR = 6dB;;

noise = sqrt(N0/2).*(randn(1,length(qpsk_signal)) +

j.*randn(1,length(qpsk_signal)));

qpsk_awgn = qpsk_signal + noise; %Tin hieu khi co nhieu

subplot(3,1,1);

plot(qpsk_awgn,'o');

title('SNR=6dB');

grid on;

axis auto;

xlabel('I');

ylabel('Q');

%3dB

len = 50000;

bit = randint(1,len); %Tin hieu vao

for i=1:2:len; %Tao vong lap, step 2

switch bit(i)

case 0

if bit(i+1)==0

Trang 14

qpsk_signal((i+1)/2) = exp(j*3*pi/4);

else

qpsk_signal((i+1)/2) = exp(j*5*pi/4);

end

case 1

if bit(i+1)==0;

qpsk_signal((i+1)/2) = exp(j*pi/4);

else

qpsk_signal((i+1)/2) = exp(j*7*pi/4);

end

end

end

plot(qpsk_signal,'o');

hold on;

t = 0:0.01:2*pi;

plot(exp(j*t),'r '); %Ve duong tron don vi

title('Bieu do chom sao cua tin hieu dieu che QPSK');

xlabel('I');

ylabel('Q');

hold on;

Es = std(qpsk_signal).^2; %Tinh nang luong

N0 = Es/(10^(3/10)); %Cong suat tap am cua nhieu voi SNR = 3dB;;

noise = sqrt(N0/2).*(randn(1,length(qpsk_signal)) +

j.*randn(1,length(qpsk_signal)));

qpsk_awgn = qpsk_signal + noise; %Tin hieu khi co nhieu

plot(qpsk_awgn,'o');

title('SNR=3dB');

grid on;

axis auto;

xlabel('I');

ylabel('Q');

Trang 15

len = 50000;

bit = randint(1,len); %Tin hieu vao

for i=1:2:len; %Tao vong lap, step 2

switch bit(i)

case 0

if bit(i+1)==0

qpsk_signal((i+1)/2) = exp(j*3*pi/4); else

qpsk_signal((i+1)/2) = exp(j*5*pi/4); end

case 1

if bit(i+1)==0;

qpsk_signal((i+1)/2) = exp(j*pi/4);

else

qpsk_signal((i+1)/2) = exp(j*7*pi/4); end

end

end

Trang 16

hold on;

t = 0:0.01:2*pi;

plot(exp(j*t),'r '); %Ve duong tron don vi

title('Bieu do chom sao cua tin hieu dieu che QPSK');

xlabel('I');

ylabel('Q');

hold on;

Es = std(qpsk_signal).^2; %Tinh nang luong

N0 = Es/(10^(0/10)); %Cong suat tap am cua nhieu voi SNR = 0dB;;

noise = sqrt(N0/2).*(randn(1,length(qpsk_signal)) +

j.*randn(1,length(qpsk_signal)));

qpsk_awgn = qpsk_signal + noise; %Tin hieu khi co nhieu

plot(qpsk_awgn,'o');

title('SNR=0dB');

grid on;

axis auto;

xlabel('I');

ylabel('Q');

Trang 17

Bài 7: Xác suất lỗi bit trong điều chế QPSK

len = 50000; %Do dai dong bit mo phong

SNR_db = 0:2:8; %Tao vecto SNR_db= [0 2 4 6 8]

SNR = 10.^(SNR_db/10); %Doi SNR tu decibel sang lan

bsignal = randint(1,len); %Tao dong bit ngau nhien co do dai len

for t=1:2:len %Dieu che QPSK

switchbsignal(t)

case 0

ifbsignal(t+1) == 0

qpsk_signal((t+1)/2) = exp(j*3*pi/4);

else

qpsk_signal((t+1)/2) = exp(j*5*pi/4);

Trang 18

case 1

ifbsignal(t+1) == 0

qpsk_signal((t+1)/2) = exp(j*pi/4);

else

qpsk_signal((t+1)/2) = exp(j*7*pi/4);

end

end

end

for i=1:length(SNR_db)%Tim BER

r_signal = awgn(qpsk_signal,SNR_db(i)); %Dieu che Qpsk co nhieu

for k=1:2:len %vong lap dung de giai ma qpsk co nhieu

if real(r_signal((k+1)/2))>=0

ifimag(r_signal((k+1)/2))>=0

r_bsignal(k) = 1;

r_bsignal(k+1) = 0;

else

r_bsignal(k) = 1;

r_bsignal(k+1) = 1;

end

else

ifimag(r_signal((k+1)/2))>=0

r_bsignal(k) = 0;

r_bsignal(k+1) = 0;

else

r_bsignal(k) = 0;

r_bsignal(k+1) = 1;

end

end

end

[number,ratio] = biterr(bsignal,r_bsignal);

BER(i) = ratio;

end

Pb = 1/2.*erfc(sqrt(SNR/2));

plot(SNR_db,Pb,'o-',SNR_db,BER,'r ');

xlabel('SNR_db');

ylabel('Pb');

legend('Ly thuyet','Mo phong');

Trang 19

Bài 8 : Mô phỏng điều chế M-QAM qua kênh nhiễu Gauss

n_sym = 50000; %So bit tu dieu che

M = [16 64 128];

SNR_db = 0:25;

BER = zeros(length(M),length(SNR_db));

for i = 1:size(M,2) %Size (M,2) la so cot cua M

s_stream = randint(1,n_sym,M(i)); %Tao dong bieu tuong do dai n_sym

s_mod = qammod (s_stream,M(i),0,'GRAY'); %Dieu che tin hieu y

for r=1:size(SNR_db,2) %Vong lap tinh BER

s_mod_awgn = awgn(s_mod,SNR_db(r),'measured'); %Tin hieu y qua ienh nhieu tro thanh y_awgn

s_demod = qamdemod(s_mod_awgn,M(i),0,'GRAY'); %Giai dieu che M-QAM

[number ratio] = biterr(s_stream,s_demod); %Tinh ti le loi bit

BER(i,r) = ratio; %Luu ti le loi bit vua tinh vao BER

end

end

Trang 20

semilogy(SNR_db,BER(1,:),'bo-',SNR_db,BER(2,:),'rs-',SNR_db,BER(3,:),'m*-');

%Do thi BER voi cac truong hop tren mot do thi

grid on;

title('DO THI TY LE LOI BIT M-QAM');

xlabel('SNR_db');

ylabel('BER');

legend('M = 16','M = 64','M = 128');

Ngày đăng: 03/02/2017, 21:49

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w