Đồ án Mô phỏng kĩ thuật trải phổ

Đối với reverse link, BER đặc biệt phẳng khi trể lớn hơn nhiều so với 1 chip ,khi sóng phản xạ trở nên không tương quan.Do ở reverse link chịu ảnh hưởng rõ rệt của số người sử dụng đồng thới nên đường 30 USER nằm cách biệt lớn đường 10 USER. Đối với forward link,cũng chịu ảnh hưởng như trên nhưng do kênh ít chịu ảnh hưởng của số người sử dụng đồng thời nên không có cách biệt rõ nét như reverse link. 1) Hướng phát triển đề tài : Do thời gian hạn hẹp của luận văn nên có nhiều vấn đề đi sâu vào vấn đề trải phổ đã được bỏ qua .Hi vọng em sẽ có điều kiện nghiên cứu phát triển tiếp: Mô phỏng trải phổ phức của các hệ thống 3G . Mô phỏng các kênh truyền thực của IS-95,CDMA 2000, Đi vào multi-carrier CDMA,OFDM để xử lý ảnh trên mạng điên thoại di động dùng giải thuật FFT

doc79 trang | Chia sẻ: baoanh98 | Lượt xem: 848 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Đồ án Mô phỏng kĩ thuật trải phổ, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
KẾT QUẢ MÔ PHỎNG Trong phần này em mô phỏng ba phần chính đó là : Chuỗi PN và chuỗi Walsh: Chuỗi m : msequence.m Chuỗi Gold : gold.m Chuỗi Kasami : kasami.m Chuỗi PN :pnsequence.m Chuỗi Walsh : walsh.m Các hệ thống trải phổ: DS-BPSK :bpskss1.m Ds-QPSK :qpskss1.m Ds-CDMA 2000 :cdma2000.m Mô phỏng hệ thống DS có nhiều người sử dụng Chú ý :Toàn bộ chương trình viết trên nền MATLAB R12 version 6.1(6/2001),với sự tham khảo các sách điện tử của Matlab như:comm.pdf(communication toolbox version 6.1),signal-tb.pdf(Signal processing toolbox)(www.mathworks.com),... Giao diện chính: : Chuỗi PN và chuỗi Walsh: Giao diện chuỗi PN: Các hàm công cụ: Xorsum.m : Cộng modulo-2 của các thành phần trong dãy nhị phân. Ví dụ: >> a=[1 0 1 1]; xorsum(a) ans = 1 >> b=[a 1] b = 1 0 1 1 1 >> xorsum(b) ans = 0 Cyclic.m: Dịch vòng chuỗi i vị trí từ trái sang phải. cyclic(a,i) : Nhập vào hai thông số a: chuỗi,i: số lần dịch Ví dụ: >> a=[ 2 3 4 5 6] a = 2 3 4 5 6 >> cyclic(a,0) ans = 2 3 4 5 6 >> cyclic(a,2) ans = 4 5 6 2 3 Chuỗi PN: Msequence.m Kasami.m Pnsequence.m Gold.m Sơ đồ cây mô phỏng chuổi PN Msequence.m: Ma trận chuỗi m với mỗi hàng của ma trận là một chuỗi m Msequence(g,option): có hai thông số đầu vào g : Đa thức tạo mã. option: bằng 0 : ma trận chuỗi m Bằng Giá trị: chuỗi m ở hàng tương ứng trong ma trận mã Mô phỏng với m=3 và đa thức kiểm tra chẵn g=x3 +x2 +1 Ta thấy hàm tương quan chéo có dạng đầu đinh của tín hiệu ngẫu nhiên.Tăng đa thức kiểm tra chẵn g(x)= x5 +x2 +1,ta thấy hàm tự tương quan cải thiện hẳn lên khi tăng phần tử nhớ,ta có chuổi M càng gần giống với tạp âm hơn làm cho việc trải phổ càng tốt hơn Một số điểm đáng chú y trong lập trình : Thật sự g không phải đa thức tạo mã mà chính xác là:đa thức kiểm tra chẵn( coi phần trình bày lý thuyết spreading code) Đã kiểm tra với ví dụ trang 434 Digital Communications,xb lần 3.Proakis. Do là có trường hợp đa thức nhập vào có thoả mãn điều kiện hai hệ số đầu và cuối bằng 1 nhưng không phải là đa thức kiểm tra chẵn nên em có sử dụng lệnh tạo chuỗi cyclic code cho trường hợp này với đa thức tạo mã chuẩn của Matlab . cụ thể: encode(start,n,m,'cyclic',cyclpoly(n,m)); Ở đây: Hàm cyclpoly tạo đa thức tạo mã chuẩn. Hàm encode tạo mã ‘cyclic’. Ví dụ: >> msequence([ 1 0 1 1],0) start = 1 1 1 ma tran M-sequence ans = 1 1 1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 0 0 1 1 1 1 0 0 1 1 1 0 0 0 1 1 1 0 1 0 1 1 1 0 1 0 ở đây ,start là trạng thái ban đầu >> b=msequence([ 1 0 1 1],4) start = 1 1 1 m-sequence b = 0 1 0 0 1 1 1 >> c=msequence([ 1 1 0 1 1],3) start = 1 1 1 1 DA THUC TAO MA BAN NHAP VAO KHONG PHAI LA da thuc tao ma DU HE SO DAU VA CUOI BANG 1 DUNG DA THUC CHUAN CUA MATLAB DE TAO CHUOI m-sequence c = 1 1 0 1 0 1 1 0 0 1 0 0 0 1 1 gold.m :Ma trận dãy Gold gold(g1,g2,option) :Có ba thông số đầu vào g1,g2 là đa thức tạo mã option: bằng 0 : Ma trận chuỗi Gold bằng giá trị: Chuỗi Gold tương ứng trong ma trận Với chuỗi M có hàm tự tương quan khá tốt tuy nhiên ngoài việc xét đến hàm tự tương quan, người ta còn quan tâm đến sự tương quan chéo nhau (gọi là hàm tương quan ) mà chuỗi GOLD có đặc tính đó .Chuỗi GOLD được tạo bởi hai chuỗi m mà ta đã nói ở phầøn lý thuyết ,sau đây là kết quả mô phỏng. Cũng như chuỗi m, chuỗi GOLD sẽ có giá trị tương quan nhỏ khi số phần tử nhớù tăng, làm cho hiện tượng xuyên âm giảm bớt .Nó chỉ có ba giá trị khi thiết kế thì phải tìm độ lệch để có được tương quan chéo là thấp nhất (f =-1) Một số điểm đáng chú ý trong lập trình: gold.m tạo từ msequence.m Hai dãy m nằm ở hai hàng cuối của ma trận mã, các hàng trên là các kết quả cộng modulo-2 của dãy m thứ nhất và dịch vòng của dãy m thứ hai. Ví dụ: >> gold([ 1 0 1 1],[ 1 1 0 1],0) start = 1 1 1 m-sequence c1 = 1 0 1 0 0 1 1 start = 1 1 1 m-sequence c2 = 1 0 0 1 0 1 1 ma tran GOLD-sequence hang 1 chua dich hang 2 dich 1 vi tri ans = 0 0 1 1 0 0 0 1 0 0 0 1 0 0 1 1 1 1 1 0 1 0 0 0 1 1 1 1 1 1 0 1 0 1 0 0 1 0 0 0 0 1 0 1 1 0 1 1 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 >> gold([ 1 0 1 1],[ 1 1 0 1],3) m-sequence m-sequence GOLD-sequence ans = 1 1 1 1 1 0 1 kasami.m: Ma trận mã Kasami kasami(g,option): Có hai thông số đầu vào g: đa thức tạo mã option:bằng 0 : Ma trận dãy Kasami bằng giá trị : Chuỗi Kasami tương ứng hàng trong ma trận. chuỗi KASAMI có đặc tính gần giống chuỗi GOLD nhưng giá trị fmax gần bằng giới hạn dưới Welch nên tốt hơn. Một số điểm đáng chú ý trong lập trình : kasami.m tạo từ msequence.m,lấy hàng tương ứng giá trị tổng của đa thức tạo mã (một cách tạo ngẫu nhiên) Hàng cuối của ma trận tạo mã là chuỗi cơ bản,các hàng còn lại là cộng modulo-2 của chuỗi cơ bản và dịch vòng của chuỗi tạo ra bằng cách lấy mẫu chuỗi cơâ bản Ví dụ: >> kasami([ 1 0 1 1],0) s = 3 start = 1 1 1 m-sequence c1 = 1 0 1 0 0 1 1 c2 = 1 0 1 1 1 0 0 ma tran KASAMI-sequence hang cuoi cung la chuoi co ban hang 1 chua dich hang 2 dich 1 vi tri ans = 0 0 0 1 1 1 1 1 1 0 1 0 1 0 0 1 0 0 0 0 1 1 0 1 0 0 1 1 >> kasami([ 1 0 1 1],2) m-sequence KASAMI-sequence ans = 1 1 0 1 0 1 0 Pnsequence.m: Ma trận chuỗi PN tổng quát (coi sơ đồ cây) pnsequence(g1,option1,option2,g2): Có bốn thông số đầu vào g1,option 1,option 2: Ba tham số bắt buộc,còn lại không bắt buộc. G1,g2: Đa thức tạo mã option1:’msequence’/’gold’/’kasami’ option2:bằng 0 : Ma trận chuỗi PN tương ứng(vd:kasami,..) bằng giá trị: Mã PN tương ứng hàng trong ma trận. Ví dụ: >> pnsequence([ 1 0 1 1],0) DE NGHI NHAP LAI >> pnsequence([ 1 0 1 1],'msequence',0) ma tran M-sequence ans = 1 1 1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 0 0 1 1 1 1 0 0 1 1 1 0 0 0 1 1 1 0 1 0 1 1 1 0 1 0 >> pnsequence([ 1 0 1 1],'kasami',0) m-sequence ma tran KASAMI-sequence hang cuoi cung la chuoi co ban hang 1 chua dich hang 2 dich 1 vi tri ans = 0 0 0 1 1 1 1 1 1 0 1 0 1 0 0 1 0 0 0 0 1 1 0 1 0 0 1 1 >> pnsequence([ 1 0 1 1],'kasami',0,[1 1 0 1]) DAY LA CHUOI GOLD BAN DA HIEU SAI DE NGHI NHAP LAI CHO DUNG >> pnsequence([ 1 0 1 1],'gold',0,[1 1 0 1]) m-sequence m-sequence ma tran GOLD-sequence hang 1 chua dich hang 2 dich 1 vi tri ans = 0 0 1 1 0 0 0 1 0 0 0 1 0 0 1 1 1 1 1 0 1 0 0 0 1 1 1 1 1 1 0 1 0 1 0 0 1 0 0 0 0 1 0 1 1 0 1 1 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 >> pnsequence([ 1 0 1 1],'gold',3,[1 1 0 1]) m-sequence m-sequence GOLD-sequence ans = 1 1 1 1 1 0 1 >> pnsequence([ 1 0 1 1],'gold',3,[1 1 0 1 1]) ??? Error using ==> gold hai chuoi phai cung kich thuoc c) Đánh giá các loại chuỗi PN: Để tạo chuỗi PN ta có thể dùng cách tạo chuỗi M là dễ nhất ,song khi sử dụng chung trên một kênh truyền thì có sự xuyên âm xảy ra nên ta phải dùng đến các chuỗi có tương quan chéo thấp để hiện tượng xuyên âm giảm mà tiêu biểu là hai bộ chuỗi phát sinh từ chuỗi M là chuỗi Gold vàKasami . d)Chuỗi Walsh: Ma trận mã Walsh có chiều dài N walsh(N,option): Có hai thông số đầu vào wn=walsh(N):Hàm này cung cấp một ma trận tất cả các mã Walsh chiều dài N, dạng 1 và 0. N phải lớn hơn 1 và mũ của 2(tương đương 2,4,8,16,32,..).Nếu N không phải là mũ của 2 thì nó làm tròn đến mũ của 2 kế tiếp .Ví dụ walsh(5) cho kết quả giống walsh(8). Wn=walsh(N,’+-‘): Hàm này cung cấp một ma trận tất cả các mã Walsh chiều dài N, dạng 1 và -1. Một số điểm đáng chú ý trong lập trình: Matlab có hàm hadamard tạo ma trận Hadamard-Walsh,ở dạng -1và 1 nhưng yêu cầu N là mũ của 2. >> hadamard(3) ??? Error using ==> hadamard n must be an integer and n, n/12 or n/20 must be a power of 2. >> hadamard(8) ans = 1 1 1 1 1 1 1 1 1 -1 1 -1 1 -1 1 -1 1 1 -1 -1 1 1 -1 -1 1 -1 -1 1 1 -1 -1 1 1 1 1 1 -1 -1 -1 -1 1 -1 1 -1 -1 1 -1 1 1 1 -1 -1 -1 -1 1 1 1 -1 -1 1 -1 1 1 -1 Do hạn chế của hàm hadamard nên em viết hàm walsh riêng Ví dụ: >> walsh(3) ans = 1 1 1 1 1 0 1 0 1 1 0 0 1 0 0 1 >> walsh(3,'+-') ans = 1 1 1 1 1 -1 1 -1 1 1 -1 -1 1 -1 -1 1 >> walsh(8,'+-') ans = 1 1 1 1 1 1 1 1 1 -1 1 -1 1 -1 1 -1 1 1 -1 -1 1 1 -1 -1 1 -1 -1 1 1 -1 -1 1 1 1 1 1 -1 -1 -1 -1 1 -1 1 -1 -1 1 -1 1 1 1 -1 -1 -1 -1 1 1 1 -1 -1 1 -1 1 1 -1 Mô phỏng các hệ thống trải phổ: a)Direct-sequence spread spectrum: a.1) các hàm công cụ: Spread.m: Trải tín hiệu tin tức c1 ra theo chuỗi PN c2 và cộng modulo-2 tạo tín hiệu đưa vào bộ điều chế.Hàm trả về một vectơ. spread(c1,c2): Có hai thông số đầu vào. c1,c2: Hai chuỗi nhị phân. Ví dụ minh hoạ: >> a=spread([ 1 0],[ 1 0 1 1]) c11 = 1 1 1 1 0 0 0 0 c22 = 1 0 1 1 1 0 1 1 a = 0 1 0 0 1 0 1 1 Despread.m: Nén tín hiệu TRẢI (bằng cách trải tin tức theo chuỗi PN ) lại tín hiệu ban đầu theo chuỗi PN. despread(a,b): Có hai thông số đầu vào a: spreaded signal b: chuỗi PN Ví dụ: >> despread(a,[ 1 0 1 1]) temp = 1 1 1 1 0 0 0 0 ĩ CHÚNG TA QUAN TÂM BƯỚC NÀY a = 1 1 1 1 temp = 1 1 1 1 0 0 0 0 temp = 0 0 0 0 1 1 1 1 a = 0 0 0 0 temp = 0 0 0 0 1 1 1 1 temp = 1 1 1 1 0 0 0 0 ans = 1 0 Khi có nhiễu tác động lên hệ thống , temp không đồng nhất. Nghĩa là trong từng khoảng chiều dài chuỗi PN ,temp không hoàn toàn bằng 0 hay 1.Lúc này , nếu để nguyên như vậy để lấy mẫu(nén tín hiệu) thì kết quả có thể bị sai.Em đã thêm một đoạn chương trình chữa lỗi ,đoạn này tương đương với phần cứng là bộ tích phân,bằng cách lấy : trung bình số bit 1 trong từng chiều dài PN chia chiều dài chuỗi PN , lấy kết quả này so với giá trị ngưỡng.Nếu lớn hơn giá trị ngưỡng thì coi đồng nhất bằng 1. Giá trị ngưỡng có hai giá trị cho hai sơ đồ: 0,57 cho BPSK 0.71 cho QPSK Hai giá trị này có từ quan sát thấy :Nếu chuỗi PN chiều dài bằng 7 thì số bit lổi tối đa là 3,nghĩa là số bit 1 từ 4,5,6,7 tương đương với giá trị 0.57.Nhưng có điều lạ là khi chạy hai chương trình trải phổ dùng phương pháp điều chế khác nhau với số lần lặp lớn với các chiều dài chuỗi tin tức khác nhau ,thấy với BPSK 0.57 tối ưu ,QPSK tối ưu với 0.7 Ví dụ có nhiễu: >> a(3)=1 a = 0 1 1 0 1 0 1 1 :BỊ NHIỄU >> despread(a,[ 1 0 1 1]) temp = 1 1 0 1 0 0 0 0 : BỊ NHIỄU,không đồng nhất a = 1 1 0 1 temp = 1 1 1 1 0 0 0 0 temp = 0 0 0 0 1 1 1 1 a = 0 0 0 0 temp = 0 0 0 0 1 1 1 1 temp = 1 1 1 1 0 0 0 0 :SAU KHI SỬA LỖI ans = 1 0 Ví dụ chạy chương trình DS-SS dùng điều chế BPSK với cacù mức ngưỡng .57 và 0.71 chiều dai tin tức len=100,chạy 100 lần : a)giá trị ngưỡng là 0.57 BER = Columns 1 through 11 0.0100 0 0.0200 0 0.0300 0 0 0.0100 0 0.0200 0.0100 Columns 12 through 22 0.0100 0.0300 0.0100 0.0100 0.0100 0 0.0200 0.0100 0 0.0300 0.0100 Columns 23 through 33 0.0200 0 0 0.0200 0.0300 0.0100 0 0 0 0.0100 0.0200 Columns 34 through 44 0 0 0 0 0 0 0.0100 0 0.0100 0 0 Columns 45 through 55 0 0.0100 0.0100 0.0100 0.0200 0.0300 0 0 0.0300 0 0.0100 Columns 56 through 66 0 0.0100 0.0100 0 0.0200 0.0200 0 0.0100 0.0100 0 0 Columns 67 through 77 0.0200 0 0 0.0100 0 0.0200 0.0100 0.0100 0 0.0100 0 Columns 78 through 88 0.0100 0 0 0.0300 0.0200 0.0100 0 0.0300 0.0100 0 0 Columns 89 through 99 0.0200 0.0100 0.0100 0.0200 0.0200 0 0.0100 0 0.0200 0 0 Column 100 0.0100 Nhận xét: Chỉ sai 1 đến 3 bit. b) giá trị ngưỡng là 0. 71: Columns 1 through 11 Sai 7 bit 0.0300 0.0200 0.0500 0.0300 0.0200 0.0100 0.0300 0.0100 0.0100 0.0300 0 Columns 12 through 22 0 0.0200 0.0200 0.0500 0.0200 0.0200 0.0500 0.0200 0.0200 0.0600 0.0700 Columns 23 through 33 0.0700 0.0500 0 0.0400 0.0200 0.0700 0.0500 0.0300 0.0100 0.0400 0.0400 Columns 34 through 44 0.0200 0.0500 0.0300 0.0500 0.0300 0.0300 0.0500 0.0300 0.0500 0.0300 0.0500 Columns 45 through 55 0.0100 0.0200 0.0300 0.0200 0.0300 0.0400 0.0100 0.0500 0.0300 0.0400 0.0300 Columns 56 through 66 0.0200 0.0500 0.0300 0.0400 0.0400 0.0100 0.0300 0.0600 0.0500 0.0200 0.0100 Columns 67 through 77 0.0100 0.0300 0.0300 0.0400 0.0400 0.0100 0.0100 0 0.0200 0.0400 0.0500 Columns 78 through 88 0.0200 0.0500 0.0300 0.0500 0.0100 0.0200 0.0200 0.0300 0.0300 0.0300 0.0400 Columns 89 through 99 0.0100 0 0.0200 0 0.0500 0.0100 0.0300 0.0100 0.0200 0.0200 0.0500 Column 100 0.0100 Nhận xét: Sai đến 7 bit a.2)DS-BPSK: Mô hình: Mô hình mô phỏng điều chế và giải điều chế DS/SS BPSK Bản tin số b(t) Tín hiệu PN c(t) b(t).c(t) Sóngd mang Acos(2pfct+q) Bộ điều chế BPSK S(t) Bộ tạo PN nội Đồng bộ tín hiệu PN Cos(2pfct+ q) Bộ giải điều chế BPSK C(t-t) s(t-t)+n(t) W(t-t) Bộ cộng nhiễu trắng S(t) Thuật giải: Minh hoạ các bước của chươngtrình. Signal PN signal spread Spreading signal Điều chế Giải ĐC Cộng nhiễu Modsignal Noisy Newspreading signal Despread Message BPSKSS1(g1,option1,option2,g2): Có bốn thông số đầu vào. g1,g2 :Đa thức tạo mã option1:’msequence’/’kasami’/’gold’ option2:Bằng 0 hay một giá trị (coi thêm msequence.m) Giao diện mô phỏng DS-BPSK: Mô phỏng với bảng thông số sau: CÁC THÔNG SỐ MÔ PHỎNG: Đa thức sinh 1011 Loại chuỗi m-sequence Số bit 100 Tần số tín hiệu 9600 Tần số sóng mang 76800 Trải phổ tín hiệu theo hệ số trải bằng chiều dài chuỗi PN ,có nhiễu nghiêm trọng (coi phần mô phỏng giá trị lớn ở dưới ) nên sau khi giải điều chế sẽ có lỗi bit xảy ra nhưng nhờ đi qua mạch tích phân sửa lổi à BER giảm đi nhiều.Ở đây với số bit nhỏ nên BER coi như lý tưởng nên bằng 0. Ví dụ có nhiễu: minh hoạ chạy len=3(chiều dài tin tức) >> bpskss1([ 1 0 1 1],'msequence',3) signal = 1 1 0 m-sequence BER cua SPREADING SIGNAL : 0.047619 message = 1 1 0 BER cua MESSAGE SIGNAL : 0 >> bpskss1([ 1 0 1 1],'kasami',3) signal = 1 0 0 m-sequence KASAMI-sequence BER cua SPREADING SIGNAL : 0.14286 message = 1 0 0 BER cua MESSAGE SIGNAL : 0 >> bpskss1([ 1 0 1 1],'gold',3) signal = 0 1 1 ??? Error using ==> pnsequence DE NGHI NHAP LAI >> bpskss1([ 1 0 1 1],'gold',3,[ 1 1 0 1]) signal = 1 0 1 m-sequence m-sequence GOLD-sequence BER cua SPREADING SIGNAL : 0.047619 message = 1 0 1 BER cua MESSAGE SIGNAL : 0 Mô phỏng với các giá trị chiều dài tin tức khác nhau và các loại chuỗi PN khác nhau Chiều dài tin tức(bit) BER với đa thức tạo mã g=1 01 1 M-Sequence Kasami Gold 1000 0.0074 0.0040 0.0070 5000 0.0080 0.0086 0.0082 10000 0.0098 Một số vấn đề gặp phải khi lập trình: Do Matlab không ý niệm về thời gian trong điều chế số.Nói cách khác nó không hổ trợ về việc biểu diễn độ rộng bit,biểu diễn tốc độ bit.Cụ thể : Xét hai lệnh điều chế và giải điều chế số dmod và ddemod,có dạng giống nhau. Dmod(X,fc,fd,fs,method,..) Điều chế tín hiệu tin tức X với tần số sóng mang fc (Hz) và tần số lấy mẫu fd (Hz)(Nếu gõ help dmod :Matlab lại gọi fd là tần số ký tự(symbol frequency)(Hz). Thực sự fd là tần số lấy mẫu coi ví dụ mẫu của matlab hướng dẫn sử dung communication toolbox: gõ commgettingstarted (chạy ) hay type commgettingstarted (xem chương trình) (với version R12) hay gõ dmod psk hay dmod fsk (định nghĩa fd là sample frequency (Hz)). Tần số lấy mẫu Y là fs (Hz). Do Matlab không có khái niệm thời gian nên nó hiểu trên quan hệ từng bít. Do đó để biểu diễn độ rộng bit dữ liệu dài bằng chu kỳ chuỗi PN(xem hình trên),em đã trải tín hiệu tạo ra một cách ngẫu nhiên ra theo chuỗi PN (ĩspread.m).Đồng thời nhờ tính chất đồng nhất của tín hiệu bị trải để chữa lỗi(ĩ despread.m) Đối với hầu hết những tính toán điều chế số ,Matlab không dùng trực tiếp tốc độ lấy mẫu fs và fd của tín hiệu tin tức và mapped signal .Cái nó dùng là tỉ số fs/fd: Ví dụ: Hai lệnh dưới đây cho cùng kết quả(ở đây baseband modulation,khác với ta hay dùng passband modulation) y13 = dmodce([0 1 2 3 4 5 6 7]',1,3,'ask',8); y26 = dmodce([0 1 2 3 4 5 6 7]',2,6,'ask',8); a(:,1)=y13;a(:,2)=y26; a% de bieu dien so sanh Do đó em không cho nhập fc,fd,fs mà cho giá trị cố định thoả mãn điều chế passband : fs>fc>fd fs>2fc (khoảng Nyquist) đồng thời thoả mãn điều kiện fs/fd=số nguyên dương Phương trình nhiễu(dùng chung cho các hệ thống SS để so sánh) noisy = modsignal +3*randn(1,cdai*fs/fd)+wgn(1,cdai*fs/fd,10) ; Ở đây :modsignal là tín hiệu điều chế Randn(M,N): tạo ma trận M*Ncó những thành phần ngẫu nhiên chọn từ luật phân phối đồng nhất có kỳ vọng bằng 0,phương sai bằng 1,độ lệch chuẩn(standard deviation) bằng 1.Nghĩa là nó giống dáng điệu nhiễu Gauss là kỳ vọng bằng 0,nhưng bị lệch phương sai. Wgn(M,N,P):tạo ma trận M*N của nhiễu trắng có công suất P(dB).Trong biểu thức trên 10 dBĩ10W(theo công thức P(dB)=10lg(P/(1W)) ). Mặt khác Matlab chỉ tạo ra tín hiệu điều chế có biên độ cực đại bằng 1 nên với phương trình trên ,em đã cho tín hiệu điều chế chìm trong nhiễu. Cách tính SNR (chung cho các hệ thống SS): tu=norm(modsignal); mau=norm(3*randn(1,cdai*fs/fd))+10; snr=tu/ mau; Ở đây: Lệnh norm(X) là lấy căn bậc hai của tổng bình phương các thành phần của vecto X(hay ma trậnX) Xuất phát từ ý :coi mỗi bit được biểu diễn bằng một thành phần hài khác nhau,để tính công suất gần đúng bằng tổng các U2/2R(U là trị đỉnh,cho R=1).Nhưng khi phân tích cách Matlab viết hàm wgn thấy Matlab tính trên quy luật căn bậc hai của tổng bình phương với nhiễu công suất thực (?) nên em bắt chước theo. a.3)DS-QPSK: Mô hình: s1(t) s2(t) Bộ ĐC BPSK Dịch p/2 Chuỗi PN 1 Chuỗi PN 2 Acos(2pfct) Bộ ĐC BPSK b(t) Cộng nhiễu Giải ĐC BPSK Giải ĐC BPSK Dịch p/2 Acos(2pfct) Chuổi PN 1 Chuổi PN 2 So sánh Hệ thống DS-SS QPSK Thuật giải: Minh hoạ các bước của chương trình Signal PN signal 1 spread Spreading Signal 1 Điều chế Giải ĐC -p/2 Cộng nhiễu Modsignal 1 Noisy Newspreading Signal 1 Depsread Message 1 PN signal 2 spread Spreading Signal 2 Điều chế -p/2 Modsignal 2 Newspreading Signal 2 Depsread Message Message 2 So sánh Giải ĐC QPSKSS1(g1,option1,option2,g3,option3,option4,g2,g4): Có 8 thông số đầu vào Gồm hai bộ thông số (g1,option1,option2,g2) (g3,option3,option4,g4) Trường hợp 7 thông số chuỗi PN đầu tiên là chuỗi GOLD g1,g2,g3,g4 :Đa thức tạo mã. option1,option3 :’msequence’/’kasami’/’gold’ option2,option4 : Bằng 0 hay một giá trị (coi thêm msequence.m) Giao diện mô phỏng DS-QPSK(chung cho CDMA 2000 ở tiếp theo) Ví dụ: >> qpskss1([1 0 1 1],'msequence',2,[1 1 0 1],'kasami',2) signal = 0 0 1 m-sequence pnsignal1 = 1 1 0 1 0 0 1 m-sequence KASAMI-sequence pnsignal2 = 0 1 0 0 0 1 0 spreadingsignal1 = Columns 1 through 12 1 1 0 1 0 0 1 1 1 0 1 0 Columns 13 through 21 0 1 0 0 1 0 1 1 0 spreadingsignal2 = Columns 1 through 12 0 1 0 0 0 1 0 0 1 0 0 0 Columns 13 through 21 1 0 1 0 1 1 1 0 1 newspreadingsignal1 = Columns 1 through 12 1 1 0 1 0 0 1 1 1 0 1 0 Columns 13 through 21 0 0 0 0 1 0 1 1 0 newspreadingsignal2 = Columns 1 through 12 0 1 0 0 0 1 0 0 1 0 0 0 Columns 13 through 21 1 0 0 0 1 1 1 0 0 BER cua SPREADING SIGNAL1 : 0.047619 BER cua SPREADING SIGNAL2: 0.095238 message1 = 0 0 1 message2 = 0 0 1 message = 0 0 1 BER cua MESSAGE SIGNAL : 0 >> qpskss1([1 0 1 1],'msequence',2,[1 1 0 1],'msequence',2) signal = 1 1 1 m-sequence m-sequence BER cua SPREADING SIGNAL1 : 0.047619 BER cua SPREADING SIGNAL2: 0.2381 Sai lệch message1 = 1 1 1 message2 = 0 1 1 message = 1 1 1 BER cua MESSAGE SIGNAL : 0 >> qpskss1([1 0 1 1],'msequence',2,[1 1 0 1],'gold',2,[1 1 0 1]) signal = 1 0 1 DAY LA CHUOI GOLD BAN DA HIEU SAI DE NGHI NHAP LAI CHO DUNG >> qpskss1([1 0 1 1],'gold',2,[1 1 0 1],'msequence',2,[1 1 0 1]) signal = 1 1 1 m-sequence m-sequence GOLD-sequence m-sequence BER cua SPREADING SIGNAL1 : 0.14286 BER cua SPREADING SIGNAL2: 0.19048 message1 = Sai lệch 1 1 1 message2 = 1 1 0 message = 1 1 1 BER cua MESSAGE SIGNAL : 0 Mô phỏng với các giá trị chiều dài tin tức khác nhau và các loại chuỗi PN khác nhau a)len=1000 qpskss1([ 1 0 1 1],'msequence',2,[1 1 0 1],'kasami',2) BER=0.0050 qpskss1([ 1 0 1 1],'gold',2,[1 1 0 1],'kasami',2,[1 1 0 1]) BER=0.0030 b)len=5000 qpskss1([ 1 0 1 1],'msequence',2,[1 1 0 1],'kasami',2) BER= 0.003 qpskss1([ 1 0 1 1],'gold',2,[1 1 0 1],'kasami',2,[1 1 0 1]) BER=0.0026 c)len=10000 qpskss1([ 1 0 1 1],'msequence',2,[1 1 0 1],'kasami',2) BER=0.0032 Một số vấn đề gặp phải khi lập trình: Ngoài ba vấn đề như DS-BPSK đã trình bày .Việc so sánh tín hiệu message ở hai nhánh theo cách sau: so sánh theo vị trí ,nếu hai bit này giống thì bằng 1 trong 2 bit,còn khác thì cộng modulo-2 của 2 bit. a.4) DS-CDMA-2000 Mô hình Chuổi Walsh 1 Chuỗi Walsh 2 Dịch p/2 Acos(2pfct) s1(t) s2(t) Bộ ĐC BPSK Bộ ĐC BPSK ä Cộng Nhiễu Giải ĐC BPSK Giải ĐC BPSK Dịch p/2 Acos(2pfct) Chuổi Walsh 1 Chuổi Walsh 2 So sánh Hệ thống DS-CDMA 2000 Thuật giải: Tương tự DS-SS QPSK cdma2000(N,n,m):Có 3 thông số đầu vào N:chuỗi Walsh cỡ N.Nếu N không là mũ của 2 thì làm tròn N tiến tới mũ của 2 kế tiếp. n,m: thứ tự hàng trong ma trận Walsh Giao diện DS-QPSK Mô phỏng với bảng thông số sau: CÁC THÔNG SỐ MÔ PHỎNG: Đa thức sinh 1011 Loại chuỗi m-sequence Số bit 100 Tần số tín hiệu 9600 Tần số sóng mang 76800 nhờ tính trực giao của chuổi Walsh và nhờ tín hiệu sau giải điều chế đi qua mạch tích phân nên CDMA 2000 chữa lỗi rất tốt. Mô phỏng với các giá trị chiều dài tin tức khác nhau và các loại chuỗi PN khác nhau len BER với lệnh cdma2000(5,2,3) 1000 0.0040 5000 0.0039 10000 0.0038 Một số vấn đề gặp phải khi lập trình: Như với DS-QPSK a.5) Nhận xét các hệ thống DS-SS: Từ các bảng giá trị mô phỏng giá trị lớn ta vẽ được các đồ thị sau: Từ bảng giá trị của kết quả mô phỏng trong 3 trường hợp ta thấy trường hợp DS-CDMA2000 là tốt nhất, kế đến là DS-QPSK, và sau đó là DS-BPSK. Nguyên nhân là do CDMA2000 ta dùng chuỗi Walsh so với DS-QPSK (do cả hai dùng cùng một phương pháp điều chế cũng như mô hình điều chế). BPSK có xác suất lỗi cao hơn QPSK do mô hình điều chế của QPSK sửa lỗi bằng hai nhánh đồng pha và vuông góc. b) Frequency hopping spread spectrum Mô hình chung: b(t) b(t) s(t) s(t) Bộ phát chuổi PN Bộ tổng hợp tần số Bộ ĐC FSK Bộ nhân tần β=1 BPF băng rộng BPF băng rộng Bộ tổng hợp tần số Bộ phát chuổi PN BPF băng rộng Bộ giải ĐC FSK Không đồng nhất Mô hình FH-SS b.1)Fast FH-SS : Thuật giải: Bằng cách cho chuỗi PN trượt qua một cửa sổ n=2 kết hợp vối 1 bit dữ liệu (như hình trên) tạo ra symbol có n+1 bit đưa vào điều chế FSK M=2(n+1) .Ở đây có hai quá trình ngược nhau: 1)trượt chuỗi PN qua cửa sổ lần lượt và ghép với một bít dữ liệu.2) lấy bit dữ liệu từ symbol ghép. Giao diện mô phỏng nhảy tần ( dùng chung cho fast FH và slow FH) Ví dụ minh họa hai quá trình không nhiễu: a)quá trình 1 với số lần nhảy tần m=3: >> fast1 a = 1 1 0:CHUỖI PN dịch b = 1 0 1 1 0 1 1: CHUỖI DỮ LIỆU spreadingsignal = TRẢI TÍN HIỆU , 1 bit dữ liệu thành m=3 bit Columns 1 through 18 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 Columns 19 through 21 1 1 1 Bắt đầu trượt ghép n = 2 windows = 1 1 a = 1 0 1 merge = 1 1 1 windows = 1 0 a = 0 1 1 merge = 1 1 0 windows = 0 1 a = 1 1 0 merge = 1 0 1 windows = 1 1 a = 1 0 1 merge = 0 1 1 windows = 1 0 a = 0 1 1 merge = 0 1 0 windows = 0 1 a = 1 1 0 merge = 0 0 1 windows = 1 1 a = 1 0 1 merge = 1 1 1 windows = 1 0 a = 0 1 1 merge = 1 1 0 windows = 0 1 a = 1 1 0 merge = 1 0 1 windows = 1 1 a = 1 0 1 merge = 1 1 1 windows = 1 0 a = 0 1 1 merge = 1 1 0 windows = 0 1 a = 1 1 0 merge = 1 0 1 windows = 1 1 a = 1 0 1 merge = 0 1 1 windows = 1 0 a = 0 1 1 merge = 0 1 0 windows = 0 1 a = 1 1 0 merge = 0 0 1 windows = 1 1 a = 1 0 1 merge = 1 1 1 windows = 1 0 a = 0 1 1 merge = 1 1 0 windows = 0 1 a = 1 1 0 merge = 1 0 1 windows = 1 1 a = 1 0 1 merge = 1 1 1 windows = 1 0 Kết thúc trượt ghép a = 0 1 1 merge = 1 1 0 windows = 0 1 a = 1 1 0 merge = 1 0 1 newsignal = Columns 1 through 18 7 6 5 3 2 1 7 6 5 7 6 5 3 2 1 7 6 5 Columns 19 through 21 7 6 5 b)quá trình 2 số lần nhảy tần m=3 >> fast2 a = Columns 1 through 18 7 6 5 3 2 1 7 6 5 7 6 5 3 2 1 7 6 5 Chuyển từ ký tự thập phân sang ký tự nhị phân Columns 19 through 21 7 6 5 cdai = 21 newspreadingsignal = Columns 1 through 18 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 Kiểm tra tính đồng nhất Columns 19 through 21 1 1 1 newspreadingsignal = Columns 1 through 18 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 Columns 19 through 21 In đậm:Sai 1 1 1 message = 1 0 1 1 0 1 1 Ví dụ quá trình 2 có nhiễu so vối quá trình 1 ở ví dụ trên: >> fast2 Columns 1 through 18 7 6 5 4 2 1 6 6 5 7 6 4 2 2 1 4 6 5 Columns 19 through 21 6 3 5 cdai = In đậm:Sai 21 newspreadingsignal = Columns 1 through 18 1 1 1 1 0 0 1 1 1 1 1 1 0 0 0 1 1 1 Columns 19 through 21 1 0 1 newspreadingsignal = Columns 1 through 18 1 1 1 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 Columns 19 through 21 1 1 1 message = 1 0 1 1 0 1 1 fastfh1(g1,option1,option2,m,g2):Có 5 thông số đầu vào. g1,g2 :Đa thức tạo mã Option1 :’msequence’/’kasami’/’gold’ Option2 : Bằng 0 hay một giá trị(coi thêm msequence.m) m : Số lần nhảy tần nhanh Mô phỏng với chiều dài bit (len)=10: Không nhiễu Có nhiễu Mô phỏng với các giá trị chiều dài tin tức khác nhau và các loại chuỗi PN khác nhau: a)len=1000 fastfh1([ 1 0 1 1],’msequence’,3,3) BER= 0.2335 fastfh1([ 1 0 1 1],’kasami’,3,3) BER=0.2423 fastfh1([ 1 0 1 1],’gold’,3,3,[1 1 0 1]) BER=0.2366 b)len=5000 fastfh1([ 1 0 1 1],’msequence’,3,3) BER= 0.227 fastfh1([ 1 0 1 1],’kasami’,3,3) BER=0.2516 fastfh1([ 1 0 1 1],’gold’,3,3,[1 1 0 1]) BER= 0.2464 c)len=10000 fastfh1([ 1 0 1 1],’gold’,3,3,[1 1 0 1]) BER= 0.237 Một số vấn đề gặp phải khi lập trình: Do Matlab không ý niệm về thời gian trong điều chế số.Nói cách khác nó không hổ trợ về việc biểu diễn độ rộng bit,biểu diễn tốc độ bit.Cụ thể : Xét hai lệnh điều chế và giải điều chế số dmod và ddemod,có dạng giống nhau. Dmod(X,fc,fd,fs,method,..) Điều chế tín hiệu tin tức X với tần số sóng mang fc (Hz) và tần số lấy mẫu fd (Hz)(Nếu gõ help dmod :Matlab lại gọi fd là tần số ký tự(symbol frequency)(hz). Thực sự fd là tần số lấy mẫu coi ví dụ mẫu của Matlab hướng dẫn sử dung communication toolbox: gõ commgettingstarted (chạy ) hay type commgettingstarted(xem chương trình) (với version R12)) hay gõ dmod psk hay dmod fsk (định nghĩa fd là sample frequency (Hz)). Tần số lấy mẫu Y là fs (Hz). Do Matlab không có khái niệm thời gian nên nó hiểu trên quan hệ từng bít. Do đó để biểu diễn độ rộng bit dữ liệu dài bằng số lần nhảy tần của bit PN (xem hình trên),em đã trải tín hiệu tạo ra một cách ngẫu nhiên.Mục đích sâu xa là để chữa lỗi nhờ tính chất đồng nhất của tín hiệu bị trải ( lấy ý tưởng của despread.m) bởi khi không trải có lỗi lớn ngay cả khi không nhiễu. Trong quá trình trượt ghép ,chuỗi PN được trải ra nhưng trong chương trình không thể hiện rõ bằng lệnh trải mà lồng vào những dòng lệnh lặp vòng kết hợp dịch vòng. Trong quá trình trượt ,phục hồi bit tin giá trị ngưỡng để so sánh là 0.5,do chỉ cần quá một nửa số bit trong chiều dài cửa sổ là đủ để quyết định. Phương trình nhiễu vẫn giữ nguyên để so sánh các hệ thống sau này: noisy = modsignal +3*randn(1,cdai*fs/fd)+wgn(1,cdai*fs/fd,10) ; Với mức nhiễu này hệ thống FH bị phá huỷ nghiêm trọng nhưng nó còn có nguyên nhân của chính phương pháp điều chế FSK Để phân tích ta chạy đoạn chương trình điều chế FSK không nhiễu có cấu trúc sau: M=8;àTHAY ĐỔIfd=1;fc=20;fs=45;% signal=[ 7 2 5 6 5 6 1];àTHAY Đổi%modsignal=dmod(signal,fc,fd,fs,'fsk',M);%demodsignal=ddemod(modsignal,fc,fd,fs,'fsk',M)%[num,rate]=biterr(demodsignal,signal);disp(['BER : ',num2str(rate)]) chạy với các giá trị khác nhau ,ta có bảng sau M Signal BER 8 [ 7 2 5 6 5 6 1] 0.047619 16 [ 7 2 5 6 5 6 1] 0 32 [ 7 2 5 6 5 6 1] 0.14286 64 [ 7 2 5 6 5 6 1] 0.42857 16 [ 13 10 12 9 3 15 6 13] 0.21875 32 [ 13 10 12 9 3 15 6 13] 0.075 64 [ 13 10 12 9 3 15 6 13] 0.54167 128 [ 13 10 12 9 3 15 6 13] 0.33929 b.2) Slow FH-SS: Ý nghĩa của nhảy tần chậm: Thuật giải:Bằng cách cho chuỗi dữ liệu trượt qua cửa sổ n bit(theo hình trên n=2) và kết hợp một bit PN (như hình trên)tạo ra symbol có n+1 bit đưa vào bộ điều chế FSK M=2(n+1) .Ở đây có hai quá trình ngược nhau: 1)trượt chuỗi dữ liệu qua cửa sổ lần lượt và ghép với một bit PN.2) lấy lại các bit dữ liệu từ symbol ghép. Ví dụ minh hoạ hai quá trình không nhiễu a)quá trình 1 với số lần nhảy n=3 >> slow1 a = 1 1 0 1 0 1 0 1: CHUỖI DỮ LIỆU b = 1 0 1 1 1:CHUỖI PN n = 3 newb =TRẢI CHUỖI PN RA CÓ CHIỀU DÀI bằêng CHUỖI DỮ LIỆU 1 0 1 1 1 1 0 1 Bắt đầu trượt ghép windows = 1 1 0 a = 1 0 1 0 1 0 1 1 merge = 1 1 1 0 windows = 1 0 1 a = 0 1 0 1 0 1 1 1 merge = 0 1 0 1 windows = 0 1 0 a = 1 0 1 0 1 1 1 0 merge = 1 0 1 0 windows = 1 0 1 a = 0 1 0 1 1 1 0 1 merge = 1 1 0 1 windows = 0 1 0 a = 1 0 1 1 1 0 1 0 merge = 1 0 1 0 windows = 1 0 1 a = 0 1 1 1 0 1 0 1 merge = 1 1 0 1 windows = 0 1 1 a = 1 1 1 0 1 0 1 0 merge = Kết thúc trượt ghép 0 0 1 1 windows = 1 1 1 a = 1 1 0 1 0 1 0 1 merge = 1 1 1 1 newsignal = 14 5 10 13 10 13 len = 6 b)quá trình 2 với số lần nhảy n=3 Bắt đầu chuyển symbol thập phân thành symbol nhị phân và lấy lạibit tin a = 14 5 10 13 10 13 c = 1 1 1 0 newa = 1 1 0 0 0 0 c = 0 1 0 1 newa = 1 1 0 1 0 0 c = 1 0 1 0 newa = 1 1 0 1 0 0 c = 1 1 0 1 newa = 1 1 0 1 0 1 c = 1 0 1 0 newa = 1 1 0 1 0 1 0 c = 1 1 0 1 newa = 1 1 0 1 0 1 0 1 y = 1 1 0 1 0 1 0 1 slowfh1(g1,option1,option2,n,g2): Có 5 thông số đầu vào. g1,g2 :Đa thức tạo mã. option 1:’msequence’/’kasami’/’gold’ option 2: Bằng 0 hay một giá trị (coi thêm msequence.m) n : Số lần nhảy tần chậm ,bằng số bit vào cửa sổ trượt. Mô phỏng với các giá trị chiều dài tin tức khác nhau và các loại chuỗi PN khác nhau a)len=1000 slowfh1([ 1 0 1 1],’msequence’,3,3) BER= 0.3949; slowfh1([ 1 0 1 1],’kasami’,3,3) BER= 0.3945 slowfh1([ 1 0 1 1],’gold’,3,3,[1 1 0 1]) BER= 0.3899 b)len=5000 slowfh1([ 1 0 1 1],’msequence’,3,3) BER= 0.3838; slowfh1([ 1 0 1 1],’kasami’,3,3) BER= 0.3884 slowfh1([ 1 0 1 1],’gold’,3,3,[1 1 0 1]) BER= 0.3768 c)len=10000 slowfh1([ 1 0 1 1],’gold’,3,3,[1 1 0 1]) BER=0.3844 Một số vấn đề gặp phải khi lập trình: Matlab không ý niệm về thời gian :nhưng ở đây em không trải một bit chuỗi PN ra tương ứng với số lần nhảy tần bit PN ban đầu.Vì khi phục hồi ta chỉ quan tâm đến bit dữ liệu nên khi tín hiệu sau khi truyền bị sai có 3 khả năng: Những bit dữ liệu ghép bị phá huỷ . Bit PN ghép bị phá. Cả hai điều trên. Với chuỗi PN ở máy thu ta không thể chữa lỗi.Đây là lý do vì sao SLOW-FH yếu hơn FAST-FH trong chống nhiễu. Trong quá trinh trượt ghép chuỗi PN được trải ra rõ ràng ngay từ đầu.Do khi chuỗi dữ liệu trượt đến bit cuối cùng thì tương ứng với bit PN ở cách đó (n-1) bit ,dẫn đến chiều dài của symbol thập phân bằng chiều dài chuỗi dữ liệu nhị phân trừ (n-1) bit. Trong quá trình lấy lại bit tin,việc lấy bit bằng cách chồng bit .Nếu không có nhiễu bit đè giốâng với bit bị chồng lên(coi chương trình). Ví dụ: tín hiệu sau đưa vào trượt và lấy lại bit dữ liệu.Chú ý: Bit ghép luôn ở đầu,ở đây là bit PN. Demodsignal= 7 3 4 4 7 6 0 Cửa sổ trượt n=2 111 011 100 100 111 110 000 11 11 00 11 10 00 message=110110 Cách lấy lại bit tin Nhược điểm của FSK : đã trình bày ở FAST-FH. b.3) Đánh giá hệ thống FH-SS: Với việc giữ cùng mức nhiễu nghiêm trọng như các hệ thống DS ( chung phương trình nhiễu) hệ thống trải phổ FH đã bộc lộ điểm yếu của mình. Các kết quả mô phỏng hệ thống Fast FH-SS Nhận xét: Xác suất lỗi rất lớn so với các hệ thống DS. Nhưng còn tốt hơn Slow FH nhờ việc sửa lỗi tín hiệu thu được dựa vào tính đồng nhất của tín hiệu trải phổ (coi lại phần trình bày fast FH). Các kết quả mô phỏng hệ slow hopping SS Nhận xét :Slow FH tệ nhất trong các hệ thống trải phổ đã mô phỏng với cùng mức nhiễu cao, nghiêm trọng. c) Đánh giá chung các hệ thống. Qua việc mô phỏng các hệ thống trải phổ, ta rút ra kết luận các hệ thống trải phổ trực tiếp có khả năng chống nhiễu rất tốt. Đây chính là nguyên nhân vì sao các hệ thống trải phổ hiện đại trong các hệ thống 3G là dùng trải phổ trực tiếp. Ở đây, ta chỉ trải phổ với các hệ thống DS-QPSK,DS-CDMA2000 với trải phổ trực tiếp đơn giản so với hệ thống thực tế. Hệ thống trải phổ trực tiếp này có mô hình trải phổ như sau: d)Time hopping SS: Ý tưởng và vướng mắc trong lập trình Matlab Khung(frame) Tf Khe(slot) Ts 1 khung có J khe k bit phát trong một khe Ta có mối quan hệ về mặt thời gian Tf=JTs Ts=kTo => Tf=JkTo To: thời gian phát 1 bit dữ liệu =k T Ở đây T là thời gian truyền một bit khi không đưa vào TH-SS.Do đó khi mô phỏng,cho độ rộng bit thực ,J,k ta phải bảo đảm quan hệ trên. Do Matlab không ý niệm về mặt thời gian nên không thực hiện mô phỏng. Mô phỏng hệ thống nhiều người sử dung: Giới hạn vấn đề: Để đơn giản vấn đề ,ở đây em không dùng điều chế và giải điều chế . Khi có điều chế ,lỗi sai rất nhiều nên làm việc đánh giá khó chính xác. Mục đích của chương trình là khảo sát của hệ thống trải phổ có nhiều người sử dụng : tác dụng của kênh truyền(bao gồm nhiễu trắng,mức xén công suất ,multipath),lên chất lượng đối với hai loại kênh lên và kênh xuống. a)Các hàm công cụ: Walsh.m: Đã trình bày ở phần chuỗi PN Zerohold(X,N): Trải dữ liệu X ra N bit.Ở đây X là vectơ hay ma trận. Ví dụ: >> zerohold([ 1 0],3) ans = 1 1 1 0 0 0 >> z=zerohold([ 1 0 1 1],-2) z = 1 0 1 1 >> z=zerohold([ 1 0 1 1],0) z = 1 0 1 1 >> a=[ 1 2 3; 3 4 6] a = 1 2 3 3 4 6 >> zerohold(a,2) ans = 1 1 2 2 3 3 3 3 4 4 6 6 >> zerohold(a,-22) ans = 1 2 3 3 4 6 >> zerohold(a,1) ans = 1 2 3 3 4 6 >> zerohold(a,0) ans = 1 2 3 3 4 6 Subsamp(X,N): Nén tín hiệu đã trải trở lại tín hiệu ban đầu.Ở đây X là vectơ hay ma trận. Nếu chiều dài của X lớn hơn N thì nén lại X có chiều dài bằng bội của N theo trị trung bình. Nếu chiều dài X không là bội số của N thì giữ nguyên. Nếu X là ma trận thì từng hàng bị nén lại theo quy luâït trên. Ví dụ: >> z=zerohold([ 1 0 1 1],3) z = 1 1 1 0 0 0 1 1 1 1 1 1 >> b=subsamp(z,3) b = 1 0 1 1 >> b=subsamp(z,6) b = 0.5000 1.0000 >> b=subsamp(z,4) b = 0.7500 0.5000 1.0000 >> subsamp([ 1 1 0 0; 0 0 1 1],3) ans = 0.6667 0.3333 >> subsamp([ 1 1 0 0; 0 0 1 1],2) ans = 1 0 0 1 phatdata(SoHang,SoCot): Phát dữ liệu ±1 ngẫu nhiên. Ví dụ: >> phatdata(2,3) ans = 1 1 1 1 1 -1 >> phatdata(3,2) ans = 1 -1 1 -1 -1 -1 truyendata(data,SoUserMax,numberuser,link):Tạo tín hiệu spreading đưa vào bộ điều chế bằng cách nhân tín hiệu dữ liệu với chuỗi Walsh(link=0: forward link) hay long code(chuỗi PN) (link=1:reverse link). Dữ liệu dạng ± 1. SoUserMax: làm tròn đến mũ của 2 kế tiếp . Numberuser:số thứ tự người sử dụng. link =0: Mô phỏng forward link dùng mã Walsh. link =1: Mô phỏng reverse link dùng chuỗi PN. Ví dụ: a)forward link có 8 người sử dụng tối đa(làm tròn 5 đến 8), người thứ 3 đang sử dụng. >> truyendata([ 1 -1 1],5,3,0) W = :CHUỖI WALSH NGƯỜI ĐÓ DÙNG. 1 1 -1 -1 1 1 -1 -1 ans = : SPREADINGSIGNAL Columns 1 through 18 1 1 -1 -1 1 1 -1 -1 -1 -1 1 1 -1 -1 1 1 1 1 Columns 19 through 24 -1 -1 1 1 -1 -1 b) reverse link có 8 người sử dụng tối đa(làm tròn 5 đến 8), người thứ 3 đang sử dụng. >> truyendata([ 1 -1 1],5,3,1) signal = :trải tín hiệu ra theo chuỗi PN bằng cách trải 1bit ra 8 bit (=SoUserMax) Columns 1 through 18 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 Columns 19 through 24 1 1 1 1 1 1 longcode = Columns 1 through 18 1 1 1 1 1 1 1 -1 -1 -1 -1 1 -1 1 -1 1 1 1 Columns 19 through 24 1 -1 1 -1 1 -1 spreadingsignal = Columns 1 through 18 1 1 1 1 1 1 1 -1 1 1 1 -1 1 -1 1 -1 1 1 Columns 19 through 24 1 -1 1 -1 1 -1 ans = Columns 1 through 18 1 1 1 1 1 1 1 -1 1 1 1 -1 1 -1 1 -1 1 1 Columns 19 through 24 1 -1 1 -1 1 -1 Điểm đáng chú ý trong chương trình:Cách phát chuỗi PN ở reverse link như thế nào? Ở đây,do số người sử dụng đồâng thời lớn hơn 1 nên không thể dùng chương trình có sẵn pnsequence.m Ở đây ta dùng lệnh rand để tạo ma trận có những thành phần được tạo cách ngẫu nhiên thuộc khoảng 0 đến 1 bằng cách dùng những lệnh nhớ trạng thái bộ phát như rand(‘seed’):trả lại trạng thái hiên tại của bộ phát PN. rand(‘seed’,J):reset trạng thái bộ nhớ đến trạng thái thứ J (J là số nguyên dương) Cụ thể: Sau khi phát tín hiệu bằng cách chạy phatdata và trải tín hiệu bằng zerohold .Trong truyendata.m Ta dùng lệnh seed=rand(‘seed’)àtrả lại trạng thái hiện tại của bộ phát PN. Sau đó dùng lệnh rand(‘seed’,J)àchuyển trạng thái bộ phát PN đến trạng thái thứ J,ở đây J=numberuser*1321,giá trị 1321 là tuỳ ý.Tạo tín hiệu PN tại trạng thái này. Tiếp đến dùng lệnh chuyển về trạng thái ban đầu để chuẩn bị thu. rand(‘seed’,seed). Trong thudata.m làm tương tự. channel(TimeSignal,clipcompress,SNR,Multipath) :Aùp dụng 1 chế độ kênh truyền đối với dạng sóng ,bao gồm nhiễu,xén biên độ ra,multipath. Mô hình này mô phỏng một số ảnh hưởng của kênh radio theo thứ tự sau: Clipping : Hiệu ứng từ bộ khuếch đại công suất ra . Noise : Nhiễu nhiệt đối với kênh. Multipath :Aûnh hưởng tại máy thu. Có bốn thông số đầu vào: Timesignal: Dạng sóng theo thời gian áp dụng đối với kênh (trong chương trình chính simcdma2 tự tạo) Clipcompress:Ngưỡng xén đối với tín hiệu,đơn vị dB.Cách tính như sau: biên độ đỉnh của tín hiệu ban đầu chia cho biên độ của tín hiệu sau khi xén Nếu không xén : Chọn clipcompress=0 SNR: SNR của tín hiệu phát,đơn vị dB.Cách tính như sau: Công suất của tín hiệu ban đầu chia cho công suất của nhiễu thêm vào. Nếu không nhiễu :Chọn SNR≥300 dB Multipath:Đây là một vectơ của biên độ và delay của mỗi sóng phản xạ. Đây là một vectơ hệ số của mô hình multipath có mạch lọc FIR.Hệ số đầu tiên phải bằng 1 nếu là sóng trực tiếp. Ví dụ: Đối với sự phản xạ tại những lần lấy mẫu 5 và 7 có biên độ bằng 50% và 30% so với sóng trực tiếp. Nếu không có multipath :Chọn ‘multipath’=[ ] Chương trinh có ba phần: Xén tín hiệu: Kiểm tra biên độ của tín hiệu ban đầu và mức ngưỡng có khác nhau không? Nếu sai : không làm gì cả.Nếu đúng ,tính mức ngưỡng từ clipcompress (dB),tiếp đến tìm vị trí ở đó lớn hơn giá trị ngưỡng và thay thế bằng giá trị ngưỡng dương âm tương ứng. Thêm nhiễu: kiểm tra có nhiễu hay không? Nếu sai(không nhiễu):không làm gì cả. Nếu đúng,cộng nhiễu vào tín hiệu từ SNR (dB). Thêm multipath: kiểm tra có tia phản xạ? Nếu không có tia phản xạ thì không làm gì cả. Nếu có dùng hàm filter với tử=multipath,mau=1 để làm trể tín hiệu. Giải thích: Tổng quát ,phép biến đổi Z của đầu ra mạch lọc số y(n) quan hệ với phép biến đổi Z của đầu vào x(n) như sau: Ở đây H(z) là hàm truyền của mạch lọc.Biến đổi ngược lại ta có phương trình sai phân của nó có dang sau,giả thiết a1=1. hàm filter biểu diễn quan hệ này . FILTER(B,A,X) : B là tử,A là mẫu,X là input. thudata(signal,SoUserMax,numberuser,link): Khôi phục tín hiệu đã trải phổ.(ngược truyendata.m) Ví dụ: a) forward link: >> a=truyendata([1 -1 1],5,3,0) a = Columns 1 through 18 1 1 -1 -1 1 1 -1 -1 -1 -1 1 1 -1 -1 1 1 1 1 Columns 19 through 24 -1 -1 1 1 -1 -1 >> thudata(a,5,3,0) ans = 1 -1 1 b)reverse link >> a1=truyendata([1 -1 1],5,3,1) a1 = Columns 1 through 18 1 1 1 1 1 1 1 -1 1 1 1 -1 1 -1 1 -1 1 1 Columns 19 through 24 1 -1 1 -1 1 -1 >> thudata(a1,5,3,1) ans = 1 -1 1 calerr(dataTx,dataRx,subsignal):tính BER,lỗi biên độ hiệu dụng và số lỗi đối với của mỗi người sự dụng. Có ba thông số đầu ra là: ketqua= calerr(dataTx,dataRx,subsignal) ketqua=[BER,AmpErr,NumErr] b)Hàm chính- simcdma2.m Zerohold.m Walsh.m Phatdata.m Subsamp.m Truyendata.m Channel.m Calerr.m Thudata.m Simcdama2.m Sơ đồ cây của simcdma2.m simcdma2(SoUserMax,Number,link,clipcompress,SNR,multi):Trả về BER,lỗi biên độ hiệu dụng và số lỗi của toàn hệ thống. Có 6 thông số đầu vào và không xuất đầu ra: SoUserMax: làm tròn đến mũ của 2 kế tiếp. (là số người sử dụng đồng thời hệ thống) Number: số người sử dụng hiện tại. Link=0 :forward link dùng mã Walsh. link≠0 : reverse link dùng long code (chuỗi PN) clipcompress: Ngưỡng xén đối với tín hiệu,đơn vị dB. SNR : tỉ số tín hiệu trên nhiễu,đơn vị dB. Multi: nhiễu đa đường(hệ số đầu phải bằng 1 nếu là sóng trực tiếp) Ba thông số cuối coi thêm channel.m Chú ý: Ba thông số đầu bắt buộc phải có. Ví dụ: >> simcdma2(5,3) ??? Error using ==> simcdma2 DE NGHI NHAP LAI >> simcdma2(5,3,0) clipcompress = 0 SNR = 300 multi = [] BER = 0 ketqua = 0 0 0 >> simcdma2(5,3,0,1) clipcompress = 1 SNR = 300 multi = [] BER = 0 ketqua = 0 0 0 >> simcdma2(5,3,0,1,200) clipcompress = 1 SNR = 200 multi = [] BER = 0 ketqua = 0 0 0 >> simcdma2(5,3,0,1,200,[1 0 .3 0 .4]) clipcompress = 1 SNR = 200 multi = 1.0000 0 0.3000 0 0.4000 BER = 0 ketqua = 0 0 0 c)Đánh giá hệ thống khi kênh truyền thay đổi:Ở đây chỉ xét riêng rẽ từng ảnh hưởng. c.1)Số người sử dụng hệ thống trong một cell: Đối với forward link trong một cell khi kênh truyền không có nhiễu thì không xuất hiện nhiễu giao thoa dù cho số người sử dung tối đa. Trên Reverse Link trong một cell, mặc dù không có nhiễu kênh truyền nhưng đã xuất hiện lỗi. Khi số người sử dụng đồng thời tăng thì BER tăng theo do dùng chuỗi PN không trực giao. Qua đây ta thấy ưu điểm của chuỗi Walsh. c.2)Xén ngưỡng (các đồ thị dưới đã trình bày trong giao diện nhưng do khi đưa vào LVTN thì quá nhỏ nên chỉ tượng trưng 1 hình trong giao diện) Đối với reverse link, BER ngay từ đầu đã có giá trị lớn do nhiễu giao thoa của những người cùng sử dụng. Việc xén biên độ tín hiệu ảnh hưởng rất ít đến reverse link. Bởi vì nhiễu do xén tín hiệu không đáng kể so với nhiễu giao thoa do những người xung quanh. Việc xén biên độ tín hiệu đối với reverse link chỉ gây ra méo dạng ở trạm gốc máy thu, ở đó tất cả những tín hiệu được kết hợp lại. Kết quả mô phỏng cho forward link là hoàn toàn khác với reverse link. BER thấp khi mức xén nhỏ hơn 10dB (bằng 0) do tính chất trực giao của mã Walsh.Khi mức xén tăng từ 10 dB trở lên thì BER cũng tăng theo. c.3)Nhiễu Gauss Đối với Forward link có nhiễu Gauss,khi số người sử dụng đồng thời hệ thống thấp thì gía trị BER ban đầu cũng thấp dẫn đến khi tín hiệu mạnh lên(ĩSNR tăng) thì BER của nó giảm rất nhanh về giá trị 0 biểu diễn qua hai đồ thị trên :đường 10 Users thấp nhất trở về giá trị 0 nhanh nhất,cao nhất là đường 30 Users trở về giá trị 0 chậm nhất. đối với kênh reverse link có nhiễu Gausss, số người tăng thì nhiễu tăng được biểu diễn rõ ở SNR=0 dB. Khi tín hiệu càng lớn so với nhiễu (SNR tăng) thì BER giảm nhưng ảnh hưởng của số người sử dụng vẫn có ảnh hưởng lớn với BER qua biểu hiện đường 30 User ở trên đường 20 User và đường 10 User nằm cuối cùng. c.4)Nhiễu đa đường: Đối với forward link khi có nhiễu đa đường có khả năng chống nhiễu tốt hơn reverse link khi có nhiễu đa đường tương tự nhờ tính trực giao của mã Walsh biễu diễn ở hai đồ thị ở trên cùng với sóng phản xạ tại lần lấy mẫu thứ 1 (ví dụ: simcdma2(56,15,1,0,300,[1 .1]). Ở đồ thị đầu tiên (forward link),nhiễu bắt đầu ảnh hưởng từ giá trị 0.6 trong khi đồ thị dưới ảnh hưởng từ 0.1. Ở hai đồ thị dưới cùng biểu diễn cách tổng quát những tín hiệu trể nhiều hơn một chip so với tín hiệu nguyên thuỷ ban đầu .Tổng những tín hiệu này cùng tín hiệu nguyên thuỷ gây ra nhiễu ở máy thu ,dẫn đến nhiễu giao thoa tăng và BER tăng.Hai đồ thị cuối cùng giả thiết hệ số phản xạ là (ĩ yếu hơn 3dB). Đối với reverse link, BER đặc biệt phẳng khi trể lớn hơn nhiều so với 1 chip ,khi sóng phản xạ trở nên không tương quan.Do ở reverse link chịu ảnh hưởng rõ rệt của số người sử dụng đồng thới nên đường 30 USER nằm cách biệt lớn đường 10 USER. Đối với forward link,cũng chịu ảnh hưởng như trên nhưng do kênh ít chịu ảnh hưởng của số người sử dụng đồng thời nên không có cách biệt rõ nét như reverse link. Hướng phát triển đề tài : Do thời gian hạn hẹp của luận văn nên có nhiều vấn đề đi sâu vào vấn đề trải phổ đã được bỏ qua .Hi vọng em sẽ có điều kiện nghiên cứu phát triển tiếp: Mô phỏng trải phổ phức của các hệ thống 3G . Mô phỏng các kênh truyền thực của IS-95,CDMA 2000, Đi vào multi-carrier CDMA,OFDM để xử lý ảnh trên mạng điên thoại di động dùng giải thuật FFT Kết luận: Trong thời gian ngắn làm luận văn tốt nghiệp,việc thực hiện mô phỏng các hệ thống trải phổ dựa trên các mô hình máy phát và máy thu sao cho có tính hợp lý với thực tế phần cứng không tránh khỏi có những suy nghĩ chưa chín chắn,sâu sắc cũng như thực hiện lập trình chưa hay ,chuẩn xác nên mong quý thầy cô lượng thứ và các khoá kế tiếp khắc phục ,làm hay hơn từ nền này. Vài điều muốn nói cuối cùng: Trong luận văn ,em thực hiện mô phỏng chuổi M mà không dùng hoàn toàn lệnh của Matlab cũng để hiểu thêm về cấu trúc bộ thanh ghi dịch .Có thể dài dòng ,xin thông cảm. Mô phỏng nhảy tần dù đã chạy ,như kết quả chưa thoả đáng, có thể dẫn em đến kết luận chưa chính xác về nó. Điều này làm em rất tiếc không có thêm thời gian để nghĩ thêm.

Các file đính kèm theo tài liệu này:

  • docMPHONG.doc
  • docbia.LVTN.doc
  • pptky thuat trai pho.ppt
  • rtfloicamon.rtf
  • docMCLC~1.DOC
  • docNHAXET.doc
  • docTRAIPH~2.DOC