bài báo cáo thí nghiệm thông tin số

8 660 6
bài báo cáo thí nghiệm thông tin số

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

Thông tin tài liệu

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: Sending Message Channel Encoder Modulator AWGN Receiver Message Channel Decoder Channel Demodulator 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 1110 010 1111 111 Với : x = mG(modulo 2) 1.2.2.Ma trận sinh G 1 0  1  1 1 1 1 0 0 1 1 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0  0  1 G= 1.2.3.Ma trận kiểm tra H và ma trận chuyển vị Ht 1 0 0 1 0 1 1  0 1 0 1 1 1 0    0 0 1 0 1 1 1   1 0  0  1 0  1 1  0 0 1 0  0 1  1 0 1 1  1 1 0 1  H= Ht = 1.2.4 Giải mã và sữa lỗi -Sau khi vector từ mã đi qua hệ thống có nhiễu thì vector nhận được là: y = x+e(modulo 2) -Bên thu sẽ giải mã để tạo lại các bit tin ban đầu,quá trình tạo ra vector syndrome s để xác định vị trí lỗi: S = y*Ht(modulo 2) -Giá trị thập phân của s sẽ cho biết vị trí hàng trong ma trận E có chứa vị trí bít lỗi tương ứng 0 0  0  0 1  0 0  0  0 0 0 0 0 0 0 1 0 0 0 0   1 0 0 0 0 0   0 0 0 1 0 0  0 0 0 0 0 0   0 0 0 0 0 1 0 0 1 0 0 0   0 0 0 0 1 0   E= 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 Ý nghĩa:Tạo ra chuỗi bit có độ dài bằng x nếu giá trị x > 0 thì giá trị tx tương ứng là 1 ngược lại là 0 Kết quả: tx= [0 0 1 1 0 1 1 0 1 1 0 1 0 1 0 1 1 1 0 0 ] 3.2Mã hóa dãy bit nguồn Đầu tiên nhóm các bit trong chuỗi bit tx thành các nhóm 4 bit tin Các nhóm 4 bit tin này sẽ được mã hóa thành các nhóm 7 bit theo quy luật mã hóa của mã Hamming (7,4) Mỗi nhóm 4 bit tin nhân với ma trận sinh G để tạo ra vector mã hóa có độ dài 7 bit Code: x_dc_code = zeros(1, 7/4 * length(x_dc)); j=1; for k=1:4:length(x_dc) x_dc_code(j:j+6)= x_dc(k:k+3)*G; x_dc_code(j:j+6)=mod(x_dc_code(j:j+6),2); j=j+7; end Ý nghĩa: Đầu tiên tạo ra dãy tx_code có độ dài bằng 7/4 độ dài của dãy bit tx Nhóm từng 7 bit của tx_code sẽ bằng nhóm 4 bit tương ứng của tx nhân với ma trận sinh G Dùng hàm mod 2 để chuyển các giá trị được tính thành bit 0 hoặc 1 Kết quả sau khi mã hóa: N = 20 mã hóa tạo ra 35 bit tx_code = [0 1 1 0 1 0 0 1 1 0 1 0 0 0 1 0 0 0 1 1 0 0 1 1 1 0 0 1 0 0 0 1 1 0 1] 3.3.Điều chế tín hiệu dùng phương pháp BPSK ( binary phase shift keying) Chuyển dãy tín hiệu rời rạc thành tín hiệu liên tục để truyền đi với biên độ sóng mang : A = [0.5, 1/sqrt(2), 1, sqrt(2), 2, 2*sqrt(2), 4, 4*sqrt(2)]; %bien do song mang Đối với tín hiệu được mã hóa: Code: for k=1:length(A) for i= 1:length(x_dc_code) if x_dc_code(i)==1 a(i)= A(k); else 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; else rx_thu(i)=0; end end Nếu rx_mahoa(i)>=0 thì tín hiệu giải điều chế là bit 1, ngược lại là bit 0 Tương tự khôi phục lại tín hiệu không mã hóa: Code: for l= 1:length(rx_chmahoa) if rx_chmahoa(l)>=0 rx_thu1(l)=1; else rx_thu1(l)=0; end end Nếu rx_chmahoa(i)>=0 thì tín hiệu giải điều chế là bit 1, ngược lại là bit 0 Kết quả: rx_thu1 = [ 0 0 0 1 1 0 1 1 0 1 1 0 1 0 1 0 1 1 0 0 0] So sánh tín hiệu thu không mã hóa với tín hiệu vào ta thấy bit thứ 18 bị lỗi khác với tín hiệu vào 3.6.Giải mã tín hiệu Quá trình giải mã ngược lại với mã hóa, dãy bit nhận được sẽ được nhóm thành 7 bit, để khôi phục lại 4 bit tin Để áp dụng được khả năng giải mã sửa lỗi Hamming thì cần phải các định có lỗi xảy ra hay không bằng cách sử dụng ma trận kiểm tra H.Nếu có xuất hiện lỗi bit thì dùng Syndrome mà nó tạo ra để xác định bit lỗi và sữa lỗi Code: j=1; for l = 1:7:length(rx_thu) s=mod(rx_thu(l:l+6)*Ht,2); s1=bin2dec(int2str(s)); e= E(s1+1,:); Y=mod(rx_thu(l:l+6)+e,2); Rx_decode(j:j+3)=Y(4:7); j=j+4; 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: m=3; n=2^m-1; k=n-m; N=100000; [H,G]=hammgen(m); % tao ma tran sinh G va matran kiemtra H Ht=H'; %ma tran chuyen vi cua H E=syndtable(H); x = randn(1,N); for k= 1:N if x(k)>0 x_dc(k)= 1; else x_dc(k)=0; end end %ma hoa x_dc_code = zeros(1, 7/4 * length(x_dc)); j=1; for k=1:4:length(x_dc) x_dc_code(j:j+6)= x_dc(k:k+3)*G; x_dc_code(j:j+6)=mod(x_dc_code(j:j+6),2); j=j+7; end A = [0.5, 1/sqrt(2), 1, sqrt(2), 2, 2*sqrt(2), 4, 4*sqrt(2)]; %dieu che for k=1:length(A) for i= 1:length(x_dc_code) if x_dc_code(i)==1 a(i)= A(k); else a(i) = -A(k); end 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; for l = 1:7:length(rx_thu) s=mod(rx_thu(l:l+6)*Ht,2); s1=bin2dec(int2str(s)); e= E(s1+1,:); Y=mod(rx_thu(l:l+6)+e,2); Rx_decode(j:j+3)=Y(4:7); j=j+4; end SNR(k) = 10*log10(A(k)^2/2); E(k) = sum(abs(x_dc-Rx_decode)); E1(k) = sum(abs(x_dc-rx_thu1)); BER(k) = E(k)/N; %ty le loi bit BER1(k) = E1(k)/N ; end %do thi semilogy(SNR, BER, 's-','LineWidth',2.2);hold on; semilogy(SNR, BER1, 'ro-','LineWidth',2.2);hold on; grid on title(' N = 100000');xlabel('SNR (dB)'); ylabel('(BER)'); legend( 'mahoa','chuamahoa'); ... 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 bên thu khơi... nguồn Đầu tiên nhóm bit chuỗi bit tx thành nhóm bit tin Các nhóm bit tin mã hóa thành nhóm bit theo quy luật mã hóa mã Hamming (7,4) Mỗi nhóm bit tin nhân với ma trận sinh G để tạo vector mã hóa... 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 dãy bit ngẩu nhiên: dùng hàm “randn” Ví dụ cho N = 20 Code : x= randn(1,N); Tạo

Ngày đăng: 11/02/2015, 05:00

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan