Sending
Message
Channel
Encoder
Channel
Decoder
Receiver
Message
Modulator
AWGN Channel
Demodulator
BÁO CÁO THÍ NGHIỆM THÔNG TIN SỐ VÀ TRUYỀN SỐ LIỆU
I - Mục đích thí nghiệm:
-Nhằm mô phỏng hoạt động của hệ thống thông tin số
-Mối quan hệ giữa tỉ số tín hiệu trên nhiễu SNR và xác suất lỗi.
-Sử dụng mã Hamming để điều khiển sữa lỗi và giảm xác suất lỗi.
II - Phần lý thuyết
1.1. Sơ đồ khối của hệ thống thông tin đơn giản:
1.2.Mã khối Hamming(7,4)
1.2.1. Định nghĩa:
Mã Hamming được đặc trưng bởi 2 số nguyên n và k, ma trận sinh G. k là từ mã, n là độ
dài từ mã và ( n-k ) là số bit kiểm tra.
-Mã khối (7,4) có 4 bit tin ký hiệu vector m, được mã hóa thành 7 bit ký hiệu vector x:
Vector tin m Vector từ mã x Vector tin m Vector từ mã x
0000 000 0001 101
1000 110 1001 011
0100 011 0101 110
1100 101 1101 000
0010 111 0011 010
1010 001 1011 100
0110 100 0111 001
1110100
0111010
1101001
Ht =
101
111
0100000
0001000
1000000
0000001
0010000
0000010
0000100
0000000
Khi đó tín hiệu thu là: y (corected) = y + e(modulo 2) = x+ e + e(modulo 2) = x.
III- Các bước tiến hành thí nghiệm:
3.1.Tạo ra dãy bit ngẩu nhiên: dùng hàm “randn” . Ví dụ cho N = 20
Code : x= randn(1,N);
Tạo ra ngẫu nhiên 1 dãy dữ liệu 20 bits có giá trị
Sử dụng hàm để tạo ra chuỗi bits nhị phân 0, 1
Code: for k= 1:N
if x(k)>0
x_dc(k)= 1;
else
x_dc(k)=0;
end
end
a(i) = -A(k);
end
end
Ý nghĩa: a có độ dài bằng x_dc_code và mỗi giá trị của t tương ứng với:
- Nếu x_dc_code = 1 thì a= A, ngược lại x_dc_code = 0 thì a = -A
Tín hiệu không được mã hóa:
Code: for k=1:length(A)
for r=1:length(x_dc)
if x_dc(r)==1
a1(r)= A(k);
else
a1(r) = -A(k);
end
end
3.4.Tạo nhiễu
Sử dụng hàm “randn” để tạo nhiễu ngẫu nhiên có chiều dài bằng chiều dài tín hiệu
được mã hóa .
Code: nhieu= randn(1,length(a));
Sử dụng hàm “randn” để tạo nhiễu ngẫu nhiên có chiều dài bằng chiều dài tín hiệu
được không được mã hóa .
Code: nhieu1= randn(1,N);
3.5.Giải điều chế tín hiệu thu được.
Tín hiệu thu được sẽ bằng tín hiệu được điều chế cộng với nhiễu đường truyền::
rx_mahoa = a + nhieu; % tin hieu thu = tin hieu phat ma hoa + nhieu
rx_chmahoa = a1 + nhieu1; %tin hieu thu = tin hieu phat khong ma hoa + nhieu1
Ở bước này bên thu sẽ khôi phục tín hiệu tương tự thành tín hiệu rời rạc thông qua bộ
chuyển đổi A/D gọi là bộ giải điều chế.
Code: for i= 1:length(rx_mahoa)
if rx_mahoa(i)>=0
rx_thu(i)=1;
end
Kết quả:
Rx_decode = [0 1 0 0 1 0 0 0 0 1 1 0 1 0 0 1 1 1 0 1]
So sánh kết quả giữa 20 bit tín hiệu được mã hóa trùng với 20 bit tín hiệu vào. Giải mã đã
đáp ứng được tín hiệu mong muốn ở đầu thu.
Trả lời câu hỏi: Sau khi mã hóa và giải mã với mã Hamming (7,4) mà vẫn còn lỗi là do
mã Hamming phát hiện được nhiều lỗi nhưng nó chỉ có thể sửa được 1 lỗi.
3.7.Tính xác suất lỗi bit
Tính BER, BER1 lần lượt là vector xác suất lỗi trong trường hợp mã hóa và không mã
hóa. Đầu tiên tính số bit lỗi giữa tín hiệu phát và thu trong 2 trường hợp:
Code : SNR(k) = 10*log10(A(k)^2/2);
E(k) = sum(abs(x_dc-Rx_decode)); %so bit loi giua tin hieu phat va thu
E1(k) = sum(abs(x_dc-rx_thu1));
BER(k) = E(k)/N; %ty le loi bit
BER1(k) = E1(k)/N ;
Công suất tín hiệu trên nhiễu: SNR(k) = 10*log10(A(k)^2/2);
Nhận xét hiệu quả của việc mã hóa:
-Lỗi sinh ra khi không mã hóa lớn hơn khi mã hóa.
-Chạy mô phổng với các chiều dài bit N = 100, N = 10000, N = 100000
-Kết quả cho thấy tín hiệu thu được không chỉ phụ thuộc vào giá trị biên độ A mà còn phụ thuộc
vào chiều dài N của bit thông tin
-khi tăng A,tăng N lên thì xác suất lỗi sẽ giảm xuống và ngược lại.
3.8. Kết quả mô phỏng
Đồ thị :
Với biên độ A = [0.5, 1/sqrt(2), 1, sqrt(2), 2, 2*sqrt(2), 4, 4*sqrt(2)], N = 100
Đồ thị :
Với biên độ A = [0.5, 1/sqrt(2), 1, sqrt(2), 2, 2*sqrt(2), 4, 4*sqrt(2)], N = 10000
Đồ thị :
Với biên độ A = [0.5, 1/sqrt(2), 1, sqrt(2), 2, 2*sqrt(2), 4, 4*sqrt(2)], N = 100000
Code matlab:
end
for r=1:length(x_dc)
if x_dc(r)==1
a1(r)= A(k);
else
a1(r) = -A(k);
end
end
% tao nhieu
nhieu= randn(1,length(a));
nhieu1= randn(1,N);
rx_mahoa = a + nhieu;
rx_chmahoa = a1 + nhieu1;
%giai dieu che
for i= 1:length(rx_mahoa)
if rx_mahoa(i)>=0
rx_thu(i)=1;
else
rx_thu(i)=0;
end
end
for l= 1:length(rx_chmahoa)
if rx_chmahoa(l)>=0
rx_thu1(l)=1;
else
rx_thu1(l)=0;
end
end
%giai ma
j=1;