KẾT QUẢ MÔ PHỎNG

Một phần của tài liệu nghiên cứu mã turbo trong hệ thống cdma (Trang 64 - 87)

Thực hiện chạy chương trình nhiều lần với các thông số đầu vào khác nhau,ta

được kết quả như bảng.

Lần 1 Lần 2 Lần 3 Lần 4 Lần 5 Lần 6 Lần 7

Thuật toán

Log-Map Log-Map SOVA SOVA Log-Map SOVA Log-Map

Kích thước khung 300 300 300 300 500 1000 1000 Kỹ thuật xoá

Có Có Không Không Có Không Có

Số lần lặp mỗi khung 5 10 5 10 5 5 5 Số khung bị lỗi để kết thúc 10 10 10 10 5 3 3 Eb/No (dB) 2 2 3 2 3 3 3

Bảng 5.1 Thông số các lần chạy chương trình Và kết quả cuối cùng của các lần chạy chương trình như sau:

57

Lần1 ***************************** Eb/N0 = 2.00 db *********************************** Kich thuoc khung = 300, rate 1/2.

132 Khung da trao doi , 10 Khung bi loi. Ti le loi bit (Tu lan lap 1 cho den 5):

2.3337e-002 5.1098e-003 2.1100e-003 1.3219e-003 1.6270e-003 Ti le loi khung (Tu lan lap 1 cho den 5):

9.1667e-001 3.0303e-001 1.2879e-001 8.3333e-002 7.5758e-002

*******************************************************************************

Lần2 ***************************** Eb/N0 = 2.00 db *********************************** Kich thuoc khung = 300, rate 1/2.

665 Khung da trao doi , 10 Khung bi loi. Ti le loi bit (Tu lan lap 1 cho den 10):

2.1310e-002 3.8149e-003 1.2414e-003 7.2160e-004 5.8536e-004 4.3902e-004 4.4911e-004 3.9360e-004 4.4406e-004 3.4314e-004

Ti le loi khung (Tu lan lap 1 cho den 10):

8.7669e-001 2.6316e-001 7.6692e-002 3.4586e-002 2.8571e-002 1.9549e-002 1.6541e-002 1.5038e-002 1.3534e-002 1.5038e-002

*******************************************************************************

Lần3 ***************************** Eb/N0 = 3.00 db *********************************** Kich thuoc khung = 300, rate 1/3.

3406 Khung da trao doi , 10 Khung bi loi. Ti le loi bit (Tu lan lap 1 cho den 5):

3.5705e-003 1.8030e-004 7.8819e-005 6.9952e-005 4.4335e-005 Ti le loi khung (Tu lan lap 1 cho den 5):

2.9008e-001 1.9671e-002 5.8720e-003 4.1104e-003 2.9360e-003

*******************************************************************************

Lần4 ***************************** Eb/N0 = 2.00 db *********************************** Kich thuoc khung = 300, rate 1/3.

408 Khung da trao doi , 10 Khung bi loi. Ti le loi bit (Tu lan lap 1 cho den 10):

2.4345e-002 4.9595e-003 2.1467e-003 1.5380e-003 1.0034e-003 8.0603e-004 8.1425e-004 7.5668e-004 7.1555e-004 6.2508e-004

Ti le loi khung (Tu lan lap 1 cho den 10):

8.0147e-001 2.3775e-001 9.8039e-002 6.1275e-002 4.4118e-002 3.6765e-002 3.4314e-002 2.9412e-002 2.4510e-002 2.4510e-002

Chương 5: Chương trình mô phỏng và kết quả

58

Lần5 ***************************** Eb/N0 = 3.00 db *********************************** Kich thuoc khung = 500, rate 1/2.

1557 Khung da trao doi , 5 Khung bi loi. Ti le loi bit (Tu lan lap 1 cho den 5):

3.5505e-003 7.3512e-005 1.9345e-005 2.5794e-005 2.0635e-005 Ti le loi khung (Tu lan lap 1 cho den 5):

4.6692e-001 1.2845e-002 3.2113e-003 3.2113e-003 3.2113e-003

*******************************************************************************

Lần6 ***************************** Eb/N0 = 3.00 db *********************************** Kich thuoc khung = 1000, rate 1/3.

1420 Khung da trao doi , 3 Khung bi loi. Ti le loi bit (Tu lan lap 1 cho den 5):

3.0484e-003 4.2338e-005 1.4113e-005 1.8347e-005 6.3507e-006 Ti le loi khung (Tu lan lap 1 cho den 5):

