Nghiên cứu và thực hiện khử nhiễu tín hiệu âm thanh trên TM S320C6711 DSK sử dụng bộ DSP TMS320C6711 của hãng Texas Instruments

Mở đầu Chúng ta cần trao đổi các thông tin mang tính chính xác của sự vật, hiện tượng, mặt khác chúng ta cũng mong muốn tiếp nhận các tín hiệu mà mỗi nguời cần quan tâm riêng nhưng không làm mất đi tính trung thực của nguồn gốc thông tin, và cũng có khi chúng ta cần những thông tin mà không có thật trong thực tế vì mục đích riêng nào đó,.v.v.; như vậy để đáp ứng các nhu cầu đó thì con người ngày đêm không ngừng tạo ra các sản phẩm thoả mãn nhu cầu của con người.Trong các hướng đi và các cách giải quyết khác nhau cho các vấn đề nêu trên, thì lĩnh vực xử lý tín hiệu số( DSP) mỗi ngày càng phát triển mạnh mẽ và vững vàng. Lý do của sự thành công đó là nhờ sự phát triển phần cứng chi phí thấp, áp dụng các phần mềm đơn giản, linh hoạt nhưng không thiếu đi sự mạnh mẽ về hiệu quả thi hành. Và thực tế ngày nay, DSP đã được áp dụng rộng rãi trong hầu hết tất cả các ngành. Sống trong thế giới hiện đại như ngày nay, chúng ta tiếp xúc với biết bao loại tín hiệu và dưới nhiều dạng khác nhau. Có các tín hiệu rất cần thiết như âm thanh, hình ảnh hay các tín hiệu giải trí như âm nhạc .v.v.Và bên cạnh cũng luôn tồn tại các tín hiệu khó chịu hoặc không cần thiết trong hoàn cảnh riêng nào đó, mà ta gọi đó là nhiễu. Xử lý tín hiệu là trích lấy, tăng cường, lưu trữ và truyền thông tin có ích mà con người cần quan tâm trong vô vàn thông tin có ích cũng như vô ích. Sự phân biệt giữa thông tin có ích và vô ích là phụ thuộc vào ý thức chủ quan của mỗi người. Nếu tín hiệu ta không quan tâm thì đó là tín hiệu vô ích và ta có thể xem là nhiễu. Xuất phát từ lẽ đó, đồ án này sẽ đi nghiên cứu và thực hiện khử nhiễu tín hiệu âm thanh trên TMS320C6711 DSK sử dụng bộ DSP TMS320C6711 của hãng Texas Instruments. Hầu hết các bộ DSP được sử dụng nằm trong hai mục đích chính là: phân tích tín hiệu và lọc tín hiệu. Phân tích tín hiệu: liên quan đến việc đo các đặc tính của tín hiệu, thường thao tác ở trong miền tần số. Nó có một số ứng dụng như sau: Phân tích phổ( tần số và/hoặc pha) Nhận dạng tiếng nói Xác nhận người nói Dò tìm mục tiêu Lọc tín hiệu: là công việc với nét đặc trưng có tín hiệu vào và tín hiệu ra. Các hệ thống thực hiện các nhiệm vụ này thường được gọi là các bộ lọc. Nó có một số ứng dụng như sau: Khử tạp âm nền Khử giao thoa nhiễu Tách rời các dãi tần Định dạng phổ tần tín hiệu Khôi phục tín hiệu bị nhiễu và giảm cấp Cân bằng kênh Đồ án này chú trọng vào việc khử nhiễu trong tín hiệu thoại mà cốt lõi của vấn đề này là nghiên cứu về bộ lọc số kiểu thích nghi; xem hiệu quả hoạt động của nó về khử nhiễu ngẫu nhiên như thế nào. Bộ lọc này liên tục thay đổi hệ số lọc theo một thuật toán định trước để ước lượng hàm truyền của nhiễu. Sự ước lượng càng chính xác thì quá trình khử nhiễu của bộ lọc càng đạt hiệu quả cao. Đồ án này gồm có năm chương, chương một nêu tổng quan về lọc số; chương hai nghiên cứu lý thuyết về bộ lọc thích nghi; ở chương ba, chúng ta sẽ đi nghiên cứu về khử nhiễu bằng bộ lọc thích nghi dựa trên các lý thuyết đã nêu rất rõ ở các chương trên; chương bốn, chúng ta sẽ tìm hiểu về phần cứng dùng để chạy chương trình thời gian thực về khử nhiễu kiểu thích nghi, đó là board TMS320C6711 DSK của hãng TI; và cuối cùng là chương năm sẽ là chương trình thực thi khử nhiễu kiểu thích nghi trên TMS320C6711 DSK. Để hiểu rõ hơn chúng ta xem xét cụ thể từng phần sau trong đồ án này. MỤC LỤC DANH MỤC TỪ VIẾT TẮT 1 CHƯƠNG 1:TỔNG QUAN VỀ LỌC SỐ 5 1.1.MỞ ĐẦU: 5 1.2.GIỚI THIỆU VỀ LỌC SỐ: [14] 7 1.3.CÁC THÔNG SỐ CỦA HỆ THỐNG Ở MIỀN THỜI GIAN: [14] 8 1.3.1.Tốc độ chuyển đổi hay thời gian lên( Risetime): 8 1.3.2.Gợn sóng nhô( Overshoot) trong đáp ứng bậc thang: 9 1.3.3.Pha tuyến tính: 9 1.4.CÁC THÔNG SỐ CỦA HỆ THỐNG Ở MIỀN TẦN SỐ: [14] 10 1.5.CÁC BỘ LỌC THÔNG THẤP, THÔNG CAO, THÔNG DẢI, VÀ CHẮN DẢI: [4] & [14] 11 1.6.CẤU TRÚC CĂN BẢN CỦA CÁC BỘ LỌC SỐ: [2] & [3] & [4] & [5] 15 1.6.1.Bộ lọc FIR: 16 1.6.1.1.Phép biến đổi Z( Z-Transform): 16 1.6.1.2.Các bộ lọc FIR: 18 1.6.1.3.Cấu trúc hàng rào( Lattice) FIR: 19 1.6.1.4.Các bộ lọc FIR có pha tuyến tính sử dụng các cửa sổ( Window): 20 1.6.2.Bộ lọc IIR: 21 1.6.2.1.Cấu trúc bộ lọc IIR dạng trực tiếp I: 23 1.6.2.2.Cấu trúc bộ lọc IIR dạng trực tiếp II: 23 1.7.KẾT LUẬN: 24 CHƯƠNG 2:CÁC BỘ LỌC THÍCH NGHI 25 2.1.MỞ ĐẦU: 25 2.2.MỘT SỐ KHÁI NIỆM CƠ BẢN: 25 2.2.1.Biến ngẫu nhiên: 25 2.2.2.Quá trình ngẫu nhiên: 25 2.2.3.Đặc tính từng phần của quá trình ngẫu nhiên rời rạc theo thời gian: 26 2.2.4.Tương quan của các tín hiệu: 26 2.3.GIỚI THIỆU LỌC THÍCH NGHI: [9] & [10] 27 2.4.CÁC CẤU TRÚC THÍCH NGHI: [9] & [10] 28 2.4.1.Khử nhiễu: 28 2.4.2.Nhận dạng hệ thống: 28 2.4.3.Bộ dự đoán thích nghi: 29 2.5.CÁC BỘ LỌC WIENER: [2] & [9] & [10] 29 2.5.1.Giới thiệu: 29 2.5.2.Bộ lọc FIR Wiener: 32 2.5.3.Các thuật toán lọc thích nghi: 35 2.5.3.1.Giới thiệu: 35 2.5.3.2.Thuật toán LMS: 37 2.5.3.3.Thuật toán RLS: 40 2.5.3.4.Thuật toán NLMS: [7] 43 2.5.3.4.1.Giới thiệu: 43 2.5.3.4.2.Số bước khác nhau APA: 44 2.5.3.4.3.Kết quả sự mô phỏng: 48 2.6.KẾT LUẬN: 48 CHƯƠNG 3:KHỬ NHIỄU KIỂU THÍCH NGHI. 49 3.1.MỞ ĐẦU: 49 3.2.LÝ THUYẾT KHỬ NHIỄU KIỂU THÍCH NGHI: [5] 49 3.2.1.Các chế độ khử nhiễu kiểu thích nghi: 49 3.2.2.Các kiểu lọc của khử nhiễu thích nghi: 51 3.2.3.Các thuật toán cập nhật cho các bộ lọc: 51 3.3.KẾT LUẬN: 54 CHƯƠNG 4:CẤU TRÚC TMS320C6711 DSK 55 4.1.MỞ ĐẦU: 55 4.2.TMS320C6711 DSK: [5] & [18] & [19] 55 4.2.1. Giới thiệu bộ xử lý TMS320C6711: 56 4.2.1.1.Giới thiệu chung: 56 4.2.1.2.Sơ đồ khối chức năng TMS320C6711: 58 4.2.1.2.1.CPU: 59 4.2.1.2.2.Bản đồ bộ nhớ: 60 4.2.1.2.3.Các đường truyền dữ liệu: 61 4.2.1.2.4.Đường ống( Pipeline): 63 4.2.1.2.5.Ngắt( Interrupt): 64 4.2.1.3.Các cổng đệm nối tiếp đa kênh( McBSP): 65 4.2.2.TLC320AD535: [17] 67 4.2.2.1. Giới thiệu: 67 4.2.2.2.Các đặc tính của AD535: 67 4.2.2.3.Sơ đồ khối chức năng: 68 4.3.KẾT LUẬN: 68 CHƯƠNG 5:THỰC HIỆN BỘ LỌC THÍCH NGHI ĐỂ KHỬ NHIỄU TRÊN TMS320C6711 DSK 69 5.1.MỞ ĐẦU: 69 5.2.TỔ CHỨC CHƯƠNG TRÌNH VÀ CÁC LƯU ĐỒ THUẬT TOÁN CỦA CHƯƠNG TRÌNH KHỬ NHIỄU KIỂU THÍCH NGHI: 69 5.2.1.Tổ chức chương trình: 69 Chương trình khử nhiễu kiểu thích nghi được tổ chức theo sơ đồ sau: 69 5.2.2.Các lưu đồ thuật toán: 70 5.3.KẾT LUẬN: 74 Kãút luáûn vaì hæåïng phaït triãøn âãö taìi 75 TÀI LIỆU THAM KHẢO 77 PHỤ LỤC 79 1.CÁC THANH GHI CỦA BỘ XỬ LÝ TMS320C6711: 79 2.CHƯƠNG TRÌNH KHỬ NHIỄU KIỂU THÍCH NGHI: 80 2.1.Chương trình chính: khunhieuthichnghi.c 80 2.2.Chương trình thư viện tạo chuỗi nhiễu: Tao_nhieu.h 83 2.3.Chương trình tạo hệ số chuỗi nhiễu bằng Matlab: taoheso.m 83 2.4.Chương trình khởi tạo ngắt DSK: C6xdskinit.c 84 3.CHƯƠNG TRÌNH KHỬ NHIỄU KIỂU FIR BÌNH THƯỜNG: khunhieuFIR.c 88

