Để tìm hiểu làm thế nào để mô phỏng được một hệ thống thông tin số trong sự hiện diện của nhiễu. Để thấy mối quan hệ giữa tỷ số tín hiệu trên nhiễu(SNR) và xác suất của lỗi(BER). Để xem cách kiểm soát lỗi để có thể mã hóa sửa đúng bit lỗi và giảm xác suất của lỗi tại một SNR cố định.
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG
KHOA ĐIỆN TỬ VIỄN THÔNG
-o0o -BÁO CÁO THÍ NGHIỆM THÔNG TIN SỐ VÀ TRUYỀN SỐ LIỆU
Giáo viên hướng dẫn : Mạc Như Minh
Sinh viên thực hiện :
1.Lê Phương Hiền 10DT2
2 Nguyễn Đức Huyên 10DT2
3 Hoàng Phan Anh Quân 10DT2
4 Phan Hữu Thập 10DT2
5.Thái Hoàng Tuấn 10DT2
6 Phạm Văn Lễ 10DT2
Nhóm : 39B
Trang 2I Mục đích:
- Để tìm hiểu làm thế nào để mô phỏng được một hệ thống thông tin số trong sự hiện diện của nhiễu
- Để thấy mối quan hệ giữa tỷ số tín hiệu trên nhiễu(SNR) và xác suất của lỗi(BER)
- Để xem cách kiểm soát lỗi để có thể mã hóa sửa đúng bit lỗi và giảm xác suất của lỗi tại một SNR cố định
II Trình tự thực hiện :
- Với các giá trị của N=[20 1000 10000 50000 100000 200000];
- Các giá trị của A=[0.5 1/sqrt(2) 1 sqrt(2) 2 2*sqrt(2) 4 4*sqrt(2)];
- Với ma trận sinh G: G = [1 1 0 1 0 0 0
0 1 1 0 1 0 0
1 1 1 0 0 1 0
1 0 1 0 0 0 1];
-Ma trận E: E= [ 0 0 0 0 0 0 0
0 0 1 0 0 0 0
0 1 0 0 0 0 0
0 0 0 0 1 0 0
1 0 0 0 0 0 0
0 0 0 0 0 0 1
0 0 0 1 0 0 0
0 0 0 0 0 1 0];
- Ma trận H: H =[1 0 0 1 0 1 1
0 1 0 1 1 1 0
0 0 1 0 1 1 1];
-H’ là ma trận chuyển vị của ma trận H
A: Tìm tỉ số tín hiệu trên nhiễu SNR và xác suất lỗi BER khi không có mã hóa Hamming:
Trang 3Bước 1: Tạo tín hiệu nguồn ngẫu nhiên signal_x : x=randn(1,N)>0.5;
- Dùng hàm randn() để tạo chuỗi tín hiệu ngẫu nhiên
- Tín hiệu ngẫu nhiên ở đây là những chuỗi bit 0,1
Bước 2: tạo tín hiệu x1=2*x-1 để giữ nguyên bit 1 và chuyển bit 0 thành -1 của tín hiệu x Bước 3: tạo tín hiệu nhiễu e với chiều dài chuỗi bằng chiều dài tín hiệu x
Bước 4: tìm tỉ số tín hiệu trên nhiễu SNR
Với 8 giá trị của A ta tìm được 8 giá trị của SNR bằng công thức :
SNR= 20*log10(A(i))
Bước 5: Điều chế
- Đây là quá trình chuyển tín hiệu từ số sang tương tự (D/A)
Ở đây ta sẽ biến đổi chuỗi bit 1,-1 thành dạng tín hiệu +A,-A với A là biện độ tín hiệu truyền Sau đó ta cộng kết quả thu được với nhiễu e ở bước 3 dựa vào công thức :
y=x1*A(i)+e
Bước 6: Demodulation (Giải điều chế):
- Đây là bước mà ở máy thu sẽ chuyển tín hiệu liên tục thu được thành tín hiều rời rạc
- Chúng ta chọn ngưỡng giới hạn là 0 Nếu tín hiệu nào có biên độ > 0 thì cho là 1 còn <=
0 thì cho là 0 (tín hiệu signal_y_h)
Bước 7: Tính xác xuất lỗi BER và tỉ lệ tín hiệu trên nhiễu SNR:
- Xác xuất lỗi = số bits lỗi / chiều dài của bản tin
- Xác định số bits lỗi trong trường hợp truyền chưa mã hóa và đã mã hóa bằng cách so sánh các bits nhận được với các bits ban đầu
- Ví dụ: để xác định số bits lỗi của signal_y_h1 ta xor signal_y_h1 với signal_x Thì những bits nào khác nhau sẽ cho kết quả là 1 còn giống nhau = 0 , sau đó ta cộng các bits lại với nhau thì ta sẽ có được số bits bị lỗi
- Tính tỉ lệ tín hiệu trên nhiễu SNR(dB) : SNR= 20*log(A);
B: Tìm tỉ số tín hiệu trên nhiễu SNR và xác suất lỗi BER khi có mã hóa Hamming:
Trang 4Bước 1: Tạo tín hiệu nguồn ngẫu nhiên signal_x : x=randn(1,N)>0.5;
Bước 2 : Tạo tín hiệu mã hóa hamming:
Ma trân đầu vào x có độ dài N
- Để tạo tín hiệu vào mã hóa hamming signal_hm ta nhân tín hiệu signal_x với ma trân
sinh G,ta chuyển chuỗi bit đã cho thành dạng ma trận 4 cột n hàng bằng lệnh reshape, x1=reshape(x,4,[])';
thực hiện phép nhân ma trận vào x với ma trận sinh G cho ra 1 ma trận 7 cột m hàng, x2=mod(x1*G,2)
Tiếp tục dung lệnh reshape ta có chuỗi bit mới có độ dài là 7*n/4:
- Với mã Hamming(7,4) thì 4 bits tin sẽ được mà hóa thành 7 bits
Bước 3: Điều chế
- Đây là quá trình chuyển tín hiệu từ số sang tương tự (D/A)
Ở đây ta sẽ biến đổi chuỗi bit 0,1 thành dạng tín hiệu +A,-A với A là biện độ sóng điều chế
Bước 4: Tạo tín hiệu nhiễu:
- Tạo chuỗi nhiễu có là vector có độ dài 7*N1/4
Bước 5: Demodulation (Giải điều chế):
- Đây là bước mà ở máy thu sẽ chuyển tín hiệu liên tục thu được thành tín hiều rời rạc
- Chúng ta chọn ngưỡng giới hạn là 0 Nếu tín hiệu nào có biên độ > 0 thì cho là 1 còn <=
0 thì cho là 0 (tín hiệu signal_y_h)
Bước 6: Giải mã (Decoding):
- Từ tín hiệu signal_y_h ta giải mã thành tín hiệu bpsk_designald
Ta chia chuyển tín hiệu thu dc thành dạng ma trận có 7 cột n hàng
- Lấy ma trận trên nhân modulo 2 với ma trận chuyển vị H’của ma trận H =>ma trân có dạng 3 cột N hàng 3 bits syndrome s
- Chuyển từ ma trân 3 bits syndrome s ta chuyển từ nhị phân sang thập phân với trọng số lớn nhất bên trái rồi cộng thêm 1 ta có đc hàng tương ứng trong vector E- => xác định được bits lỗi trong ma trân E Phải cộng 1 vì trong E thì hàng đầu tiên không có lỗi
- Bits 1 tương ứng trong vecto E là vị trí mà bản tin bị lỗi
Trang 5- Để sửa lỗi ta lấy vecto E tương ứng với vị trí đã xác định cộng Modulo 2 với mỗi hàng của ma trận bpsk_designald bị lỗi ban đầu
- Cuối cùng ta lấy 4 cột 4:7 của ma trận và chuyển ma trận này thành chuỗi bit bằng lệnh reshape
Sau khi mã hóa và giải mã với mã Hamming(7,4) thì vẫn còn một số bits lỗi là do:
- Trong bài thí nghiệm này với vecto E đã cho thì chỉ có thể sữa được lỗi sai 1 bits, từ 2 lỗi trở lên thì sẽ không sữa được
- Việc sửa lỗi còn phụ thuộc vào khoảng cách Hamming tối thiểu d , nếu d càng lớn thì
=> khả năng sửa lỗi tối đa t=int((d-1)/2) tăng và khả năng phát hiện lỗi cũng tăng,khả năng phát hiện và sửa lỗi sẽ tăng.Và bao giờ cũng tồn tại xác xuất lỗi không phát hiện được => không có loại mã nào là hoàn thiện tất cả chỉ ở mức tương đối chấp nhận được Nên với mã (7,4) này cũng vậy thì sau khi giải mã thì vẫn còn tồn tại lỗi
Bước 7: Tính xác xuất lỗi:
- Xác xuất lỗi = số bits lỗi / chiều dài của bản tin
- Xác định số bits lỗi trong trường hợp truyền chưa mã hóa và đã mã hóa bằng cách so sánh các bits nhận được với các bits ban đầu
- Ví dụ: để xác định số bits lỗi của signal_y_h1 ta xor signal_y_h1 với signal_x Thì những bits nào khác nhau sẽ cho kết quả là 1 còn giống nhau = 0 , sau đó ta cộng các bits lại với nhau thì ta sẽ có được số bits bị lỗi
- Tính tỉ lệ tín hiệu trên nhiễu SNR(dB) : SNR= 20*log10(A);
Tính tỉ lệ bit lỗi BER_h
+có mã Hamming: BER_h(z,i)=(sum(xor(signal_y_h1,signal_x)))/n(z);
Bước 8: Vẽ kết quả:
- Vẽ đồ thị của xác xuất lỗi so với tỉ số SNR của tín hiệu lúc chưa mã hóa
- Vẽ đồ thị của xác xuất lỗi so với tỉ số SNR của tín hiệu lúc đã mã hóa bằng mã
Hamming (7,4)
- Vẽ đồ thị của xác xuất lỗi so với tỉ số SNR của tín hiệu ứng với N=200000
Signal:
Trang 6close all;
H =[1 0 0 1 0 1 1;0 1 0 1 1 1 0;0 0 1 0 1 1 1];
G=[ 1 1 0 1 0 0 0;0 1 1 0 1 0 0;1 1 1 0 0 1 0;1 0 1 0 0 0 1];
E=[ 0 0 0 0 0 0 0;0 0 1 0 0 0 0;0 1 0 0 0 0 0;0 0 0 0 1 0 0;1 0 0 0 0 0 0;0 0 0 0 0 0 1;0 0 0
1 0 0 0;0 0 0 0 0 1 0];
A = [0.5 1/sqrt(2) 1 sqrt(2) 2 2*sqrt(2) 4 4*sqrt(2)];
%Tao chuoi tin hieu ban dau
N = input('Nhap so N = ') ;
x=randn(1,N)>0.5;
%Co ma hoa
%Ma hoa hamming
x1=reshape(x,4,[])';
x2=mod(x1*G,2);
x3=reshape(x2',1,[]);
for i=1:8
x4=(2*x3-1)*A(i);%Dieu che
x4=x4+randn(1,N*7/4);%Cong nhieu kenh truyen
x4=x4>0;%Giai dieu che
%Giai ma
x5=reshape(x4,7,[])';
s=mod(x5*H',2);
h=bi2de(s,'left-msb');
x6=mod(x5+E(h+1,:),2);
x7=x6(:,4:7);%Chi co 4 bit sau la bit tin
x8=reshape(x7',1,[]);%Tin hieu sau giai ma
BER(i)=sum(xor(x8,x))/N;%tinh BER
SNR(i)=20*log(A(i));%tinh SNR
end
% Khong co ma hoa
for k=1:8
y=(2*x-1)*A(k);% Dieu che
y1=y+randn(1,N);%Cong nhieu kenh truyen
y2=y1>0;%Giai dieu che
BER1(k)=sum(xor(y2,x))/N;%tinh BER
SNR1(k)=20*log(A(k));%tinh SNR
end
%Ve do thi co ma hoa va ko co ma hoa
semilogy(SNR,BER,'-bp',SNR1,BER1,':rp');
xlabel('SNR')
ylabel('BER')
legend('ma hoa','khong ma hoa');
title(3)
Trang 7grid on
-nhận xét:
Xác suất lỗi bit ( BER ) phụ thuộc vào giá trị của biên độ điều chế A: với biên độ A càng lớn, xác suất lỗi bit càng thấp và ngược lại.vì khi tăng giá trị của A ,tức là tăng biên
độ xung truyền đi,lúc đó trong quá trình truyền nhiễu cộng vào sẽ không ảnh hưởng nhiều đến giá trị biên độ so với khi giá trị A bé.nghĩa là với giá trị A bé thì nhiễu cộng vào có thể gây đảo dấu biên độ và khi giải điều chế sẽ cho ra bit có giá trị ngược lại so với giá trị gốc.còn với A lớn thì nhiễu khó làm đảo dấu biên độ hơn
Xác suất lỗi bit ( BER ) không phụ thuộc vào chiều dài tín hiệu: vì với tín hiệu càng dài thì số bits lỗi càng nhiều nhưng tỉ lệ bit lỗi so với dòng dữ liệu sẽ không tăng
Khi có mã hóa Hamming xác suất lỗi bit thấp hơn nhiều so với khi chưa mã hóa .vì khi sử dụng ma Hamming có thể phát hiện và sửa được lỗi
Đồ thị mô phỏng có dạng gần giống với đồ thị theo lý thuyết
N=10 000
10-4
10-3
10-2
10-1
100
SNR
3
ma hoa khong ma hoa