6.1972e-001 1.9014e-002 7.0423e-003 4.2254e-003 2.1127e-003

*******************************************************************************

Lần7 ***************************** Eb/N0 = 3.00 db *********************************** Kich thuoc khung = 1000, rate 1/2.

1177 Khung da trao doi , 3 Khung bi loi. Ti le loi bit (Tu lan lap 1 cho den 5):

3.5560e-003 2.1283e-005 6.8106e-006 5.1079e-006 5.1079e-006 Ti le loi khung (Tu lan lap 1 cho den 5):

7.3322e-001 1.0195e-002 4.2481e-003 2.5489e-003 2.5489e-003

*******************************************************************************

Bảng 5.2 Kết quả cuối cùng

59

Hình 5.2: Kết quả lần 1

Chương 5: Chương trình mô phỏng và kết quả

60

Hình 5.4: Kết quả lần 3

61

Hình 5.6: Kết quả lần 5

Chương 5: Chương trình mô phỏng và kết quả

62

Hình 5.8: Kết quả lần 7

Qua những hình trên và một số kết quả chạy chương trình khác,ta có nhận xét:

 số lần lặp càng lớn thì tỉ lệ lỗi bit cũng như tỉ lệ lỗi khung đều giảm.

 nếu số lương khung đưa vào càng lớn thì BER và FER càng thấp(thể hiện rõ trong Hình 5.7 và Hình 5.8).

 mã sẽ hoạt động tốt khi ta lựa chọn kích thước khung lớn.  tỉ lệ lỗi khung(FER) thường lớn hơn tỉ lệ lỗi bit(BER) nhưng

lần lặp càng lớn thì BER~FER(trong hình 5.7 và 5.8 khi lần lặp thứ 5 thì BER~ FER ~0).

5.4 KẾT LUẬN CHƯƠNG

Sau khi chạy chương trình với các thông số đầu vào cho như bảng 5.1 và chạy nhiều lần chương trình với các thông số khác nhau và các kết quả này đều

Chương 5: Chương trình mô phỏng và kết quả

Bắt Đầu

Chọn thuật toán giải mã Chọn kích thước khung Chọn kỹ thuật xoá Chọn số lần lặp mỗi khung Chọn số khung lôĩ để kết thúc Mã hoá Cộng nhiễu Gauss Giải mã TC Đếm lỗi Đếm lỗi < giới hạn lỗi Đúng Sai Kết thúc Hiển thị BER Hiển thị FER

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI

Do thời gian có hạn nên trong đồ án này vẫn chưa trình bày hết các vấn đề về mã Turbo ,trong đồ án này chỉ tập trung trình bày về mã Turbo PCCC( kết nối song song ).Nhìn nhận một cách tổng quát về các thuật toán giải mã , các kỹ thuật mã hoá ,bộ chèn và kỹ thuật xoá của mã Turbo PCCC rate 1/2 ,1/3 và chương trình mô phỏng cũng dựa trên mã này.

Một phần quan trọng của mã Turbo là thiết kế bộ chèn và biện pháp cải tiến bộ mã vẫn chưa được trình bày chi tiết kỹ trong đồ án này.

Một số hướng phát triển tiếp theo của đồ án như:

Tìm hiểu về mã Turbo kết nối nối tiếp( SCCC). Tìm hiểu về mã Turbo kết nối hổn hợp(HCCC). Nghiên cứu các thuật toán gần tối ưu khác.

Ứng dụng mã Turbo vào các hệ thống truyền thông thế hệ thứ 3 và thứ 4.

Mã Turbo cải tiến từ mã khối(Turbo Block Codes).

Mã TCM(Turbo Codes Modulation): Kết hợp giữa mã Turbo và điều chế.

Các loại mã kết hợp giữa mã hoá nguồn và mã hoá kênh.

TÀI LIỆU THAM KHẢO

1. Vũ Đức Thọ ,“Thông tin di động số Cellular”, NXB Khoa Học và Kỹ Thuật Hà Nội, 1997.

2. “Giáo trình thông tin di động” ,Hoc viện Bưu chính viễn thông cơ sở 2 Tp Hồ Chí Minh.

3. Đặng Văn Chuyết , Nguyễn Tuấn Anh ,“Cơ sở lý thuyết truyền tin”, NXB Giáo Dục, 1999.

4. Nguyễn Thuý Vân ,“Lý thuyết mã”, NXB Khoa Học và Kỹ Thuật Hà Nội,1999.n Multiple Access