doc94 trang | Chia sẻ: lvcdongnoi | Ngày: 24/04/2013 | Lượt xem: 1982 | Lượt tải: 6download
Bạn đang xem nội dung tài liệu Nghiên cứu và thực hiện khử nhiễu tín hiệu âm thanh trên TM S320C6711 DSK sử dụng bộ DSP TMS320C6711 của hãng Texas Instruments, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
n bộ lọc. Thay vì lấy dạng sóng yêu cầu làm mẫu, như trong các thuật toán LMS hay RLS, đặc tính này được dùng trong quá trình thích nghi của bộ lọc. Khi có được tín hiệu yêu cầu, quy ước tiến gần như LMS có thể được sử dụng, còn nếu không thì dùng kiến thức biết trước về tín hiệu. 2.5.3.3.Thuật toán RLS: Nếu thuật toán LMS trình bày là đơn giản nhất và dễ ứng dụng nhất cho các thuật toán thích nghi, thì thuật toán RLS được trình bày sẽ làm tăng thêm sự phức tạp, số lượng phép toán, và độ tin cậy. Trong hoạt động, RLS tiến đến gần bộ lọc Kalman trong các ứng dụng lọc thích nghi, ở mức độ nào đó làm giảm bớt sự phụ thuộc các số lượng đưa vào bộ xử lý. So với thuật toán LMS, thì RLS tiến đến gần sự đưa ra độ hội tụ nhanh hơn và lỗi ít hơn, với đặc biệt nói về hệ thống chưa biết, sẽ phí tổn cho nhiều sự tính toán hơn. Trong sự tương quan với thuật toán LMS, từ cái mà nó có thể được chuyển hóa, thuật toán RLS tối thiểu lỗi xếp đặt hoàn toàn giữa tín hiệu mong muốn và ngỏ ra từ hệ thống chưa biết. Trong sự giới hạn, chúng ta có thể sử dụng bất kỳ thuật toán thích nghi nào để làm sáng tỏ một vấn đề bộ lọc thích nghi bằng cách thay thế phần thích nghi của ứng dụng với một thuật toán mới. Khi thuật toán LMS tìm lỗi để tối thiểu hóa, nó chỉ nghĩ đến giá trị lỗi hiện thời, còn trong phương pháp RLS, lỗi được xem là lỗi toàn cục từ lúc bắt đầu đến điểm dữ liệu hiện thời. Nói cách khác, thuật toán RLS có bộ nhớ vô hạn- tất cả các lỗi dữ liệu là được đưa ra cân nhắc trong lỗi toàn cục. Trong các kiểu mà lỗi có thể đến từ một điểm hay nhiều điểm dữ liệu đầu vào không xác thực. Để thực hiện bộ lọc FIR Wiener, phải nhận được vector tự tương quan, yy và vector tương quan chéo, yx từ các mẫu tín hiệu. Bộ lọc Wiener được thực hiện bằng cách tối thiểu hóa hàm giá MSE, , được xác định lại bằng toán tử E[.] của phương trình(2.16). Tuy nhiên trong thực tế ít khi đạt được các đại lượng trung bình thống kê như yy và yx . Mà thường chỉ có sẵn các phần nhỏ của chính các chuỗi dữ liệu. Một phương pháp xác định đáp ứng xung của một bộ lọc thích nghi là chọn các hệ số để tối thiểu hóa một hàm giá là tổng của bình phương sai số: (x(k) – x(k))2 (2.40) Khi hàm giá này được tối thiểu hóa đối với vector đáp ứng xung, h(n), kết hợp với vector ước lượng phỏng định( xấp xỉ), x(n), ta được một phỏng định bình phương bé nhất. Vector đáp ứng xung h(n), tối thiểu hóa hàm giá là tổng của bình phương sai số, bây giờ sẽ là một hàm của các mẫu dữ liệu có được chứ không phải là các trung bình thống kê. Trong khi đó, có thể tìm ra một biểu thức cho h(n) bằng phương pháp tương tự như đã dùng để tìm ra bộ lọc Wiener, một cách tiếp cận linh hoạt hơn là để ý thấy hai bài toán tối ưu hóa giống nhau và tìm được nghiệm bằng suy diễn tương tự. Vì hàm giá là tổng của bình phương sai số, phương trình(2.40) nhận được từ hàm giá MSE bằng cách thay kỳ vọng bằng phép tổng, nên vector đáp ứng xung h(n) có thể nhận được từ phương trình(2.18) bằng cách thay kỳ vọng bằng tổng. Như vậy: Ryy(n)h(n) = ryx(n) (2.41) Trong đó: Ryy(n) = y(k)yT(k) (2.42) Và: ryx(n) = y(k)x(k) (2.43) Trong nhiều ứng dụng của bộ lọc thích nghi, đáp ứng xung phải sửa đổi hoặc cập nhật khi xuất hiện các mẫu dữ liệu mới. Phương pháp trực tiếp nhất để đáp ứng yêu cầu này là nới rộng thêm các giới hạn trên của các tổng của các phương trình(2.40), (2.42) và (2.43), và giải toàn bộ phương trình(2.41). Tuy nhiên, một phương pháp có hiệu quả về mặt tính toán hơn để đạt được một biểu thức đệ quy theo thời gian cho h(n) theo nghiệm cực tiểu bình phương h(n-1) trước đó và dữ liệu mới, y(n) và x(n). Bước thứ nhất là lấy cho được các biểu thức đệ quy cho Ryy(n) và ryx(n): Ryy(n) = Ryy(n-1) + y(n)yT(n) (2.44) ryx(n) = ryx(n-1) + y(n)x(n) (2.45) Thay ryx trong phương trình(2.45) dùng phương trình (2.41): Ryy(n)h(n) = Ryy(n-1)h(n-1) + y(n)x(n) Sau đó dùng phương trình(2.40) để thay thế Ryy(n-1): Ryy(n)h(n) = | Ryy(n) + y(n)yT(n)| h(n-1) + y(n)x(n) Nhân hai vế với R-1yy(n), ta được: h(n) = h(n-1) + R-1yy(n) y(n)e(n) (2.46) Mà e(n) = x(n) – x(n) = x(n) - hT(n-1) y(n) (2.47) Có thể suy ra một phương trình đệ quy cho R-1yy(n) áp dụng hằng đẳng thức Sherman-Morrison vào phương trình(2.44): R-1yy(n), = R-1yy(n-1) - (2.48) Tập hợp ba phương trình(2.46), (2.47) và(2.48) được gọi là thuật toán bình quân bé nhất đệ quy( RLS). 2.5.3.4.Thuật toán NLMS: [7] 2.5.3.4.1.Giới thiệu: Dữ liệu đầu vào bị bóp méo có khuynh hướng là hư hỏng độ hội tụ của sự thực hiện các bộ lọc số thích nghi kiểu LMS. Để khắc phục nhược điểm này, Ozeki và Umeda đã đề nghị một thuật toán APA, dựa trên các hình chiếu không gian phụ có quan hệ với nhau. Thuật toán NLMS nổi bật ở sự cập nhật vector các hệ số chỉ dựa trên vector ngỏ vào hiện thời; APA cập nhật vector hệ số dựa trên K vector đầu vào. Trong cả hai kiểu NLMS và APA, số bước khống chế tốc độ của độ hội tụ và trạng thái ổn định vượt qua mức lỗi bình phương trung bình, MSE. Để thấy sự đối lập thủ tục của độ hội tụ nhanh và sự điều chỉnh không chính xác chậm, thì số bước hội tụ cần được điều khiển. Trong chuẩn LMS, các sự kết hợp khác nhau cho sự điều khiển số bước đã được đề xuất. Sự hoạt động của các quá trình phối hợp này đã được xác định bởi mức độ chính xác. Chúng có thể ước lượng đến chừng nào mà hoạt động của bộ lọc được tối ưu hoá. Các tiêu chuẩn khác nhau đã được đề xuất cho mục đính này. Kwong và Johnston dùng các lỗi xãy ra tức thời bình phương. Để cải thiện sự miễn nhiễu dưới tác dụng của nhiễu Gaussion; Aboulnasr và Mayyas dùng sự tự tương quan bình phương của các lỗi của các thời điểm kế liền. Và Pazaitis với Constantinides đã kế thừa tích chập bậc bốn của lỗi xảy ra tức thời. Số bước tối ưu hoá cho thuật toán NLMS là thu được từ việc tối thiểu nguồn gốc bình phương trung bình ở mỗi sự lặp lại. Tiêu chuẩn này hoạt đông rất hiệu quả cho LMS, không ứng dụng trực tiếp cho APA. Bởi vì lỗi xảy ra tức thời của APA là một vector không phải là một số lượng vô hướng như trong LMS. Trong phần này chúng ta sẽ đề xuất một tiêu chuẩn mà cung cấp một sự đo lường của trạng thái bộ lọc thích nghi.v.v.nó cho biết cách đóng bộ lọc thích nghi để cho hoạt động được tối ưu hoá. Sử dụng tiêu chuẩn này, chúng ta trình bày một số bước có thể khác nhau APA, mà có tốc độ hội tụ nhanh hơn và sự điều chỉnh lỗi sai ít hơn các sự kết hợp thực thi. Chúng ta cũng sẽ trình bày, như một kiểu đặc biệt, một thuật toán NLMS số bước có thể khác nhau. Thông qua phần này, chúng ta chấp nhận các ký hiệu dưới đây: ||.|| là tiêu chuẩn Euclidean( Tiêu chuẩn của Ơ-clit) của một vector, và Tr(.) là dấu của một ma trận. 2.5.3.4.2.Số bước khác nhau APA: Xem dữ liệu {d(i)} xuất phát từ kiểu: d(i) = ui w0 + v(i) (2.49) Ở đây, w0 là một vector cột chưa biết mà chúng ta mong muốn( xấp xỉ) để ước lượng, v(i) trả giá cho nhiễu phép đo và ui làm dấu 1xM hàng các vector đầu vào. Cho phép Wi là một ước lượng cho w0 ở sự lặp lại i. Thuật toán hình chiếu quan hệ tính toán Wi thông qua: Wi = Wi-1 + Ui*(UiUi*)-1.ei (2.50) Với: Ui = ; di = ; ei = di - UiWi-1; và là số bước. A.Tối ưu hoá số bước khác nhau: Cập nhật sự đệ quy( 2.50) có thể được viết trong các dạng của vector hệ số lỗi, Wi~ = W0 - Wi hay: Wi~ = Wi-1~ - Ui*(UiUi*)-1.ei (2.51) Bình phương hai vế và lấy ước lượng, chúng ta tìm độ lệch bình phương trung bình MSD đáp ứng: E||Wi~||2 = E||Wi-1~||2 -2Re(E[ei*(UiUi*)-1.Ui Wi-1~]) + 2E[ei*(UiUi*)-1.ei ] E|| Wi-1~||2 - () (2.52) Nếu chúng ta chọn để () là lớn nhất, sau khi chọn điều này được bảo đảm mà MSD sẽ phải giảm bớt một lượng lớn nhất từ sự lặp lại (i-1) để lặp lại i. Tối đa hóa: () = 2Re(E[ei*(UiUi*)-1.Ui Wi-1~]) - 2E[ei*(UiUi*)-1.ei ] (2.53) Số bước khác nhau NLMS và thuật toán hình chiếu quan hệ được thể hiện ở các hình sau thực nghiệm sau: Hình 2.12: Đồ thị MSD cho VS-APA(Variable Step_Size APA) và chuẩn APA (K = 8, C = 0:15, đầu vào: Gaussian AR(1), cực ở 0.9). Hình 2.13: Đồ thị của MSD cho VS-NLMS và chuẩn NLMS (K = 1, C = 0:0001, ngỏ vào: Gaussian AR(1), cực ở 0.9). Hình 2.14: Đồ thị của MSD cho các thuật toán VS khác đã được đề xuất (K = 1, C = 0:0001, ngỏ vào: Gaussian AR(1), cực ở 0.9). Với sự chú ý đến , để tối ưu hóa số bước: 0(i) = (2.54) Chuỗi nhiễu v(i) được xác định và không phụ thuộc sự phân bố theo một kiểu nào đó và không phụ thuộc thống kê của sự chuyển ngược dữ liệu{Ui}, và bỏ qua sự phụ thuộc của Wi-1~ trên nhiễu quá khứ, 0(i) được xác định như sau: 0(i) = (2.55) Với : = E[W~*i-1Ui*(UiUi*)-1.Ui Wi-1~] (2.56) Ở đây Ui*(UiUi*)-1.Ui là một ma trận hình chiếu lên trên R(Ui*), dãy không gian của Ui*. Chọn : Pi Ui*(UiUi*)-1.Ui Wi-1~, là hình chiếu của Wi-1~ lên trên R(Ui*). Từ ||Pi||2 = W~*i-1Ui*(UiUi*)-1.Ui Wi-1~, số bước tối ưu hóa ở phương trình(2.55) trở thành: 0(i) = (2.57) Trong sự tính toán nhỏ 0(i) này, tuy nhiên sự lựa chọn Pi là không thể trong khi thích nghi, vì W0 là không biết. B.Số bước thay đổi APA: Khi v(i) = 0, Pi = Ui*(UiUi*)-1.ei và giống nhau với nhiễu, nó theo : E[Pi] = E[ Ui*(UiUi*)-1.ei] Để ước lượng Pi bằng thời gian trung bình như sau: = + (1-) Ui*(UiUi*)-1.ei (2.58) Với một nhân tố san bằng (0<1). Sử dụng ||Pi||2 thay cho E||Pi||2 ở phương trình(2.57), số bước khác nhau (VS)APA trở thành: Wi = Wi-1 + Ui*(UiUi*)-1.ei (i) = max. (2.59) Với C là một hằng số xác định. Từ (2.57) và (2.59), chúng ta biết rằng C quan hệ với , và đại lượng này có thể xuất hiện ở . Nên C tỷ lệ thuận với K và tỷ lệ nghịch với SNR. Khi lớn, (i) hướng đến max. Khi nhỏ, số bước là nhỏ. Vì vậy sự phụ thuộc trên , (i) khác nhau giữa 0 và max. Để bảo đảm cho bộ lọc ổn định, max được chọn <2. C.Số bước khác nhau NLMS: Một kiểu đặc biệt của (2.59) là một thuộc toán NLMS số bước khác nhau thu được bằng cách điều chỉnh K = 1. Xem lại chuẩn NLMS, tính toán Wi thông qua: Wi = Wi-1 + (i)ei (2.60) Ở đây, e(i) = d(i) - uiWi-1. Từ( 2.59), số bước được tính toán khi: (i) = max., với bây giờ: = + (1-) ei (2.61) 2.5.3.4.3.Kết quả sự mô phỏng: Chúng ta minh họa kết quả của sự hoạt động của các thuật toán đã đề xuất bằng các hình vẽ ở trên. Ở hình(2.12) chúng ta thể hiện MSD(). Các dòng nét liền chỉ cho biết các kết quả của APA với số bước cố định, ở đây chúng ta chọn = 0.002; 0.03 và 1. Nên có thể thấy, đề xuất VS_APA hội tụ nhanh hơn và có lỗi điều chỉnh sai thấp hơn. 2.6.KẾT LUẬN: Chương này đã xây dựng được lý thuyết rất chặc chẽ để có thể hiểu về một bộ lọc thích nghi một cách rõ ràng, sự hoạt động, quá trình cập nhật các hệ số theo một thuật toán định trước. Các thuật toán như: LMS, RLS, NLMS được xây dựng lên cho ứng dụng cập nhật các hệ số một cách hiệu quả và thông minh. Đây là thuyết cơ sở để chương sau sẽ đi xây dựng bộ lọc thích nghi cho khử nhiễu với một thuật toán cụ thể được chọn cho việc cập nhật các hệ số. CHƯƠNG 3: KHỬ NHIỄU KIỂU THÍCH NGHI. 3.1.MỞ ĐẦU: Chương này tiếp cận các ý tưởng cơ bản để thiết kế một bộ lọc thích nghi cho ứng dụng khử nhiễu, dựa trên các lý thuyết đã được giới thiệu ở các chương trước. Khử nhiễu dựa trên việc trừ nhiễu từ tín hiệu nhận được, một hoạt động được điều khiển theo kiểu thích nghi nhằm mục đích cải tiến hoạt động( tăng tỷ số tín hiệu trên nhiễu) của hệ thống. Khi sự hoạt động của hệ thống được điều khiển bởi một quá trình xử lý thích nghi, nó có thể đạt được một hoạt động hệ thống cao vượt trội hơn so với khử nhiễu không thích nghi. 3.2.LÝ THUYẾT KHỬ NHIỄU KIỂU THÍCH NGHI: [5] 3.2.1.Các chế độ khử nhiễu kiểu thích nghi: Về cơ bản, một bộ khử nhiễu thích nghi có một cặp ngỏ vào, các hệ thống điều khiển thích nghi lặp khép kín. Toàn bộ cấu trúc của hệ thống được xác định như hình 3.1 sau đây. Hình 3.1: Cấu trúc khử nhiễu thích nghi. Trong thực tế, hai ngỏ vào của hệ thống được xuất phát từ một đôi cảm biến: một bộ cảm biến chính và một bộ cảm biến tham khảo. Bộ cảm biến chính nhận một tín hiệu mang thông tin s(n) đã bị thay đổi bởi nhiễu cộng v0(n). Tín hiệu s(n) và nhiễu cộng là không tương quan với nhau. Bộ cảm biến tham khảo nhận một nhiễu v1(n) mà không tương quan với tín hiệu s(n) nhưng tương quan với nhiễu v0(n) ở ngỏ vào bộ cảm biến chính, theo một chiều hướng chưa xác định: E[s(n)v1(n-k)] = 0 ; với mọi k (3.1) E[v0(n)v1(n-k)] = p(k) (3.2) Ở đây, trước khi các tín hiệu nhận giá trị thực và p(k) là một phép tương quan chéo chưa biết cho độ trễ k. Tín hiệu tham khảo v1(n) được xử lý bằng một bộ lọc thích nghi để cung cấp tín hiệu ngỏ ra y(n). Ngỏ ra bộ lọc được trừ cho tín hiệu chính d(n), là đáp ứng mong muốn của bộ lọc thích nghi. Tín hiệu lỗi được định nghĩa như sau: e(n) = d(n) – y(n) (3.3) Tín hiệu lỗi quay vòng được sử dụng để điều chỉnh đưa ra các hệ số của bộ lọc thích nghi, và vòng lặp điều khiển thực hiện lọc và phép trừ được khép kín. Chú ý rằng s(n) thật ra là một phần của tín hiệu lỗi e(n). Bây giờ, bộ lọc thích nghi cố gắng để tối thiểu hóa giá trị trung bình bình phương của tín hiệu lỗi e(n). Tín hiệu mang thông tin s(n), về bản chất không bị thay đổi bởi bộ khử nhiễu thích nghi. Kể từ đây, tối thiểu hóa giá trị trung bình bình phương của e(n) là tương đương với việc tối thiểu hóa giá trị nhiễu ra v0(n) – y(n). Với s(n) còn lại, về bản chất không thay đổi, nó theo sau việc tối thiểu hóa giá trị trung bình bình phương của tín hiệu lỗi, thực ra là tương tự khi tối đa hóa hoạt động của hệ thống( tỷ số tín hiệu trên nhiễu) của hệ thống. Hiệu quả sử dụng khử nhiễu thích nghi, phụ thuộc bộ cảm biến tham khảo được đặt trong trường nhiễu của bộ cảm biến chính với hai mục tiêu đặc trưng liên quan: 1) Thành phần s(n) của ngỏ ra bộ cảm biến chính là không thể nhận ra ở ngỏ ra bộ cảm biến tham khảo. 2) Ngỏ ra bộ cảm biến tham khảo là tương quan rất cao với thành phần nhiễu của ngỏ ra bộ cảm biến chính. Ngoài ra, sự thích nghi của các hệ số bộ lọc có thể được điều chỉnh phải là điều kiện thuận lợi gần nhất. 3.2.2.Các kiểu lọc của khử nhiễu thích nghi: Hai kiểu lọc chủ yếu chung nhất được dùng cho khử nhiễu là các bộ lọc FIR và các bộ lọc IIR. Đối với các bộ lọc FIR: Ứng dụng quan trọng của việc dùng các bộ lọc FIR là vì chúng vốn có độ ổn định cao. Nó cũng tốt cho việc loại bỏ các tần số nào đó. Đây là ưu điểm để nó được chọn trước cho các ứng dụng để thiết kế các loại khác nhau của các hệ thống tuyến tính bất biến theo thời gian. Bất lợi chính của kiểu lọc này là đáp ứng xung bị giới hạn trong thời gian bằng các số nhịp hệ số tác động trong bộ lọc. Đáng giá của việc đang đề cập là, rất phổ biến, chúng ta thích thiết kế các bộ lọc FIR pha tuyến tính. Các ưu điểm của đáp ứng pha tuyến tính đó là: + Số lượng phép toán chỉ bao gồm các phép tính thực, không có các phép tính phức. + Các bộ lọc pha tuyến tính cung cấp trễ không bị bóp méo và chỉ cố định số lượng của bộ trễ. Đối với các bộ lọc IIR: Ưu điểm chính của các bộ lọc IIR là chọn lựa rất tốt cho lọc các đỉnh tần số hẹp, ví lẽ chúng có cả các điểm cực và các điểm 0 ở trong hàm truyền của nó. Vì vậy đáp ứng xung của nó là vô hạn, nó không phụ thuộc nhiều vào các thông số bộ lọc cho sự thực hiện kéo dài đáp ứng xung. Bất lợi chính của các kiểu lọc này là tính không ổn định của chúng trong ứng dụng. Vì chúng có các điểm cực ở trong hàm truyền của chúng. 3.2.3.Các thuật toán cập nhật cho các bộ lọc: Từ điều kiện các bộ lọc làm mẫu ở các thời điểm khác nhau, các bộ lọc phải khác nhau ở các thời điểm khác nhau, vì vậy các bộ lọc phải thích nghi. Trong thực tế cho mục đích này, có nhiều thuật toán được đưa ra như ta đã giới thiệu ở chương trước có thể hoạt động rất tốt cho sự thích nghi của các bộ lọc. Thực tế trong điều kiện khử nhiễu thì thuật toán LMS được sử dụng đầu tiên. Lý do cho điều này là các thủ tục tính toán của chúng là tương đối nhỏ và dễ dàng thực hiện trong các kiểu khác nhau của việc thực hiện các ứng dụng. Các nhân tố quan trọng của các thuật toán: + Tốc độ hội tụ: liên quan đến cách thức mà các thuật toán dùng để chuyển đổi nhanh các thông số bộ lọc nhằm tối ưu hóa các giá trị của chúng. + Các thủ tục tính toán: số các hoạt động tính toán cần để cập nhật mỗi thông số bộ lọc. + Lỗi điều chỉnh: liên quan đến có bao nhiêu sai khác từ giá trị tối ưu của chúng. + Đánh dấu: liên quan đến cách thức mà các thuật toán sẽ kéo theo sự khác nhau của các giá trị thông số. + Độ thiết thực: liên quan đến hoạt động thuật toán cập nhật các thông số không bị giả tạo bởi sự ảnh hưởng nhỏ như là nhiễu. + Độ ổn định: Một thuật toán được cho là ổn định nếu sai số bình phương trung bình hội tụ đến giá trị cuối cùng. + Các thuộc tính số hóa: các thuật toán nên ổn định trong quá trình số hóa có nghĩa là ít lỗi lượng tử hóa. Các lỗi lượng tử hóa này xảy ra khi các thuật toán được thực hiện trên các DSP, mà luôn luôn có độ dài từ hữu hạn. Trong thực tế, các thuật toán được cập nhật ở tốc độ lấy mẫu và hoạt động tính toán đủ nhanh. Nó không thể thực hiện được các thuật toán mà là chậm cho các hệ thống thời gian thực. Nhân tố khác mà ảnh hưởng hoàn toàn rất mạnh là các đặc tính phần cứng, được thực hiện cho việc thực hiện các hệ thống thời gian thực. Các thuật toán thích nghi: Phần này ta sẽ nhắc sơ lược lại hai thuật toán LMS và NLMS thường được sử dụng trong thuật toán khử nhiễu thích nghi. Nhiệm vụ của thuật toán thích nghi là cập nhật các hệ số bộ lọc bằng việc tối thiểu hóa lỗi trung bình bình phương. Các thuật toán thích nghi có thể bị tách ra ở các kiểu riêng mà dựa trên tiêu chuẩn chúng có được sử dụng để cập nhật các hệ số bộ lọc được thích nghi không. Thuật toán LMS: Gồm hai bước cơ bản: thứ nhất ngỏ ra bộ lọc y(n) được tính toán và so sánh ngược lại đáp ứng mong muốn d(n) để xác định sai số ngỏ ra bộ lọc. Sai số này lần lượt cung cấp cho việc điều chỉnh vector thông số bộ lọc w(n). Như thể hiện ở phương trình sau đây: y(n) = w’(n)x(n) (3.4) Ở đây, x(n) là vector giá trị đầu vào ở thời điểm n, w’(n) là chuyển vị của w(n), là thông số số bước, e(n) là vector lỗi: e(n) = d(n) – y(n) w(n+1) = w(n) + x(n)e(n) (3.5) Các thuật tính độ ổn định và độ hội tụ của thuật toán được xác định rõ bằng thông số số bước. Nếu quá lớn thì các thuật toán sẽ không hội tụ trong khả năng trung bình bình phương. Nếu là quá nhỏ thì độ hội tụ các thuật toán sẽ rất chậm. Vậy thuật toán sẽ hội tụ nếu và chỉ nếu thông số số bước thỏa mãn: 0<< (3.6) Ở đây, là giá trị của ma trận E[T(n)]. Thuật toán LMS thực hiện tính toán hiệu quả hơn thuật toán NLMS. Thuật toán NLMS: Thuật toán NLMS là một sự mở rộng của thuật toán LMS. Một trong số các vấn đề với LMS là sự hiệu chỉnh của vector ước lượng thông số w(n), là số hạng tỷ lệ với x(n). Vì vậy thuật toán LMS trải qua sự khuếch đại nhiễu độ dốc( Gradient). Để khắc phục điều này, LMS có thể bị thay đổi sao cho giới hạn hiệu chỉnh e(n)x(n) là được bình thường hóa bởi tiêu chuẩn Euclidean (Ơ_Clit) của đầu vào bộ lọc x(n). Để vô dụng các vấn đề với phép chia cho 0 khi x(n) là 0, một giá trị xác định nhỏ cũng được đưa vào tiêu chuẩn. Thuật toán NLMS là thuật toán với các sự thay đổi ở trên và nó được đúc kết ở các phương trình sau: y(n) = w’(n)x(n) (3.7) e(n) = d(n) – y(n) (3.8) w(n+1) = w(n) + x(n)e(n) (3.9) Ở đây, là một hằng số xác định rất nhỏ, tiêu chuẩn hội tụ cho thuật toán LMS trở thành thuật toán NLMS khi: 0<<2 Thêm vào sự bình thường hóa LMS( NLMS) cộng thêm gánh nặng cho việc tính toán, vì nó cần tính ||x(n)||2 cho mỗi lần lặp lại và nó có thể được tính đệ quy như sau: ||x(n)||2 = ||x(n)||2 + |x(n+1)|2 - |x(n-M)|2 (3.10) Với là giá trị ngỏ vào khó chấp nhận nhất và nó đã bị giả tạo bởi chiều dài bộ lọc là M. Như vậy NLMS sẽ phức tạp hơn LMS. Và thực tế chúng ta sẽ sử dụng thuật toán LMS cho khử nhiễu kiểu thích nghi. 3.3.KẾT LUẬN: Chương này xây dựng lý thuyết về khử nhiễu kiểu thích nghi một cách rõ ràng dựa trên các lý thuyết cơ bản. Đã chọn lựa ra được kiểu cấu trúc ổn định cho bộ lọc đó là kiểu đáp ứng xung hữu hạn FIR; và quyết định thực hiện hoạt động cập nhật hệ số cho bộ lọc theo thuật toán LMS, với các phép tính đơn giản nhưng rất hiệu quả, thực tế thuật toán này thường được sử dụng cho ứng dụng khử nhiễu. CHƯƠNG 4: CẤU TRÚC TMS320C6711 DSK 4.1.MỞ ĐẦU: Chương này sẽ khảo sát phần cứng card DSP cụ thể là TMS320C6711 DSK; cũng như giới thiệu bộ xử lý TMS320C6711 của TI trên card đó. Các thuật toán khử nhiễu sẽ được thi hành trên DSK TMS320C6711. 4.2.TMS320C6711 DSK: [5] & [18] & [19] Hình vẽ 4.1 sau đây giới thiệu board TMS320C6711 DSK: Hình 4.1: Board TMS320C6711 DSK. TMS320C6711 DSK là một công cụ hữu ích để thực hiện các ứng dụng xử lý số tín hiệu, sử dụng bộ xử lý TMS320C6711. Như ở hình vẽ 4.1, trên board mạch có chip TLC320AD535, là bộ mã hóa/ giải mã( Codec) 16 bits. Bộ chip này lấy mẫu ở tần số 8000.0 Hz, được kết nối với xung đồng hồ 4 MHz nằm trên board; nó có hai chức năng chính là chuyển đổi tín hiệu từ dạng tương tự ở ngỏ vào thành dạng số để xử lý, và sau đó chuyển ngược trở lại thành tín hiệu tương tự để đưa ra ngỏ ra; chính là hai kết nối: một đầu vào microphone và một đầu ra đơn loudspeaker. Ngoài ra, DSK này còn có 16 MB SDRAM và 128KB flash ROM được nối kết với bộ xử lý TMS320C6711. Board này nối với máy vi tính thông qua cổng song song. PC này được cài phần mềm CCS, là một môi trường phát triển tích hợp gồm những công cụ như: viết chương trình ứng dụng bằng ngôn ngữ Asembly hoặc C, và các trình biên dịch chúng( như: Compiler, Asembler), hay linker, chạy và gỡ lỗi chương trình thời gian thực. Ngoài ra, CCS cung cấp giao diện người dùng đồ họa sử dụng file .GEL, cho phép người lập trình thực thi các hàm có các biến có thể được hiệu chỉnh tức thời( Real Time) mà không cần phải biên dịch lại chương trình. CCS nó còn cho ta nhìn thấy đồ thị của các biến đang chạy. Sơ đồ khối của board này chúng ta tham khảo ở hình 4.2 sau đây: Hình 4.2: Sơ đồ khối TMS320C6711 DSK. 4.2.1. Giới thiệu bộ xử lý TMS320C6711: 4.2.1.1.Giới thiệu chung: Năm 1982, Texas Instruments đã giới thiệu thế hệ đầu đời là bộ xử lý tín hiệu số TMS32010. Đây là bộ xử lý 16 bit tự hào với bộ nhớ và bộ nhân nằm trên chíp, với thời gian mỗi chu kỳ lệnh là 200ns. Sau đó, bộ thứ hai TMS320C25 với nhiều bộ nhớ trên chíp hơn và thời gian mỗi chu kỳ lệnh là 100ns. Tiếp sau đó, bộ thứ ba TMS320C30 là một bộ xử lý 32 bit, với nhiều bộ nhớ trên chíp hơn và thời gian mỗi chu kỳ lệnh là 60ns, tương ứng 16,6 triệu lệnh trên một giây( MIPS). Nhiều lệnh có thể được thực hiện song song, làm cho thời gian chu kỳ thực hiện một lệnh là 30ns. Có một số lệnh trong những lệnh đặc biệt là có thể làm cho những hoạt động xử lý chung trở nên thuận lợi như lọc và phân tích phổ. Kiến trúc của TMS320C30 được thiết kế tạo thuận lợi với những công cụ như trình biên dịch C. Năm 1999, TI cho ra đời bộ xử lý TMS320C6711, với tốc độ xử lý từ 100 đến 250 MHz, riêng bộ xử lý TMS320C6711 mà chúng ta sử dụng là 150 MHz, 64 bit floating-point, có 32 thanh ghi mục đích chung 32 bit, 8 khối chức năng đó là: 4 ALUs( Floating- and Fixed-Point), 2 ALUs( Fixed-Point) và 2 Multipliers( Floating- and Fixed-Point), 2 bộ định thời mục đích chung 32 bit, và có 256 chân. Hình 4.3: Chip TMS320C6711. Ở hình 4.3 trên, “nnn” là tốc độ của bộ xử lý; ví dụ TMS320C6711GFN là 150 MHz, còn TMS320C6711DGDP là 250 MHz. Và “xx” là mã nhận dạng( ID), như thể hiện ở bảng 4.1 sau: Bảng 4.1: Bảng mã ID. Các đặc tính của các bộ xử lý C6211/6711 được thể hiện ở bảng 4.2 sau đây: Bảng 4.2: Các đặc tính của C6211/6711. Những bộ xử lý DSP có một số ứng dụng kể cả giao tiếp và điều khiển, đồ hoạ, lời nói và xử lý ảnh. Chúng được sử dụng trong những đồ chơi biết nói, những thiết bị điện tử tạo ra nhiều loại nhạc khác nhau, những bộ phân tích phổ, thích ứng với những bộ triệt hiệu ứng dội vang lại( echo). v.v. Những bộ xử lý DSP ngày nay có những ứng dụng thật đáng ngạc nhiên như: Những modem và máy fax, mã hoá dữ liệu, truyền dữ liệu, nén lời nói, nhận dạng và tổng hợp lời nói, nén và nâng cao hình ảnh, thị lực của người máy, tổng hợp âm thanh, âm nhạc số, chỉ dẫn đường xe cộ, phân tích động đất và quang phổ, radar và định vị thiết bị ngầm dưới nước bằng sóng siêu âm( sonar), điều khiển motor.v.v. 4.2.1.2.Sơ đồ khối chức năng TMS320C6711: Hình 4.4: Sơ đồ khối chức năng và CPU của TMS320C6711. 4.2.1.2.1.CPU: Gồm các khối sau: Khối Instruction Fetch. Khối Instruction Dispatch. Khối Instruction Decode. Hai đường dẫn dữ liệu( data patch), mỗi đường có 4 khối chức năng. Và các khối: Control Register, Control Logic, Test, In-Circuit Emulation, Interrupt Control. Được thể hiện rõ ở hình vẽ 4.5 sau: Hình 4.5: CPU của TMS320C6711. Có độ dài từ lệnh rất lớn( VLIW)( độ rộng 256 bit) để cung cấp đến 8 lệnh 32 bit trên một chu kì xung đồng hồ. 4.2.1.2.2.Bản đồ bộ nhớ: Hình 4.6 sau mô tả bản đồ địa chỉ vùng nhớ của TMS320C6711. Hình 4.6: Bản đồ địa chỉ vùng nhớ của TMS320C6711. Trong bản đồ trên không có cache L1 8KB vì được truy cập trực tiếp từ CPU. Cache L1 có 4 KB dành cho program cache và 4 KB dành cho data memory cache. L1 có độ rộng 256 bit nối đến CPU, do đó CPU có thể truy cập 8 lệnh trong 1 chu kì xung đồng hồ. Trên bản đồ vùng nhớ có các vùng nhớ dùng để giao tiếp với các thiết bị ngoại vi như sau: EMIF: hỗ trợ giao tiếp với bộ nhớ bên ngoài như SDRAM, SBSRAM, SRAM. EDMA Controller: gồm 16 kênh có thể lập trình được, điều khiển quá trình truyền dữ liệu giữa các vùng nhớ mà không cần sự can thiệp của CPU. HPI: là một cổng song song để cho bộ xử lý chủ có thể truy xuất trực tiếp vào không gian bộ nhớ của chip TMS320C6711. Interupt Selector: cho phép lựa chọn các mức ưu tiên cho các ngắt phần cứng để ánh xạ vào trong các ngắt mềm của CPU. McBSP: dựa trên chuẩn giao tiếp cổng nối tiếp và có thể đệm các mẫu nối tiếp trong vùng nhớ( để dữ liệu có thể truyền đi một cách liên tục) một cách tự động nhờ sự hổ trợ của EDMA Controller. 4.2.1.2.3.Các đường truyền dữ liệu: Hình 4.7 dưới, mô tả các đường truyền dẫn dữ liệu bên trong chip TMS320C6711. Có hai tập thanh ghi mục đích chung( Register File) A và B trong cấu trúc đường dẫn dữ liệu. Mỗi tập thanh ghi có 16 thanh ghi 32 bit. Trong mỗi đường dẫn dữ liệu có 4 khối chức năng( L, S, M, D) thực hiện các thao tác khác nhau. Mỗi khối có 1 cổng ghi dành cho toán hạng đích( dst) và 2 cổng đọc dành cho 2 toán hạng nguồn( src) nằm trong 2 tập thanh ghi mục đích chung. Khi thao tác với dữ liệu 32 bit thì 8 khối chức năng có thể thực hiện song song trong mỗi chu kì xung đồng hồ. Hình 4.7: Các đường truyền dữ liệu. 4.2.1.2.4.Đường ống( Pipeline): Cơ chế pipeline được chia làm ba giai đoạn: Tìm lệnh( Fetch) Giải mã lệnh( Decode) Thực thi lệnh( Execute) Tất cả các lệnh trong tập lệnh của TMS320C6711 đều trải qua ba giai đoạn trên. CPU PW Các khối chức năng Các thanh ghi PG Bộ nhớ PS PR Giai đoạn tìm lệnh được chia làm bốn phase cho tất cả các lệnh., xem hình 4.8 sau: (a) (b) PG PS PW PR Hình 4.8: Các phase tìm lệnh. PG: tạo địa chỉ lệnh. PS: gởi địa chỉ lệnh. PW: sẵn sàng truy cập lệnh. PR: nhận gói lệnh tìm được Trong TMS320C6711 một gói lệnh tìm được( FP) bao gồm tám lệnh 32bit được xử lý đồng thời với nhau trong một chu kỳ xung đồng hồ. Giai đoạn giải mã lệnh được chia làm hai phase: DP: gởi lệnh vào các thanh ghi. DC: giải mã lệnh. Trong phase DP các FP được chia thành các gói lệnh thực thi( EP). Một EP có thể là một lệnh hay từ hai lệnh đến tám lệnh song song. Các lệnh trong cùng một EP được chỉ định tới các khối chức năng thích hợp. Trong phase DC, các thanh ghi nguồn, thanh ghi đích và các đường dẫn có liên quan được giải mã để có thể thực thi lệnh trong các khối chức năng. Giai đoạn thực thi lệnh gồm mười phase, tùy theo từng lệnh mà có số lượng phase khác nhau để thực thi lệnh. 4.2.1.2.5.Ngắt( Interrupt): Bộ xử lý DSP làm việc trong môi trường thường xuyên xảy ra các sự thay đổi bất thường từ bên ngoài, hay đó chính là các ngắt. Các sự kiện này khi xảy ra phải được bộ xử lý xử lý. Ngắt là một sự kiện làm tạm dừng tiến trình xử lý hiện thời của CPU để chuyển sang hoàn thành nhiệm vụ do ngắt đó tạo ra. Các nguồn ngắt có thể nằm trong chip hay ở ngoài, chẳng hạn như bộ định thời( Timer) hay bộ ADC, và các thiết bị ngoại vi khác. Để tiến hành xử lý một ngắt che được( Maskable Interrupt) thì phải thực hiện các bước sau: - Bit GIE trong thanh ghi CSR được set lên 1. - Bit NMIE trong thanh ghi IER được set lên 1. - Bit IE tương ứng ở trong thanh ghi IER được set lên 1. Khi một ngắt tương ứng xuất hiện sẽ thiết lập một bit tương ứng trong thanh ghi IFR. TMS320C6711 giao tiếp với thiết bị ngoại vi thông qua các ngắt. Chip này có 16 ngắt mềm trong bảng dich vụ ngắt, tuy nhiên lại có rất nhiều nguồn ngắt( ngắt cứng), lớn hơn 16 ngắt, do đó có các thanh ghi IML và IMH để thực hiện lựa chọn các ngắt này. C6711 giao tiếp với TLC320AD535 thông qua các cổng đệm nối tiếp đa kênh McBSP. Có các ngắt trong TMS320C6711 được thể hiện ở hình 4.9 sau: Hình 4.9: Các ngắt DSP C6711. Các ngắt 00 – 03: là các ngắt không che và cố định. Các ngắt 04 – 15: là các thanh ghi có thể lập trình được bằng cách thay đổi các giá trị nhị phân trong các trường thanh ghi điều khiển chọn ngắt. 4.2.1.3.Các cổng đệm nối tiếp đa kênh( McBSP): McBSP trong bộ DSP TMS320C6000 như là một cổng giao tiếp dữ liệu tốc độ cao. McBSP có thể hoạt động trong các chế độ khác nhau, tùy theo ứng dụng. Để hoạt động thích hợp thì cổng nối tiếp phải được khởi tạo theo một cấu trúc riêng. Phần này miêu tả các bước khởi tạo cần thiết khi EDMA hay CPU được sử dụng cho dịch vụ dữ liệu McBSP. Thông thường EDMA được sử dụng cho hoạt động đọc/viết hoạt động truyền từ/đến McBSP. Sự truyền EDMA đọc/viết được đồng bộ, và McBSP cung cấp các sự kiện đồng bộ. Như một sự lựa chọn, trong các kiểu, ở đây CPU đọc từ DRR và viết đến DXR, phương pháp kiểm soát vòng( Polled) hay ngắt( Interrupt) sẽ được sử dụng; trong đồ án này ta sẽ sự dụng phương pháp ngắt. Hình 4.10: Sơ đồ khối chức năng của McBSP. Một McBSP của một thiết bị DSP TMS320C6000 này có thể được kết nối đến một McBSP của một thiết bị DSP TMS320C6700 khác, như được thể hiện ở hình 4.11 sau đây: Hình 4.11: Sự kết nối giữa các McBSP của các CPU C6x. Hình 4.12: Tốc độ truyền tối đa của các McBSP của các CPU C6x. Chương trình khởi tạo McBSP sẽ được giới thiệu trong phần phụ lục. 4.2.2.TLC320AD535: [17] 4.2.2.1. Giới thiệu: Bộ giải mã hai kênh thoại/dữ liệu TLC320AD535 là một thiết bị kết nối bộ trộn tín hiệu( Mixed-Signal) dãi rộng( Broadband). AD535 bao gồm một bộ giải mã hai kênh và mạch lai tương tự với hai cổng nối tiếp độc lập cho việc giao tiếp với bộ xử lý chủ; và có các điện trở, các điện dung bên ngoài dùng để điều chỉnh độ lợi và các điểm cực bộ lọc. Thiết bị này cũng chứa độ xiên microphone, biên độ, khả năng trộn âm thanh trong kênh thoại, điều khiển độ lợi có thể lập trình được. 4.2.2.2.Các đặc tính của AD535: + Nguồn cung cấp 5 V hay 3.3 V. + Các chế độ phần mềm nguồn thấp riêng biệt cho các kênh dữ liệu và thoại. + Tốc độ lấy mẫu kênh dữ liệu và thoại riêng biệt lên đến 11,025 kHz. + Xử lý tín hiệu 16-bit. + Dãi động ở các kênh dữ liệu và thoại là 80 dB. + Toàn bộ tín hiệu/( nhiễu + các sự sai lệch khác) là 77 dB cho ADC. + Toàn bộ tín hiệu/( nhiễu + các sự sai lệch khác) là 74 dB cho DAC. + Các biên độ độ lợi có thể lập trình được. + Lái kênh âm thanh và dữ liệu TAPI 600-W. + Lái headphone 60-W với biên độ độ lợi có thể lập trình được. + Lái các speaker khác nhau AT41 8- với biên độ độ lợi có thể lập trình được. + Độ xiên microphnone tối đa là 5 mA ở 2.5 V/1.5 V. + Tham chiếu thu phát tối đa là 2.5 mA ở 2.5 V/1.5 V. + Tham chiếu kênh dữ liệu tối đa là 10 mA ở 2.5 V/1.5 V. + Mạch reset nguồn MVDD 5-V. + Mạch cho ghi nhanh hay sự ghi đến thiết bị bộ nhớ nhanh. + Cho phép hoạt động trong một gói 64-chân PM từ –40°C đến 85°C. 4.2.2.3.Sơ đồ khối chức năng: Hình 4.25 : Sơ đồ khối chức năng của AD535. 4.3.KẾT LUẬN: Như vậy phần cứng TMS320C6711 DSK đã được giới thiệu, các thiết bị quan trọng trên board này, mà ta sẽ sử dụng trong quá trình tiến hành khử nhiễu; như: Bộ xử lý TMS320C6711, bộ mã hoá/giải mã TLC320AD535. Các cơ chế hoạt động cũng như tập lệnh của CPU ở DSK này. Tất cả các lý thuyết được đưa ra ở các chương trên sẽ được đúc kết lại với ứng dụng thực tế: Tiến hành khử nhiễu kiểu thích nghi trên TMS320C6711 DSK, ở chương sau đây. CHƯƠNG 5: THỰC HIỆN BỘ LỌC THÍCH NGHI ĐỂ KHỬ NHIỄU TRÊN TMS320C6711 DSK 5.1.MỞ ĐẦU: Trong chương này chúng ta sẽ tiến hành thực hiện khử nhiễu trên TMS320C6711 DSK, với tín hiệu đầu vào card là tín hiệu tương tự được lấy từ ngỏ ra audio của PC và đầu ra của card được đưa ra loadspeaker. Tín hiệu audio từ PC là tín hiệu mong muốn, mà ta cần đảm bảo tính chính xác cao. Tín hiệu nhiễu được tạo ra bằng phần mềm, từ chương trình tạo nhiễu giả ngẫu nhiên. Ta sẽ xem xét chất lượng khử nhiễu của bộ lọc thích nghi trên DSP. Sau đây là cách tổ chức chương trình và lưu đồ thuật toán của chương trình khử nhiễu kiểu thích nghi, còn phần chương trình được giới thiệu ở phần phụ lục. 5.2.TỔ CHỨC CHƯƠNG TRÌNH VÀ CÁC LƯU ĐỒ THUẬT TOÁN CỦA CHƯƠNG TRÌNH KHỬ NHIỄU KIỂU THÍCH NGHI: 5.2.1.Tổ chức chương trình: Chương trình khử nhiễu kiểu thích nghi được tổ chức theo sơ đồ sau: CHƯƠNG TRÌNH CHÍNH LỌC THÍCH NGHI TẠO NHIỄU GIẢ NGẪU NHIÊN VÀO/RA TÍN HIỆU VÀ HIỂN THỊ Hình 5.1: Sơ đồ tổ chức chương trình khử nhiễu kiểu thích nghi. Chương trình khử nhiễu kiểu thích nghi này được thực hiện theo cấu trúc ở hình 3.1. Với nguồn nhiễu được tạo ra từ chương trình tạo nhiễu giả ngẫu nhiên theo sơ đồ sau: Hình 5.2: Sơ đồ tạo chuỗi nhiễu giả ngẫu nhiên. Ở sơ đồ trên, thanh ghi sreg.regval 16 bit( b0 – b15), fb là biến tạm, ban đầu nhận giá trị của phép XOR của hai bit b0 và b1, sau đó XOR với kết quả của phép XOR giữa hai bit b11 và b13; kết quả nhận được đưa vào bit b0 sau khi thanh ghi sreg.regval đã dịch trái 1 bit. Như vậy mỗi lần dịch thanh ghi sẽ nhận một giá trị khác nhau. Với mỗi mẫu tín hiệu vào, nhận từ hàm input_sample() được lấy ở bộ Codec( TLC320AD535) sẽ được cộng với một mẫu tín hiệu nhiễu để tạo ra tín hiệu sai lệch dplusn_sig. Tín hiệu ngỏ ra của bộ lọc thích nghi, y là tín hiệu ước lượng của nhiễu; bộ lọc thích nghi ước lượng hàm truyền của nhiễu theo thuật toán LMS dựa trên sai số E = dplusn_sig – y, hồi tiếp về bộ lọc thích nghi. Với mỗi thời điểm n, ngỏ ra của bộ lọc thích nghi được tính toán và 30 hệ số được cập nhật. Tín hiệu sai số E này là sai khác giữa tín hiệu mong muốn desired_sig và nhiễu cộng giả ngẫu nhiên với ngỏ ra của bộ lọc thích nghi. Sau đó sai số E này xuất ra theo hàm output_sample((short)E); Hàm này sẽ xuất dữ liệu ra trên bộ Codec, sau đó xuất ra loadspeaker, là tín hiệu tương tự sau khi đã được bộ Codec chuyển đổi số sang tương tự; chính là tín hiệu mong muốn cần quan tâm. 5.2.2.Các lưu đồ thuật toán: Lưu đồ chương trình chính main(): Khởi tạo: T = 0; Kiểm tra điều kiện: i < NH ? Khởi tạo bộ đệm nhiễu; Tăng i; Đúng Sai Kiểm tra điều kiện: T < N ? Khởi tạo vector độ trễ và các hệ số bộ lọc; Tăng T; Sai Gọi chương trình ngắt Khởi tạo: i = 0 Bắt đầu Thiết lập thanh ghi dịch; Khởi tạo vòng quay chuỗi nhiễu; Đúng Hình 5.3: Lưu đồ thuật toán chương trình chính. Lưu đồ chương trình ngắt lọc thích nghi c_int11() : C Bắt đầu; Khởi tạo các tín hiệu: dplusn_sig = 0; y = 0; E = 0; Gọi hàm tạo nhiễu; Khởi tạo: i = NH – 1; Kiểm tra điều kiện: i >= 0 ? Đúng Sai Tính chuỗi nhiễu ngẫu nhiên; Nhận tín hiệu mong muốn; Khởi tạo bộ trễ ; Trộn tín hiệu mong muốn với nhiễu; Khởi tạo: i = 0; Kiểm tra điều kiện: i < N ? Đúng Sai Tính tín hiệu ra của bộ lọc và tăng i; A B Hình 5.4: Lưu đồ thuật toán chương trình ngắt lọc thích nghi. B A Tính sai số ngỏ ra: E = dplusn_sig – y; Khởi tạo: i = N – 1; Cập nhật hệ số bộ lọc theo thuật toán LMS; Giảm i; Kiểm tra điều kiện: i >= 0 ? Đúng Sai Xuất tín hiệu đã khử nhiễu ra; Giảm i; Quay về từ ngắt C Hình 5.5: Lưu đồ thuật toán chương trình ngắt lọc thích nghi( tt). L ưu đồ chương trình con tạo chuỗi nhiễu giả ngẫu nhiên prn(): Bắt đầu Sai Tính giá trị vòng quay fb: fb = b0 XOR b1; fb = fb XOR (b11 XOR b13); Dịch thanh ghi sang trái 1 bit; Đưa giá trị fb vào b0; Bit b0 = 1 ? Chuỗi nhiễu nhận mức dương; Chuỗi nhiễu nhận mức âm; Trả về giá trị chuỗi nhiễu Đúng Hình 5.6: Lưu đồ thuật toán chương trình tạo nhiễu giả ngẫu nhiên. 5.3.KẾT LUẬN: Chương này chỉ giới thiệu sơ lược cách tổ chức và hoạt động của chương trình khử nhiễu kiểu thích nghi; cùng với các lưu đồ thuật toán của các hàm trong chương trình đó. Còn phần thực thi chương trình sẽ được giới thiệu thông qua bảo vệ đồ án. Kãút luáûn vaì hæåïng phaït triãøn âãö taìi Các khảo sát của đồ án cho thấy tầm quan trọng của lọc số, ưu điểm của lọc số so với lọc tương tự. Có nhiều loại bộ lọc, nhưng chủ yếu dựa trên hai loại cấu trúc căn bản đó là kiểu FIR và IIR. Đặc biệt, đồ án đã tìm hiểu khá rõ bộ lọc số kiểu thích nghi, đó là kiểu lọc thông minh và sự hoạt động rất hiệu quả của nó; dựa trên các thuật toán như LMS, RLS, NLMS, .v.v. Và sự ổn định của chúng khi chúng ta thiết kế theo kiểu cấu trúc FIR. Chúng ta đã tiếp cận với bộ xử lý TMS320C6711 của hãng Texas Instruments, và đã tiến hành chạy thời gian thực trên TMS320C6711 DSK. Kết quả đem lại khá hấp dẫn, trực quan với dạng sóng ngỏ vào, ngỏ ra; chúng ta có thể thay đổi tức thời các hệ số của bộ lọc; mà đây là điều rất khó đối với bộ lọc tương tự. Hai thuật toán được dùng chủ yếu trong lọc thích nghi là LMS và RLS; loại RLS thì có cơ sở toán học rất chặt chẽ, nhưng vì do yêu cầu phải tính toán nhiều hơn và độ chính xác cao hơn nên phức tạp hơn và tốn thời gian hơn; nên ít được áp dụng bằng kiểu LMS đơn giản hơn, phần thực nghiệm của đồ án này tập trung cho kiểu LMS. Các kết quả thực nghiệm thể hiện khá rõ tính năng của bộ lọc thích nghi và khả năng ứng dụng của khử nhiễu. Đây là bước đầu tìm hiểu về quá trình xử lý với TMS320C6711 DSK để xử lý âm thanh như: lọc âm, nén âm, phân tích phổ âm, . . .Sau đó sẽ phát triển lên bước cao hơn với các ứng dụng của các bộ DSP chuyên dụng khác như là: xử lý ảnh, âm thanh cho điện thoại di động, phân tích phổ tín hiệu ứng dụng cho mạng điện thoại di động, phân tích quang phổ, xử lý sóng siêu âm hay cao hơn nữa là: bộ xử lý dò đường cho robot, cho xe hơi tự động, nhiều ứng dụng khác thực tế và .v.v. Hướng phát triển của đề tài là mở rộng cho nhiều kiểu cấu trúc khác nhau để so sánh kết quả hoạt động của chúng với nhau. Qua đó thấy được tầm quan trọng của lọc số nói riêng và tính hữu dụng của các bộ DSP nói chung, chúng được sử dụng khá phổ biến trong công nghiệp, trong những dụng cụ từ hiện đại quy mô đến các đồ dùng dân dụng, các đồ chơi trẻ em, .v.v. Mỗi bộ lọc số có thể có các vai trò riêng như chuyên về xử lý ảnh hay xử lý âm thanh, phân tích phổ, .v .v. và vì vậy sẽ có nhiều card DSP để tiến hành thí nghiệm các kiểu ứng dụng khác nhau; như ở đồ án này sử dụng DSK chuyên về âm thanh. Mặc dù đã rất cố gắng và cẩn thận nhưng đồ án này vẫn sẽ không tránh khỏi những thiếu sót; mong các Thầy, Cô hướng dẫn thêm để đồ án được hoàn chỉnh hơn. Đà Nẵng, ngày 1 tháng 5 năm 2006. TÀI LIỆU THAM KHẢO [1]Nguyễn Đình Huy - Xác suất và thống kê - Nhà xuất bản Đại học quốc gia TP. Hồ Chí Minh – Năm 2003. [2]Nguyễn Hữu Hùng - Lọc số kiểu thích nghi trên DSP - Luận văn Thạc sỹ kỹ thuật - Tiến sỹ Ngô Văn Sỹ, hướng dẫn. [3]Nguyễn Quốc Trung - Xử lý tín hiệu và lọc số - Tập một và hai – Nhà xuất bản Khoa học và kỹ thuật Hà Nội – Năm 1999. [4]Tống Văn On – Lý thuyết và bài tập xử lý tín hiệu số - Nhà xuất bản Lao động, xã hội – 2002. [5]Aizezi Abuding Vishnuvardhan Yalamanchili - Department of Signal and Systems - Chalmers University of Technology Gothenborg - Sweden 2004. [6]Douglas L.Jones - The Connexons Project and Licensed under the Creative Commons Attribution License. [7]Hyun-Chool Shin, Ali H. Sayed, Fellow, IEEE, and Woo-Jin Song, Member, IEEE - IEEE SIGNAL PROCESSING LETTERS, VOL. 11, NO. 2, FEBRUARY 2004. [8]Monson H.Hayes, Wiley - Statistical Digital Signal Processing and Modeling - 1996. [9]Rulph Chassaing - Digital Signal Processing with C and the TMS320C30 - John Wiley & Sons, Inc - 1997. [10]Rulph Chassaing - DSP Applications Using C and the TMS320C6x DSK - John Wiley & Sons, Inc - 2002. [11]Sen M.Kuo, Bob H.Lee - Real-Time Digital Signal Processing - John Wiley & Sons – 2001. [12]Simon Haykin, Prentice Hall - Adaptive Filter Theory - 2002. [13]Steven W.Smith - Digital Signal Processing. [14]Steven W.Smith – The Scientist and Engineer’s Guide Digital Signal Processing – Chapter 14: Introduction to Digital Filters [15]Texas Instrucments - TMS320C6000 CPU and Instruction Set Reference Guide - Literature Number: SPRU189F October 2000. [16]Texas Instruments - Getting Started Guide Code Composer Studio. [17]Texas Instruments Incorporated, 2000 - Mixed Signal Products - SLAS202B. [18]Texas Instruments Incorporated, 2000 - SPRS073B – AUGUST 1998 – REVISED APRIL 2000. [19]TMS320C6711/TMS320C6711B/TMS320C6711C/TMS320C6711D Silicon Errata - SPRZ173P. PHỤ LỤC 1.CÁC THANH GHI CỦA BỘ XỬ LÝ TMS320C6711: Các thanh ghi ngoại vi: Hình 1.1: Các thanh ghi EMIF Hình 1.2: Các thanh ghi Cache. Hình 1.3: Các thanh ghi chọn ngắt. Hình 1.4: Các thanh ghi thiết bị. Hình 1.5: Các thanh ghi bộ định thời 0 và 1. 2.CHƯƠNG TRÌNH KHỬ NHIỄU KIỂU THÍCH NGHI: 2.1.Chương trình chính: khunhieuthichnghi.c //BO LOC FIR KIEU THICH NGHI DE KHU NHIEU AUDIO #include "Cac_he_so_chuoi_nhieu.cof" //Cac he so chuoi nhieu #include "Tao_nhieu.h" //Thu vien tao chuoi nhieu #define N 30 //So cac he so cua bo loc #define B 1E-12 //Toc do do hoi tu float delay[N]; //Bo dem du lieu vao float w[N]; //Cac he so bo loc int noise[NH]; //Cac mau nhieu short prn(void) //Tao nhieu gia ngau nhien { short prnseq; if(sreg.bt.b0) //Chuoi {1,-1} prnseq = -800; //Muc am cua nhieu else prnseq = 800; //Muc duong cua nhieu fb =(sreg.bt.b0)^(sreg.bt.b1); //XOR cac bit 0 va 1 fb ^=(sreg.bt.b11)^(sreg.bt.b13); //XOR cac bit 11 va 13 roi XOR voi fb sreg.regval<<=1; //Dich thanh ghi sang trai 1 bit sreg.bt.b0 = fb; //Dong duong dan vong quay return prnseq; } interrupt void c_int11() //ISR: Doan chuong trinh ngat { int i; float noise_sig, desired_sig, dplusn_sig = 0, y = 0, E = 0; noise[0] = prn(); //Chuoi nhieu ngo vao for (i = NH-1; i >= 0; i--) //Cap nhat chuoi nhieu gia ngau nhien { noise_sig = hn[0]*noise[0]; noise_sig = noise_sig + (hn[i]*noise[i]); desired_sig = input_sample(); //Nhan tin hieu ngo vao la tin hieu //muon delay[0] = noise[0]; dplusn_sig = noise_sig + desired_sig; /* Tinh toan nhieu uoc luong */ for (i = 0; i<N; i++) y = y + (delay[i]*w[i]); E = dplusn_sig - y; //Sai so ngo ra chinh la tin hieu mong //muon /* Tinh toan va cap nhat cac he so moi cho bo loc theo thuat toan LMS */ for (i = N-1; i >= 0; i--) { w[i] = w[i] + (B*E*delay[i]); delay[i] = delay[i-1]; } output_sample((short)E); //Ngo ra cua bo loc da khu nhieu } return; } /* Chuong trinh chinh */ void main() { short i, T; sreg.regval = 0xffff; //Thiet lap thanh ghi dich fb = 1; //Lay gia tri quay vong chuoi nhieu for (i = 0; i<NH; i++) noise[i] = 0; //Khoi tao bo dem nhieu /* Khoi tao cac he so va cac vector do tre*/ for (T= 0; T<N; T++) { delay[T] = 0; //Khoi tao bo dem du lieu w[T]=0; //Khoi tao he so bo loc } comm_intr(); //Khoi tao DSK, codec, McBSP while(1); //Lap vo han } 2.2.Chương trình thư viện tạo chuỗi nhiễu: Tao_nhieu.h //Tao_nhieu.h - file thu vien cho chuoi nhieu gia ngau nhien typedef struct BITVAL //Cac bit cua thanh ghi duoc dinh kieu integer { unsigned int b0:1, b1:1, b2:1, b3:1, b4:1, b5:1, b6:1; unsigned int b7:1, b8:1, b9:1, b10:1, b11:1, b12:1,b13:1; unsigned int dweebie:2; //Dien vao cac bit trong - Cac bit 14 va 15 } bitval; typedef union SHIFT_REG { unsigned int regval; bitval bt; } shift_reg; 2.3.Chương trình tạo hệ số chuỗi nhiễu bằng Matlab: taoheso.m %TAO CAC HE SO CHUOI NHIEU TRUNG BINH 0 function taoheso(n,b) % n la so cac he so % b chua cac he so trung binh 0 fid = fopen('Cac_he_so_chuoi_nhieu.cof','w'); % Mo/tao file n = 101; fprintf(fid,'#define NH %d\n',n); fprintf(fid,'float hn[NH] =\n{'); % Bat dau for i = 1:nn, b(i)=randn; % Tao chuoi nhieu gia ngau nhien trung binh 0 fprintf(fid,'%d, ' ,b(i)); % In cac he so if (mod(i,5) == 0) % Cu moi 5 he so, fprintf(fid,'\n'); % Tiep dong moi end end fprintf(fid,'%d' ,b(n)); % He so cuoi cung fprintf(fid,'};\n'); % Ket thuc bang dau } fclose(fid); % Dong file size(b) 2.4.Chương trình khởi tạo ngắt DSK: C6xdskinit.c /* C6xdskinit.c Khoi tao DSK, AD535, McBSP */ #include #include "c6xdsk.h" #include "c6xdskinit.h" #include "c6xinterrupts.h" char polling = 0; void mcbsp0_init() //Thiet lap McBSP0 { *(unsigned volatile int *)McBSP0_SPCR = 0; //reset cong noi tiep *(unsigned volatile int *)McBSP0_PCR = 0; //Thiet lap thanh ghi dieu khien chan *(unsigned volatile int *)McBSP0_RCR = 0x10040; //Thiet lap thanh ghi dieu //khien rx *(unsigned volatile int *)McBSP0_XCR = 0x10040; //Thiet lap thanh ghi dieu //khien tx *(unsigned volatile int *)McBSP0_DXR = 0; *(unsigned volatile int *)McBSP0_SPCR = 0x12001; //Thiet lap thanh ghi dieu //khien SP } void mcbsp0_write(int out_data) //Ham ghi { int temp; if (polling) //Bo qua neu la ngat { temp = *(unsigned volatile int *)McBSP0_SPCR & 0x20000; while ( temp == 0) temp = *(unsigned volatile int *)McBSP0_SPCR & 0x20000; } *(unsigned volatile int *)McBSP0_DXR = out_data; } int mcbsp0_read() //Ham doc { int temp; if (polling) { temp = *(unsigned volatile int *)McBSP0_SPCR & 0x2; while ( temp == 0) temp = *(unsigned volatile int *)McBSP0_SPCR & 0x2; } temp = *(unsigned volatile int *)McBSP0_DRR; return temp; } void TLC320AD535_Init() //Khoi tao AD535 { mcbsp0_read(); //Thiet lap thanh ghi so 3 cua AD535 mcbsp0_write(0); mcbsp0_read(); mcbsp0_write(0); mcbsp0_read(); mcbsp0_write(0); mcbsp0_read(); mcbsp0_write(1); //Gui bit cho giao tiep thu hai mcbsp0_read(); mcbsp0_write(0x0386); //Reset kenh thoai mcbsp0_read(); mcbsp0_write(0); //Xoa giao tiep thu hai mcbsp0_read(); mcbsp0_write(0); mcbsp0_read(); mcbsp0_write(0); mcbsp0_read(); mcbsp0_write(1); //Gui bit cho giao tiep thu hai mcbsp0_read(); mcbsp0_write(0x0306); //Xoa reset kenh thoai mcbsp0_read(); mcbsp0_write(0); //Xoa giao tiep thu hai mcbsp0_read(); mcbsp0_write(0); //Thiet lap thanh ghi so 4 cua AD535 mcbsp0_read(); mcbsp0_write(0); mcbsp0_read(); mcbsp0_write(1); mcbsp0_read(); mcbsp0_write(0x0400); //Thiet lap do loi tien khuech dai microphone //den 20 dB mcbsp0_read(); mcbsp0_write(0); mcbsp0_read(); mcbsp0_write(0); //Thiet lap thanh ghi so 5 cua AD535 mcbsp0_read(); mcbsp0_write(0); mcbsp0_read(); mcbsp0_write(1); mcbsp0_read(); mcbsp0_write(0x0502); mcbsp0_read(); mcbsp0_write(0); mcbsp0_read(); } void c6x_dsk_init() //Khoi tao DSP va cac ngoai vi { CSR=0x100; //Cam tat ca cac ngat IER=1; //Cam cac ngat tru NMI ICR=0xffff; //Xoa trong luc ngat *(unsigned volatile int *)EMIF_GCR = 0x3300; //Dieu khien toan cuc EMIF *(unsigned volatile int *)EMIF_CE0 = 0x30; //Dieu khien CE0 cua EMIF *(unsigned volatile int *)EMIF_CE1 = 0xffffff03; //Dieu khien CE1 cua EMIF, 8 //bit bat dong bo *(unsigned volatile int *)EMIF_SDCTRL = 0x07117000; //Dieu khien SDRAM //cua EMIF *(unsigned volatile int *)EMIF_SDRP = 0x61a; //Chu ky lam tuoi SDRAM //cua EMIF *(unsigned volatile int *)EMIF_SDEXT = 0x54519;//EMIF SDRAM extension mcbsp0_init(); TLC320AD535_Init(); } void comm_poll() //Giao tiep/Khoi tao viec dung kieu kiem soat vong { polling = 1; //Neu la kiem soat vong c6x_dsk_init(); //Goi ham khoi tao DSK } void comm_intr() //Giao tiep/Khoi tao viec dung kieu ngat { polling = 0; //Neu la ngat c6x_dsk_init(); //Goi ham khoi tao DSK config_Interrupt_Selector(11, XINT0); //Dung ngat INT11 enableSpecificINT(11); //Cho ngat rieng enableNMI(); //Cho phep NMI enableGlobalINT(); //Cho phep GIE cho ngat toan cuc mcbsp0_write(0); //Ghi den SP0 } void output_sample(int out_data) //Cong cho ngo ra { mcbsp0_write(out_data & 0xfffe); //Che LSB } int input_sample() //Cong cho ngo vao { return mcbsp0_read(); //Doc tu McBSP0 } 3.CHƯƠNG TRÌNH KHỬ NHIỄU KIỂU FIR BÌNH THƯỜNG: khunhieuFIR.c //BO LOC FIR KHU NHIEU KIEU BINH THUONG #include "He_so_bo_loc.cof" #include "Cac_he_so_chuoi_nhieu.cof" #include "Tao_nhieu.h" //File thu vien tao chuoi nhieu int noise[NH]; //Cac mau nhieu int data[N]; //Cac mau du lieu duoc lam tre short fb; //so vong quay shift_reg sreg; short prn(void) //Tao nhieu gia ngau nhien { short prnseq; if(sreg.bt.b0) //Chuoi {1,-1} prnseq = -800; //Muc am cua nhieu else prnseq = 800; //Muc duong cua nhieu fb =(sreg.bt.b0)^(sreg.bt.b1); //XOR cac bit 0 va 1 fb ^=(sreg.bt.b11)^(sreg.bt.b13); //XOR cac bit 11 va 13 roi XOR voi fb sreg.regval<<=1; //Dich thanh ghi sang trai 1 bit sreg.bt.b0 = fb; //Dong duong dan vong quay return prnseq; } interrupt void c_int11() //ISR { int i; int yn; int yd; //Khoi tao ngo ra bo loc noise[0] = prn(); //Khoi tao nhieu ngo vao yn = hn[0]*noise[0]; for (i = NH-1; i > 0; i--) { yn +=(hn[i]*noise[i]); //y(n)+= h(i)*x(n-i) noise[i] = noise[i-1]; //Dich chuyen nhieu de cap nhat cac bo tre } data[0] = yn + (input_sample()<<3); //output_sample(yn); //output_sample(noise[0]); yd = h[0]*data[0]; for (i = N-1; i > 0; i--) { yd +=(h[i]*data[i]); //y(n)+= h(i)*x(n-i) data[i] = data[i-1]; //Dich chuyen du lieu de cap nhat cac bo tre } output_sample(yd); //Ngo ra tu bo loc return; void main() { short i; sreg.regval = 0xffff; //Thiet lap thanh ghi dich fb = 1; //Khoi tao so vong quay for (i = 0; i<NH; i++) noise[i] = 0; //Khoi tao bo dem nhieu for (i = 0; i<N; i++) data[i] = 0; //Khoi tao bo dem du lieu comm_intr(); //Khoi tao DSK, codec, McBSP while(1); //Lap vo han } MỤC LỤC

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

  • docDO AN TOT NGHIEP.doc
  • rarFONTS.rar
  • docBia.doc
  • ppskhunhieuthichnghi.pps
  • pptkhunhieuthichnghi.ppt
  • rarchuong trinh bao ve.rar
Luận văn liên quan