Để 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.
TRƯỜ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 NhJm : 39B I. 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 để cJ thể mã hJa 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 cJ mã hJa Hamming: Bướ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 đJ 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 cJ 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ã hJa và đã mã hJa 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 đJ ta cộng các bits lại với nhau thì ta sẽ cJ đượ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 cJ mã hJa Hamming: Bướ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ã hJa hamming: Ma trân đầu vào x cJ độ dài N - Để tạo tín hiệu vào mã hJa 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 cJ chuỗi bit mới cJ độ dài là 7*n/4: - Với mã Hamming(7,4) thì 4 bits tin sẽ được mà hJa 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 độ sJng điều chế. Bước 4: Tạo tín hiệu nhiễu: - Tạo chuỗi nhiễu cJ là vector cJ độ 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 cJ 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 cJ 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 cJ 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 cJ đ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 cJ lỗi. - Bits 1 tương ứng trong vecto E là vị trí mà bản tin bị lỗi. - Để 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ã hJa 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ỉ cJ 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 cJ 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ã hJa và đã mã hJa 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 đJ ta cộng các bits lại với nhau thì ta sẽ cJ đượ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 +cJ 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ã hJa - 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ã hJa 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: clc; close 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) grid 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 đJ 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 cJ thể gây đảo dấu biên độ và khi giải điều chế sẽ cho ra bit cJ giá trị ngược lại so với giá trị gốc.còn với A lớn thì nhiễu khJ 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 cJ mã hJa Hamming xác suất lỗi bit thấp hơn nhiều so với khi chưa mã hJa. .vì khi sử dụng ma Hamming cJ thể phát hiện và sửa được lỗi Đồ thị mô phỏng cJ dạng gần giống với đồ thị theo lý thuyết. N=10 000 -15 -10 -5 0 5 10 15 20 25 30 10 -4 10 -3 10 -2 10 -1 10 0 SNR BER 3 ma hoa khong ma hoa . TRƯỜ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. reshape Sau khi mã hJa 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ỉ cJ thể sữa được lỗi sai 1 bits, từ 2 lỗi trở lên thì sẽ