5. Mr. Harte ,”Introduction to Code Division Multiple Access”, Althos Inc,2004. 6. Ali H.Mugaibel and Maan A.Kousa,”Understanding Turbo Codes”, King Fahd University of Petroleum and Minerals PO Box ,1271,Dhahran 31261,Saudi Arabia.

7. S. Adrian Barbulescu, Steven.S. Pietrobon,”Turbo Codes:A tutorial on a new class of powerful error correcting coding schemes”,”Part1: Code Structures and Interleaver Design”,26 October 1998.

8. Nguyễn Hoàng Hải-Nguyễn Khắc Kiểm- Nguyễn Trung Dũng-Hà Trần Đức,”Lập trình Matlab”, NXB Khoa Học và Kỹ Thuật ,Hà Nội 2003.

9. Một số website về viễn thông. 10. Đồ án của các khoá trước.

PHẦN PHỤ LỤC

1. Chương trình chính clear all

/ Luu chuong trinh lai/ diary Turbo.txt

/Chon thuat toan giai ma /

Ttgiaima = input(' Hay chon thuat toan giai ma. (0:Log-MAP, 1:SOVA) default 0 '); if isempty(Ttgiaima)

Ttgiaima = 0; end

/Kich thuoc khung/

L_f = input(' Hay chon kich thuoc khung (= info + tail, default: 1000) '); if isempty(L_f)

L_f = 1000; end

/ Ma tran sinh/

g = input(' Hay chon ma tran sinh: ( default: g = [1 1 1; 1 0 1 ] ) '); if isempty(g) g = [ 1 1 1; 1 0 1 ]; end [n,K] = size(g); m = K - 1; ns = 2^m;

/puncture = 0, Dung ky thuat xoa voi toc do ma hoa 1/2 . / /puncture = 1, Khong dung ky thuat xoá./

kt_xoa = input(' Hay chon ky thuat xoa / khong dung ky thuat xoa (0/1): default 0 ');

if isempty(kt_xoa) kt_xoa = 0; end

/ Toc do ma hoa(Code rate)/ rate = 1/(2+kt_xoa);

/ a=1 trong kenh nhieu AWGN / a = 1;

/ So lan lap/

lan_lap = input(' Hay chon so lan lap cua moi khung: default 5 '); if isempty(lan_lap)

lan_lap = 5; end

ket_thuc = input(' Hay chon so khung bi loi de ket thuc chuong trinh:default3 '); if isempty(ket_thuc)

ket_thuc = 3; end

EbN0db = input(' Hay chon ti le nang luong tren moi bit Eb/N0 don vi dB:default [3.0] '); if isempty(EbN0db) EbN0db = [3.0]; end fprintf('\n\n---\n'); if Ttgiaima == 0

fprintf(' ================================ GIAI MA Log-MAP ============================= \n');

fprintf(' ================================ GIAI MA SOVA ================================ \n');

end

fprintf(' Kich thuoc khung = %6d\n',L_f); fprintf(' Ma tran sinh: \n');

for i = 1:n for j = 1:K fprintf( '%6d', g(i,j)); end fprintf('\n'); end if kt_xoa==0

fprintf(' Dung ky thuat xoa, code rate = 1/2 \n'); else

fprintf(' Khong dung ky thuat xoa, code rate = 1/3 \n'); end

fprintf(' So lan lap = %6d\n', lan_lap);

fprintf(' Khung loi ket thuc = %6d\n', ket_thuc); fprintf(' Eb / N0 (dB) = '); for i = 1:length(EbN0db) fprintf('%10.2f',EbN0db(i)); end fprintf('\n---\n\n');

fprintf('+ + + + + + + + + CHUONG TRINH DANG CHAY VA CHO RA KET QUA!.+ + + + + + + + +\n');

for nEN = 1:length(EbN0db)

en = 10^(EbN0db(nEN)/10); / chuyen doi tu don vi dB sang so thuong/ L_c = 4*a*en*rate;

errs(nEN,1:lan_lap) = zeros(1,lan_lap); nferr(nEN,1:lan_lap) = zeros(1,lan_lap); nframe = 0;

while nferr(nEN, lan_lap)<ket_thuc nframe = nframe + 1;

x = round(rand(1, L_f-m));

[temp, alpha] = sort(rand(1,L_f));

en_output = bo_ma_hoa( x, g, alpha, kt_xoa ) ; r = en_output+sigma*randn(1,L_f*(2+kt_xoa)); yk = tach_kenh(r,alpha,kt_xoa);

rec_s = 0.5*L_c*yk; L_e(1:L_f) = zeros(1,L_f); for iter = 1:lan_lap

L_a(alpha) = L_e; if Ttgiaima == 0

L_all = logmapo(rec_s(1,:), g, L_a, 1); else

L_all = sova(rec_s(1,:), g, L_a, 1); end

L_e = L_all - 2*rec_s(1,1:2:2*L_f) - L_a; L_a = L_e(alpha);

if Ttgiaima == 0

L_all = logmapo(rec_s(2,:), g, L_a, 2); else

L_all = sova(rec_s(2,:), g, L_a, 2); end

L_e = L_all - 2*rec_s(2,1:2:2*L_f) - L_a; xhat(alpha) = (sign(L_all)+1)/2;

err(iter) = length(find(xhat(1:L_f-m)~=x)); if err(iter)>0

nferr(nEN,iter) = nferr(nEN,iter)+1; end

end

errs(nEN,1:lan_lap) = errs(nEN,1:lan_lap) + err(1:lan_lap); if rem(nframe,3)==0 | nferr(nEN, lan_lap)==ket_thuc

ber(nEN,1:lan_lap) = errs(nEN,1:lan_lap)/nframe/(L_f-m); fer(nEN,1:lan_lap) = nferr(nEN,1:lan_lap)/nframe;

fprintf('***************************** Eb/N0 = %5.2f db ********************************\n', EbN0db(nEN));

fprintf('Kich thuoc khung = %d, rate 1/%d. \n', L_f, 2+kt_xoa);

fprintf('%d Khung da trao doi , %d Khung bi loi.\n', nframe, nferr(nEN, lan_lap));

fprintf('Toc do loi bit (Tu lan lap 1 cho den %d):\n', lan_lap); for i=1:lan_lap

fprintf('%8.4e ', ber(nEN,i)); end

fprintf('\n');

fprintf('Toc do loi khung (Tu lan lap 1 cho den %d):\n', lan_lap); for i=1:lan_lap fprintf('%8.4e ', fer(nEN,i)); end fprintf('\n'); fprintf('************************************************************* ******************\n\n');

save Chuong_trinh_chinh EbN0db ber fer end

end diary off

2.Thuật toán SOVA

function L_all = sova(rec_s, g, L_a, ind_dec) L_f = length(L_a); [n,K] = size(g); m = K - 1; ns = 2^m; Infty = 1e10; delta = 30;

[next_out, next_state, last_out, last_state] = so_do_trellis(g); for t=1:L_f+1 for state=1:ns path_metric(state,t) = -Infty; end end path_metric(1,1) = 0; for t=1:L_f y = rec_s(2*t-1:2*t); for state=1:ns sym0 = last_out(state,1:2); sym1 = last_out(state,3:4); state0 = last_state(state,1); state1 = last_state(state,2);

Mk0 = y*sym0' - L_a(t)/2 + path_metric(state0,t); Mk1 = y*sym1' + L_a(t)/2 + path_metric(state1,t);

if Mk0>Mk1

path_metric(state,t+1)=Mk0; Mdiff(state,t+1) = Mk0 - Mk1;

prev_bit(state, t+1) = 0; else path_metric(state,t+1)=Mk1; Mdiff(state,t+1) = Mk1 - Mk0; prev_bit(state,t+1) = 1; end end end if ind_dec == 1 mlstate(L_f+1) = 1; else

mlstate(L_f+1) = find( path_metric(:,L_f+1)==max(path_metric(:,L_f+1)) ); end

for t=L_f:-1:1

est(t) = prev_bit(mlstate(t+1),t+1);

mlstate(t) = last_state(mlstate(t+1), est(t)+1); end for t=1:L_f llr = Infty; for i=0:delta if t+i<L_f+1 bit = 1-est(t+i);

temp_state = last_state(mlstate(t+i+1), bit+1); for j=i-1:-1:0

bit = prev_bit(temp_state,t+j+1);

temp_state = last_state(temp_state, bit+1); end

if bit~=est(t)

llr = min( llr,Mdiff(mlstate(t+i+1), t+i+1) ); end

end L_all(t) = (2*est(t) - 1) * llr; end 3.Đưa kết quả bằng hình figure; subplot(121);

plot([3.5560e-003 2.1283e-005 6.8106e-006 5.1079e-006 5.1079e-006 ]); hold on;

subplot(122);

plot([7.3322e-001 1.0195e-002 4.2481e-003 2.5489e-003 2.5489e-003]);

4.Thuật toán Logmap

function L_all = logmapo(rec_s,g,L_a,ind_dec) L_f = length(rec_s)/2;

[n,K] = size(g); m = K - 1; ns = 2^m;

[next_out, next_state, last_out, last_state] = so_do_trellis(g); Infty = 1e10; Alpha(1,1) = 0; Alpha(1,2:ns) = -Infty*ones(1,ns-1); if ind_dec==1 Beta(L_f,1) = 0; Beta(L_f,2:ns) = -Infty*ones(1,ns-1); elseif ind_dec==2 Beta(L_f,1:ns) = zeros(1,ns); else

fprintf('ind_dec la gioi han den 1 va 2!\n'); end

for k = 2:L_f+1 for state2 = 1:ns

gamma = -Infty*ones(1,ns); gamma(last_state(state2,1))=(-rec_s(2*k- 3)+rec_s(2*k2)*last_out(state2,2)).... -log(1+exp(L_a(k-1))); gamma(last_state(state2,2))=(rec_s(2*k-3)+rec_s(2*k- 2)*last_out(state2,4)).... +L_a(k-1)-log(1+exp(L_a(k-1))); if(sum(exp(gamma+Alpha(k-1,:)))<1e-300) Alpha(k,state2)=-Infty; else

Alpha(k,state2) = log( sum( exp( gamma+Alpha(k-1,:) ) ) ); end

end

tempmax(k) = max(Alpha(k,:)); Alpha(k,:) = Alpha(k,:) - tempmax(k); end for k = L_f-1:-1:1 for state1 = 1:ns gamma = -Infty*ones(1,ns); gamma(next_state(state1,1))=(-rec_s(2*k+1)+rec_s(2*k+2)*next_out(state1,2)).... -log(1+exp(L_a(k+1))); gamma(next_state(state1,2)) = (rec_s(2*k+1)+rec_s(2*k+2)*next_out(state1,4)).... +L_a(k+1)-log(1+exp(L_a(k+1))); if(sum(exp(gamma+Beta(k+1,:)))<1e-300) Beta(k,state1)=-Infty; else Beta(k,state1) = log(sum(exp(gamma+Beta(k+1,:)))); end end

end for k = 1:L_f for state2 = 1:ns gamma0 = (-rec_s(2*k-1)+rec_s(2*k)*last_out(state2,2)).... -log(1+exp(L_a(k))); gamma1 = (rec_s(2*k-1)+rec_s(2*k)*last_out(state2,4))... +L_a(k)-log(1+exp(L_a(k))); temp0(state2)=exp(gamma0 + Alpha(k,last_state(state2,1)) + Beta(k,state2));

temp1(state2)= exp(gamma1 + Alpha(k,last_state(state2,2)) + Beta(k,state2));

end

L_all(k) = log(sum(temp1)) - log(sum(temp0)); end

5 Bộ mã hoá

function en_output = bo_ma_hoa( x, g, alpha, kt_xoa ) [n,K] = size(g); m = K - 1; L_info = length(x); L_f = L_info + m; input = x; output1 = rsc_ma_hoa(g,input,1); y(1,:) = output1(1:2:2*L_f); y(2,:) = output1(2:2:2*L_f); for i = 1:L_f input1(1,i) = y(1,alpha(i)); end

output2 = rsc_ma_hoa(g, input1(1,1:L_f), -1 ); y(3,:) = output2(2:2:2*L_f);

for i = 1:L_f for j = 1:3 en_output(1,3*(i-1)+j) = y(j,i); end end else for i=1:L_f en_output(1,n*(i-1)+1) = y(1,i); if rem(i,2) en_output(1,n*i) = y(2,i); else en_output(1,n*i) = y(3,i); end end end

en_output = 2 * en_output - ones(size(en_output)); 6 .Số nguyên

function nhi_phan = nhi_phan( so_nguyen, m ) %chuyen vec to nguyen sang ma tran nhi phan for j = 1:length( so_nguyen)

for i = m:-1:1

state(j,m-i+1) = fix( so_nguyen(j)/ (2^(i-1)) );

so_nguyen(j) = so_nguyen(j) - state(j,m-i+1)*2^(i-1); end

end

nhi_phan = state;

Một phần của tài liệu nghiên cứu mã turbo trong hệ thống cdma (Trang 64 - 87)

Tải bản đầy đủ (PDF)

(87 trang)