Đề tài Tổng quan về lọc số

Tài liệu Đề tài Tổng quan về lọc số: DANH MỤC TỪ VIẾT TẮT ALU(Arithmetic - Logic Unit): Đơn vị số học - logic. AM( Amplitude Modulation): Điều biên. APA( Affine Projection Algorithm): Thuật toán hình chiếu quan hệ. CCS( Code Composer Studio): Phần mềm soạn mã, để chạy card DSK. CPU( Central Processing Unit): Đơn vị xử lý trung tâm. CSR( Control Status Register): Thanh ghi trạng thái điều khiển. DC( DeCode): Giải mã lệnh. DC( Direct Current): Dòng một chiều. DP( DisPath): Gởi lệnh. DSK( DSP Starter Kit): Board mạch để thử nghiệm chương trình DSP. DSP( Digital Signal Processing): Xử lý tín hiệu số. EDMA( Enhanced Direct Memory Access): Truy cập bộ nhớ trực tiếp mở rộng. EMIF( External Memory Interface): Giao diện bộ nhớ ngoài. EP( Execute Packet): Gói lệnh thực thi. FIR( Finite Impulse Respone): Đáp ứng xung hữu hạn. FM( Frequency Modulation): Điều tần. FP( Fetch Packet): Gói lệnh được tìm về. GIE( Global Interrupt Enable): Cho phép ngắt toàn cục. HPI( Host - Port Interface): Giao diện cổng - chủ( CPU máy...

doc94 trang | Chia sẻ: haohao | Lượt xem: 1746 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Tổng quan về lọc số, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
DANH MỤC TỪ VIẾT TẮT ALU(Arithmetic - Logic Unit): Đơn vị số học - logic. AM( Amplitude Modulation): Điều biên. APA( Affine Projection Algorithm): Thuật toán hình chiếu quan hệ. CCS( Code Composer Studio): Phần mềm soạn mã, để chạy card DSK. CPU( Central Processing Unit): Đơn vị xử lý trung tâm. CSR( Control Status Register): Thanh ghi trạng thái điều khiển. DC( DeCode): Giải mã lệnh. DC( Direct Current): Dòng một chiều. DP( DisPath): Gởi lệnh. DSK( DSP Starter Kit): Board mạch để thử nghiệm chương trình DSP. DSP( Digital Signal Processing): Xử lý tín hiệu số. EDMA( Enhanced Direct Memory Access): Truy cập bộ nhớ trực tiếp mở rộng. EMIF( External Memory Interface): Giao diện bộ nhớ ngoài. EP( Execute Packet): Gói lệnh thực thi. FIR( Finite Impulse Respone): Đáp ứng xung hữu hạn. FM( Frequency Modulation): Điều tần. FP( Fetch Packet): Gói lệnh được tìm về. GIE( Global Interrupt Enable): Cho phép ngắt toàn cục. HPI( Host - Port Interface): Giao diện cổng - chủ( CPU máy tính). ID( IDentify): Chỉ số nhận dạng. IE( Interrupt Enable): Cho phép ngắt. IER( Interrupt Enable Register): Thanh ghi cho phép ngắt. IFR( Interrupt Flag Register): Thanh ghi cờ ngắt. IIR( Infinite Impulse Respone): Đáp ứng xung vô hạn. LMS( Least Mean Square ): Bình phương trung bình nhỏ nhất. McBSP( Multi-channel Buffered Serial Ports): Các cổng đệm nối tiếp đa kênh. MIPS( Million Instructions Per Second): Triệu lệnh trên giây. MSD( Mean Square Deviation): Độ lệch bình phương trung bình. MSE( Mean Square Error): Sai số bình phương trung bình. NLMS( Normalized Least Mean Square): Đơn giản hóa LMS. PC( Personal Computer): Máy tính cá nhân. PCM( Pulse Code Modulation): Điều chế xung mã. PG( Program address Generate): Tạo địa chỉ lệnh. PR( Program fetch packet Receive): Nhận gói lệnh tìm được. PS( Program address Send): Gởi địa chỉ lệnh. PW( Program access ready to Wait): Sẵn sàng truy cập lệnh. RLS( Recursive Least Square): Bình phương bé nhất đệ quy. ROC( Region Of Convergence): Miền hội tụ. SNR( Signal Noise Rate): Tỷ số tín hiệu trên nhiễu. TI( Texas Instruments): Hãng Texas Instruments. VLIW( Very Long Instruction Word): Độ dài từ lệnh rất lớn. WSS( Wide Sense Stationary): Dừng theo nghĩa rộng. 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. CHƯƠNG 1: TỔNG QUAN VỀ LỌC SỐ 1.1.MỞ ĐẦU: Lọc số là quá trình rất quan trọng của xử lý tín hiệu số, vì chính những khả năng phi thường của các bộ lọc số đã làm cho chúng trở nên rất phổ biến như ngày nay. Các bộ lọc số gồm có hai công dụng chính : phân tích tín hiệu và phục hồi tín hiệu. Phân tích tín hiệu được áp dụng khi tín hiệu mong muốn bị giao thoa với các tín hiệu khác hay bị các loại nhiễu tác động vào nó. Còn phục hồi tín hiệu là khi tín hiệu mà ta mong muốn hay cần để đánh giá, xét nghiệm bị sai lệch đi bởi nhiều yếu tố của môi truờng tác động vào; làm cho nó bị biến dạng gây ảnh hưởng đến kết quả đánh giá. Có hai kiểu lọc chính: Tương tự và số. Chúng khác nhau hoàn toàn về cấu tạo vật lý và cách làm việc. Một bộ lọc tương tự sử dụng các mạch điện tương tự được tạo ra từ các thiết bị như là điện trở, tụ điện, hay opamp, …Có các chuẩn kỹ thuật tốt đã tồn tại trong một thời gian dài cho việc thiết kế một mạch bộ lọc tương tự. Còn một bộ lọc số thì sử dụng một bộ xử lý số để hoạt động tính toán số hoá trên các giá trị được lấy mẫu của tín hiệu. Bộ xử lý có thể là một máy tính mục đích chung như một PC, hay một chíp DSP chuyên dụng. Các quá trình hoạt động của một bộ lọc số được thể hiện như hình 1.1 sau: Hình 1.1: Quá trình hoạt động của một bộ lọc số. Nói chung các công việc của bộ lọc số có thể được thực hiện bởi bộ lọc tương tự( Analog Filter). Các bộ lọc tương tự có ưu điểm là giá thành rẻ, tác động nhanh, dải động( Dynamic Range) về biên độ và tần số đều rộng. Tuy nhiên các bộ lọc số thì có các cấp độ thực hiện hơn hẳn các bộ lọc tương tự, ví dụ như: các bộ lọc số thông thấp có thể có độ lợi( Gain) 1+/-0.0002 từ DC đến 1000Hz và độ lợi sẽ nhỏ hơn 0.0002 ở các tần số trên 1001Hz. Tất cả các hoạt động diễn ra chỉ trong khoảng 1Hz. Điều này không thể thực hiện được ở các bộ lọc tương tự. Và vì vậy các bộ lọc số sẽ dần dần thay thế cho các bộ lọc tương tự với các ưu điểm cụ thể như sau: Một bộ lọc số thì có khả năng lập trình được, còn một bộ lọc tương tự, muốn thay đổi cấu trúc thì phải thiết kế lại bộ lọc. Các bộ lọc số dễ dàng thiết kế, dễ kiểm tra và dễ thi hành trên một máy tính mục đích chung hay một trạm làm việc. Đặc điểm các mạch lọc tượng tự là bị ảnh hưởng bởi sự trôi và phụ thuộc nhiều vào nhiệt độ. Các bộ lọc số thì không có các vấn đề này, và rất ổn định với cả thời gian và nhiệt độ. Các bộ lọc số có thể xử lý các tín hiệu tần số thấp rất chính xác. Tốc độ của công nghệ DSP ngày càng tăng lên, làm cho các bộ lọc số có khả năng xử lý các tín hiệu tần số cao trong miền âm tần( Radio Frequency), mà trong quá khứ là lĩnh vực độc quyền của công nghệ tương tự. Các bộ lọc số linh hoạt hơn nhiều trong xử lý tín hiệu, với nhiều cách khác nhau hay chính là sự xử lý thích nghi. Các bộ xử lý DSP nhanh có thể xử lý các tổ hợp phức tạp, phần cứng tương đối đơn giản, và mật độ tích hợp rất cao. Để nâng cao chất lượng của các bộ lọc tương tự, ta chú trọng khắc phục hạn chế của linh kiện như độ chính xác, độ ổn định, sự phụ thuộc vào nhiệt độ và .v.v. Còn đối với các bộ lọc số, vốn dĩ bản thân nó đã có nhiều ưu điểm nên ta chỉ chú trọng đến các hạn chế của tín hiệu và các phương pháp thiết kế về thuật toán chương trình xử lý tín hiệu. Trong chương này, chúng ta sẽ tìm hiểu về một số lý thuyết cơ sở về lọc tín hiệu, làm tiền đề cho việc thiết kế một bộ lọc số thích nghi. 1.2.GIỚI THIỆU VỀ LỌC SỐ: [14] Trong xử lý tín hiệu số, ta thường nói tín hiệu vào và ra của một bộ lọc đều ở miền thời gian, bởi vì tín hiệu thường được tạo ra bằng cách lấy mẫu ở các thời điểm cách đều nhau. Tuy nhiên, ta cũng có thể lấy mẫu ở các vị trí cách đều nhau trong không gian hay trong một số phạm trù khác; nhưng thông thường nhất là lấy mẫu trong miền thời gian và miền tấn số. Trong xử lý tín hiệu số thì từ miền thời gian ta có thể liên hệ tổng quát đến các phạm trù khác. Ví dụ hình 1.2 sau sẽ mô tả điều đó. Mỗi bộ lọc tuyến tính đều có một đáp ứng xung, một đáp ứng bước và một đáp ứng tần số. Mỗi đáp ứng này đều chứa đầy đủ thông tin về bộ lọc, nhưng dưới mỗi dạng khác nhau. Nếu một trong ba đáp ứng được xác định thì hai đáp ứng kia cũng sẽ được tính ra trực tiếp. Cả ba đáp ứng này đều rất quan trọng, vì chúng mô tả bộ lọc ở các hoàn cảnh khác nhau. Với đáp ứng xung là đầu ra của hệ thống khi đầu vào là xung đơn vị; đáp ứng bước là đầu ra của hệ thống khi đầu vào là bước nhảy đơn vị( hay xung bậc thang). Vì hàm bước nhảy là tích phân của hàm xung đơn vị, nên đáp ứng bước chính là tích phân của đáp ứng xung. Từ đó ta có hai cách tìm đáp ứng bậc thang: Đưa một sóng bước nhảy vào bộ lọc và xem kết quả ở đầu ra hay; Lấy tích phân của đáp ứng xung. Còn đáp ứng tần số lấy từ biến đổi Fourier của đáp ứng xung. Hình 1.2: Đáp ứng xung, đáp ứng bước và đáp ứng tần số của bộ lọc. Phương pháp trực tiếp nhất để thực hiện lọc số là dùng phép tích chập của tín hiệu vào với đáp ứng xung của bộ lọc số; khi đó đáp ứng xung được xem là cốt lõi cho việc thiết kế của bộ lọc. Một phương pháp khác để thực hiện lọc số là dùng phương pháp đệ quy. Khi bộ lọc được thực hiện bằng phép tích chập, mỗi mẫu trong tín hiệu ra được tính toán bằng cách tổ hợp có trọng số các mẫu trong tín hiệu vào. Các bộ lọc kiểu đệ quy mở rộng thêm quá trình trên bằng cách sử dụng cả các trị số đã tính được từ tín hiệu ra, bên cạch các điểm lấy từ tín hiệu vào; thay vì dùng một lõi lọc, các bộ lọc đệ quy được xác định bởi một dãy hệ số đệ quy. Các bộ lọc đệ quy còn được gọi là các bộ lọc có đáp ứng xung dài vô hạn IIR, còn các bộ lọc thực hiện theo phương pháp chập thì gọi là các bộ lọc có đáp ứng xung dài hữu hạn FIR. Có nhiều cách để con người biểu diễn thông tin qua tín hiệu như trong các kiểu điều chế hay mã hóa tín hiệu: AM, FM, PCM,…Còn các tín hiệu sinh ra trong tự nhiên thì chỉ có hai cách biểu diễn là theo miền thời gian hay là ở miền tần số. Thông tin được thể hiện trong miền thời gian được mô tả bằng độ lớn của sự kiện tại thời điểm xuất hiện. Mỗi mẫu trong tín hiệu cho thấy cái gì xuất hiện ở thời điểm ấy và độ lớn của nó. Trái lại, thông tin được biểu thị trong miền tần số có tính chất gián tiếp hơn và mỗi mẫu tín hiệu đơn độc không thể thể hiện được thông tin đầy đủ mà phải trong mối quan hệ nhiều điểm của tín hiệu. Từ đó ta thấy tầm quan trọng của đáp ứng bước và đáp ứng tần số; đáp ứng bước mô tả sự biến đổi của thông tin trong miền thời gian bởi hệ thống còn đáp ứng tần số cho thấy sự biến đổi của thông tin trong miền tần số. Với mỗi ứng dụng khác nhau thì tầm quan trọng của hai loại đáp ứng cũng khác nhau. 1.3.CÁC THÔNG SỐ CỦA HỆ THỐNG Ở MIỀN THỜI GIAN: [14] Gồm có ba thông số quan trọng sau. 1.3.1.Tốc độ chuyển đổi hay thời gian lên( Risetime): Tốc độ chuyển đổi thường được thể hiện bằng thời gian lên( hay số mẫu) giữa mức biên độ 10% đến 90%. Thời gian lên có thể không nhanh do nhiều nguyên nhân như tạp âm, hạn chế sẵn có của hệ thống.v.v. 1.3.2.Gợn sóng nhô( Overshoot) trong đáp ứng bậc thang: Thông thường phải loại bỏ gợn sóng nhô vì nó làm thay đổi biên độ các mẫu trong tín hiệu; đây là méo tín hiệu cơ bản của thông tin chứa trong miền thời gian. Gợn sóng nhô có thể do đại lượng đang đo hoặc do bộ lọc đang sử dụng. 1.3.3.Pha tuyến tính: Pha tuyến tính hay là sự đối xứng của nửa trên và nửa dưới của đáp ứng xung. Sự đối xứng này là cần thiết để làm cho các cạnh lên có dạng giống các cạch xuống. Hình 1.3 sau sẽ cho ta thấy các thông số đó của hai loại bộ lọc có chất lượng khác nhau. Hình 1.3: Các thông số của hệ thống ở miền thời gian. 1.4.CÁC THÔNG SỐ CỦA HỆ THỐNG Ở MIỀN TẦN SỐ: [14] Gồm các thông số sau: Dải thông( Passband): là dải gồm các tần số được bộ lọc cho qua. Dải chắn( Stopband): là dải chứa các tần số bị ngăn cản. Dải chuyển tiếp( Transitionband): là dải ở vị trí trung gian của dải thông với dải chắn. Độ dốc xuống nhanh: là ứng với mỗi dải chuyển tiếp rất hẹp. Tần số cắt: là tần số phân cách giữa dải thông và dải chuyển tiếp. Trong thiết kế tương tự, tần số cắt thường được xác định tại nơi biên độ giảm còn 0.707( tương ứng -3dB). Các bộ lọc số ít được tiêu chuẩn hóa và có thể xác định các tần số cắt tại các mức biên độ 99%, 90%, 70.7%, và 50%. Hình 1.4 sau thể hiện các đáp ứng của các bộ lọc cơ bản. Hình 1.4: Các đáp ứng tần số của các bộ lọc căn bản. Để phân tích các tần số kề sát nhau, bộ lọc phải có độ dốc xuống nhanh. Muốn cho các tần số của dải thông lọt qua hoàn toàn bộ lọc, phải không có gợn sóng dải thông. Cuối cùng, muốn ngăn chặn các tần số của dải chắn, cần có độ suy giảm dải chắn lớn; các điều đó được biểu diễn ở hình sau. Về mặt pha, trước hết hệ số pha không quan trọng trong hầu hết các ứng dụng ở miền tần số. Chẳng hạn, pha của một tín hiệu âm thanh hầu như hoàn toàn bất kỳ và không chứa thông tin hữu ích nào. Thứ hai, nếu pha là quan trọng thì ta lại có thể dễ dàng thực hiện các bộ lọc số có đáp ứng pha tuyến tính, tức là tất cả tần số đi qua bộ lọc không bị lệch pha. Trong khi các bộ lọc tương tự rất kém về mặt này. Hình 1.5 sau thể hiện ba thông số về đặc điểm làm việc của bộ lọc trong miền tần số. Hình 1.5: Các thông số của hệ thống ở miền tần số. 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] Việc thiết kế các bộ lọc số thực tế đều đi từ lý thuyết các bộ lọc số lý tưởng; gồm có bốn bộ lọc số lý tưởng là : Bộ lọc số thông thấp. Bộ lọc số thông cao. Bộ lọc số thông dải. Bộ lọc số chắn dải. Lọc ở đây có nghĩa là lọc tần số chính, vì vậy mà tất cả các đặc trưng của lọc tần số đều được cho theo đáp ứng biên độ. Các bộ lọc này được thiết kế bằng cách xuất phát từ một bộ lọc thông thấp, rồi chuyển đổi sang đáp ứng yêu cầu. Vì vậy ta chỉ khảo sát điển hình bộ lọc thông thấp thôi. Có hai phương pháp chuyển đổi từ thông thấp sang thông cao là: nghịch đảo phổ( Spectral Inversion) và đảo chiều phổ( Spectral Reversal). Hình 1.6 sau đây thể hiện sự nghịch đảo phổ. Hình 1.6: Sự nghịch đảo phổ. Phải thực hiện hai bước để đổi đáp ứng xung thông thấp thành thông cao: đầu tiên đổi dấu mỗi mẫu trong lõi lọc; sau đó thêm một mẫu vào tại tâm đối xứng. Như thế ta được đáp ứng xung lọc thông cao thể hiện ở hình c), và đáp ứng tần số thể hiện ở hình d). Sự nghịch đảo phổ đã lật ngược đáp ứng tần số, đổi dải thông thành dải chắn và ngược lại. Phương pháp thứ hai để chuyển đổi thông thấp thành thông cao, đó là đảo chiều phổ, được thể hiện ở hình 1.7 sau. Cũng tương tự như trên, đáp ứng xung của bộ lọc thông thấp ở hình a) tương ứng với đáp ứng tần số ở hình b). Đáp ứng xung của bộ lọc thông cao ở hình c) được tạo ra bằng cách đổi dấu các mẫu tín hiệu cách trước; điều này đã đảo lộn miền tần số từ trái sang phải. Tần số cắt của bộ lọc thông thấp trong ví dụ trên là 0.15, còn tần số cắt của bộ lọc thông cao là 0.35. Đổi dấu của mỗi tín hiệu cách một tương đương với nhân lõi lọc với một sóng sine có tần số 0.5. Điều này có tác dụng dịch chuyển miền tần số một khoảng tần số bằng 0.5. Hình 1.7: Sự đảo chiều phổ. Và hai hình sau đây cho chúng ta thấy cách kết hợp các đáp ứng xung của bộ lọc thông thấp và bộ lọc thông cao để tạo nên các bộ lọc thông dải và bộ lọc chắn dải. Khi cộng các đáp ứng xung sẽ tạo ra một bộ lọc chắn dải, còn khi nhân chập các đáp ứng xung sẽ cho một bộ lọc thông dải. Hình 1.8: Thiết kế bộ lọc thông dải. Hình 1.9: Thiết kế bộ lọc chắn dải. Các bộ lọc số lý tưởng đều không thể thực hiện được về vật lý mặc dù ta đã xét trường hợp h(n) thực bởi vì chiều dài của h(n) là vô cùng, hơn nữa h(n) là không nhân quả, tức là: L[h(n)] = [-, +] = h(n) 0 khi n < 0. Các bộ lọc số thực tế được đặc trưng bởi các thông số kỹ thuật trong miền tần số liên tục có bốn tham số chính là: : độ gợn sóng ở dải thông. : độ gợn sóng ở dải chắn. : tần số giới hạn( biên tần ) dải thông. : tần số giới hạn( biên tần ) dải chắn. Ngoài ra còn có tham số phụ là: - : bề rộng dải quá độ. Ví dụ minh họa đối với bộ lọc thông thấp bằng hình 1.10 sau: Dải quá độ Dải thông Dải chắn |H(ej)| 1+ 1 1- 0 Hình 1.10: Các tham số kỹ thuật của bộ lọc thông thấp. 1.6.CẤU TRÚC CĂN BẢN CỦA CÁC BỘ LỌC SỐ: [2] & [3] & [4] & [5] Có hai kiểu bộ lọc số căn bản đó là: bộ lọc FIR và IIR; Các bộ lọc FIR có hai đặc điểm quan trọng so với các bộ lọc IIR: thứ nhất, các bộ lọc FIR chắc chắn ổn định, thậm chí sau khi các hệ số của bộ lọc đã được lượng tử hóa. Thứ hai, các bộ lọc FIR dễ dàng được ràng buộc để có pha tuyến tính. Và sau đây ta sẽ đi khảo sát từng loại bộ lọc đó; đầu tiên chúng ta xem lại phép biến đổi z, là công cụ hữu hiệu cho việc phân tích và thiết kế các bộ lọc số. 1.6.1.Bộ lọc FIR: 1.6.1.1.Phép biến đổi Z( Z-Transform): Biến đổi Z là công cụ hữu hiệu trong việc phân tích các tín hiệu và hệ thống thời gian rời rạc, và là công cụ tương ứng với phép biến đổi Laplace đối với các tín hiệu và hệ thống thời gian liên tục; nó có thể được sử dụng để giải các phương trình sai phân hệ số hằng, tính toán đáp ứng của hệ thống tuyến tính và bất biến đổi với tín hiệu ngỏ vào cho trước, thiết kế các bộ lọc tuyến tính. Biến đổi Z của tín hiệu thời gian rời rạc x(n) được định nghĩa bởi: X(z)= (1.1) Với z= rej là một biến phức. Để ký hiệu, nếu x(n) có biến đổi z là X(z), ta viết: x(n)X(z). Biến đổi z có thể được xem như là biến đổi Fourier thời gian rời rạc của một chuỗi hàm mũ có trọng số. cụ thể với z = rej : X(z) = = = (1.2) Định nghĩa mặt phẳng z phức: z = Re(z) + jIm(z) = rej. Bằng các phân tích thành thừa số các đa thức tử số và mẫu số, biến đổi z hữu tỉ được biểu diễn như sau: X(z) = C. (1.3) Các nghiệm của đa thức tử số, , được gọi là các zero của X(z) còn các nghiệm của đa thức mẫu số, , được gọi là các cực( Pole) của X(z). Miền hội tụ( ROC): . Các cặp biến đổi z thông dụng thể hiện ở bảng 1.1 sau: Bảng 1.1: Các cặp biến đổi z thông dụng. Chuỗi Biến đổi z Miền hội tụ - n -n Cos(n)u(n) Sin(n)u(n) 1 Mọi z |z| > || |z| < || |z| > || |z| < || |z| >1 |z| >1 Các tính chất của biến đổi z được cho ở bảng 1.2 sau: Bảng 1.2: Các tính chất của biến đổi z. Tính chất Chuỗi Biến đổi z Miền hội tụ Tuyến tính Tịnh tiến Đảo ngược Nhân hàm mũ Phép chập Liên hợp Đạo hàm ax(n) + bx(n) x(n-n0) x(-n) x(n) x(n)*h(n) x*(n) nx(n) aX(z) + bX(z) z-X(z) X(z-1) X(z) X(z)H(z) X*(z*) -z Chứa Rx Ry Rx 1/Rx ||Rx Chứa Rx Rh Rx Rx 1.6.1.2.Các bộ lọc FIR: Phương trình tích chập để thiết kế bộ lọc FIR tổng quát là: y(n) = (1.4) Trong việc thiết kế, chúng ta sử dụng một số hữu hạn là N; và phương trình trên được viết lại như sau: y(n) = (1.5) Ở đây n là thời gian rời rạc, y(n) là đáp ứng đầu ra đối với tín hiệu đầu vào rời rạc x(n) tại thời điểm n, h(n) là đáp ứng xung của bộ lọc. Biến đổi z phương trình(1.4) được : Y(z) = h(0)X(z) + h(1)z-1X(z) + … + h(N)z-NX(z) (1.6) Phương trình (1.6) biểu diễn một phép tích chập theo thời gian giữa các hệ số và các mẫu tín hiệu vào. Phép tích chập này tương đương với một phép nhân trong miền tần số, hay là: Y(z) = H(z)X(Z) (1.7) Ở đây H(z) là biến đổi z của h(k), là hàm truyền: H(z) = = h(0) + h(1)z-1 + … + h(N)z-N = (1.8) x(n) z-1 z-1 z-1 y(n) Hình 1.11 sau thể hiện một cấu trúc bộ lọc FIR biểu diễn phương trình(1.5) hay phương trình(1.6): h(N) h(N-1) h(1) h(0) Hình 1.11: Cấu trúc bộ lọc FIR thể hiện các bộ trễ. Phương trình(1.4) cho thấy có thể thực hiện một bộ lọc FIR nếu biết tín hiệu vào ở thời điểm n là x(n) và các tín hiệu vào bị làm trễ là x(n-k). Không cần các tín hiệu hồi tiếp cũng như các tín hiệu ngỏ ra trước đó. Vì vậy, bộ lọc FIR còn gọi là bộ lọc không có tính đệ quy, thuận chiều hay trì hoãn từng đoạn. Một đặc tính quan trọng của một bộ lọc FIR là nó có thể bảo đảm sự tuyến tính pha. Với pha tuyến tính, tất cả ngỏ và hợp bởi các sóng sine được làm trễ bởi vài số lượng lớn. Đặc tính này có thể rất hữu ích trong các ứng dụng cũng như phân tích lời nói, mà ở đây các pha bị bóp méo rất khó chịu. 1.6.1.3.Cấu trúc hàng rào( Lattice) FIR: Cấu trúc hàng rào rất được sử dụng cho các ứng dụng trong việc lọc thích nghi và xử lý lời nói. Một cấu trúc hàng rào N bậc được thể hiện ở hình sau: z-1 z-1 z-1 x(n) y1(n) y2(n) yN-1(n) yN(n) e1(n) e2(n) eN(n) k1 k2 kN k1 k2 kN Hình 1.12: Cấu trúc hàng rào FIR. Với hệ thống hàng rào FIR bậc N ta có : yN(n) = (1.9) eN(n) = (1.10) Với a0 = 1. Chúng ta biến đổi z hai phương trình (1.9) và (1.10) sẽ tìm được đáp ứng xung của chúng như sau: YN(z) = (1.11) EN(z) = (1.12) Chú ý rằng : EN(z) = z-NYN(1/z) (1.13) Trong sự tổng quát thì: kN = aN (1.14) Từ hai phương trình (1.11) và (1.12) Ta tìm được : a(r-1)i = , i = 0,1,2,…,r-1 (1.15) Với r = N, N-1, …, 1; |kr| 1. 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): Có nhiều loại cửa sổ khác nhau được sử dụng trong phương pháp thiết kế sử dụng cửa sổ, một vài cửa sổ được cho trong bảng 1.3 sau: Bảng 1.3: Một vài cửa sổ thông dụng. Chữ nhật w(n) = Hanning w(n) = Hamming Blackman Trong đó w(n) là cửa sổ có chiều dài hữu hạn, đối xứng xung quanh điểm giữa( w(n) = w(N-n)). Ngoài ra bộ lọc FIR còn có một số cấu trúc khác được thể hiện ở các hình vẽ sau: Hình 1.13: Sự thực hiện bộ lọc FIR dạng trực tiếp. Dạng trực tiếp này rất thường được sử dụng cho việc thiết kế một bộ lọc khử nhiễu. Hình 1.14: Sự thực hiện ngang hàng của một bộ lọc FIR. Hình 1.15: Sự thực hiện bộ lọc FIR dạng tế bào của bộ nhân/tích luỹ song song. Hình 1.16: Sự thực hiện bộ lọc FIR dạng chuyển vị. 1.6.2.Bộ lọc IIR: Lọc FIR không có tương ứng trong dạng tương tự, còn lọc IIR có thể được thiết kế từ lọc tương tự bằng phép biến đổi song tuyến tính, ánh xạ một-một từ miền s sang miền z và ngược lại: s = (1.16) Suy ra: z = (1.17) Đây là kỹ thuật thông dụng nhất để biến đổi một bộ lọc tương tự sang lọc rời rạc: hàm truyền của một bộ lọc tương tự trong miền s có thể đuợc chuyển thành một hàm truyền thời gian rời rạc trong miền z. Xét phương trình vào ra tổng quát: y(n) = - (1.18) = a0x(n) + a1x(n-1) +…+ aNx(n-N) – b1y(n-1) – b2y(n-2) - …- bMy(n-M) (1.19) Phương trình( 1.19) biểu diễn một bộ lọc có đáp ứng xung vô hạn( IIR). Tín hiệu ra của bộ lọc này tuỳ thuộc vào các tín hiệu vào cũng như các tín hiệu ra trước đó. Tín hiệu ra y(n), ở thời điểm n, không những tuỳ thuộc vào các tín hiệu vào hiện thời x(n), ở thời điểm n; và các tín hiệu vào trước đó x(n-1), x(n-2),. .., x(n-N), mà còn phụ thuộc cả vào các tín hiệu ra trước đó y(n-1), y(n-2),…, y(n-M). Giả thiết các điều kiện ban đầu bằng 0 đối với phương trình(1.19); ta lấy biến đổi z của y(n), ta được: Y(z) = a0X(z) + a1z-1X(z) +…+aNz-NX(z) – b1z-1Y(z) – b2z-2Y(z)-…-bMz-MY(z) (1.20) Cho N = M ở (1.20), ta sẽ có hàm truyền: H(z) = = = (1.21) Nhân và chia(1.21) cho zN, được: H(z) = = C (1.22) Phương trình(1.22) mô tả một hàm truyền với N điểm 0 và N điểm cực. Vì để cho hệ thống ổn định, tất cả các cực phải nằm bên trong đường tròn đơn vị do đó: 1.Nếu |pi| < 1, h(n) 0 khi n, do đó hệ thống ổn định. 2.Nếu |pi| > 1, h(n) khi n, do đó hệ thống không ổn định. Chú ý rằng nếu |pi| = 1, hệ thống ổn định bên lề( Biên giới giữa ổn định và không ổn định) và cho đáp ứng dao động. Hệ thống không ổn định khi có nhiều cực trên đường tròn đơn vị. Nếu tất cả các hệ số bj trong phương trình(1.22) đều bằng 0, thì sẽ chỉ có các cực nằm tại gốc trong mặt phẳng z. Khi đó, các phương trình(1.18) và (1.19) trở thành phương trình tích chập biểu diễn cho một bộ lọc FIR. Hệ thống sẽ chỉ còn là một bộ lọc FIR không đệ quy và ổn định. Sau đây là một số cấu trúc biểu diễn các bộ lọc IIR. 1.6.2.1.Cấu trúc bộ lọc IIR dạng trực tiếp I: Hình 1.17 sau đây thể hiện cấu trúc dạng trực tiếp I có thể dùng để thực hiện bộ lọc IIR cho bởi phương trình(1.19). Đối với bộ lọc bậc N, cấu trúc này có 2N bộ trễ( Delay) biểu thị bằng z-1. Ví dụ, bộ lọc bậc hai với N = 2 có 4 phần tử trễ( trì hoãn). Hình 1.17: Cấu trúc bộ lọc IIR dạng trực tiếp I. 1.6.2.2.Cấu trúc bộ lọc IIR dạng trực tiếp II: Cấu trúc dạng trực tiếp II thể hiện ở hình sau, là một trong các cấu trúc thông dụng nhất. Cấu trúc này chỉ yêu cầu số phần tử trễ bằng một nửa so với dạng trực tiếp I. Như bộ lọc bậc 2 chỉ cần 2 phần tử z-1 thay vì 4 như ở dạng I. Ta chứng tỏ phương trình (1.19) thực hiện được bởi dạng trực tiếp II. Gọi U(z) là biến xác định bởi : U(z) = (1.23) Ở đây, D(z) là đa thức mẫu số của hàm truyền(1.21). Từ (1.21) suy ra : Y(z) = = U(z)D(z) (1.24) Y(z) = U(z)[a0 + a1z-1 + …+ aNz-N] (1.25) Hình 1.18 : Cấu trúc bộ lọc IIR dạng trực tiếp II. Từ (1.23), suy ra: X(z) = U(z)D(z) = U(z) [1 + b1z-1 +…+ bNz-N] (1.26) Biến đổi z ngược của (1.26) được: x(n) = u(n) + b1u(n-1) +…+ bNu(n-N) (1.27) Suy ra: u(n) = x(n) - b1u(n-1) -…- bNu(n-N) (1.28) Biến đổi z ngược phương trình(1.25) được: y(n) = a0u(n) + a1u(n-1) +…+ aNu(n-N) (1.29) Cấu trúc IIR dạng trực tiếp II có thể được biểu diễn bởi(1.28) và (1.29). 1.7.KẾT LUẬN: Chương này nêu tổng quan về lọc số, các thông số của hệ thống ở miền thời gian, ở miền tần số. Từ việc nghiên cứu bộ lọc thông thấp, có thể tạo ra bộ lọc thông cao, thông dải hay chắn dải từ bộ lọc thông thấp bằng hai phương pháp: Nghịch đảo phổ và đảo chiều phổ. Phần này cũng đã nêu lên được một cách tổng quát hai cấu trúc của bộ lọc số là: FIR và IIR; làm nền tảng để tìm hiểu các bộ lọc thích nghi ở chương tiếp theo sau đây. CHƯƠNG 2: CÁC BỘ LỌC THÍCH NGHI 2.1.MỞ ĐẦU: Các bộ lọc thích nghi( Adaptive Filter) được sử dụng tốt nhất trong các loại bộ lọc, ở các tín hiệu có điều kiện hay các thông số hệ thống thay đổi rất chậm và bộ lọc đã được điều chỉnh để bù cho sự thay đổi này. Thuật toán LMS là một thuật toán dò tìm được sử dụng để cung cấp một kế hoạch quản lý tốt việc điều chỉnh các hệ số bộ lọc, ngoài ra còn có một số thuât toán khác cũng có khả năng thích nghi như: RLS, NLMS,…Mỗi thuật toán có các ưu, khuyết điểm khác nhau; chúng ta sẽ tìm hiểu rõ điều đó qua các phần sau đây. 2.2.MỘT SỐ KHÁI NIỆM CƠ BẢN: 2.2.1.Biến ngẫu nhiên: Khi ta thực hiện một thí nghiệm ngẫu nhiên, tập hợp tất cả các kết quả( loại trừ nhau) có thể xảy ra gọi là không gian mẫu của thí nghiệm ngẫu nhiên đó. Sự kiện là tập hợp có thể gồm một hay nhiều kết quả trong một không gian mẫu. Như vậy biến ngẫu nhiên là phép ánh xạ các sự kiện sang các giá trị thực( hay phức). 2.2.2.Quá trình ngẫu nhiên: Quá trình ngẫu nhiên là tập hợp các hàm số có các thông số( thường là thông số thời gian), mà có thuộc tính thống kê nào đó. Một quá trình ngẫu nhiên có thể được biểu diễn bởi một tập hợp các biến ngẫu nhiên. Một quá trình ngẫu nhiên được gọi là dừng chặt( Strictly Stationary) nếu các thuộc tính thống kê của nó không thay đổi khi dịch chuyển đi một khoảng thời gian nào đó. Chẳng hạn, đối với quá trình ngẫu nhiên rời rạc theo thời gian được biểu diễn bởi chuỗi tín hiệu theo thời gian u(n), u(n-1),…, u(n-M+1) gọi là dừng chặt khi hàm mật độ đồng xác suất( Joint Probability Density Function) của nó tại các thời điểm quan sát n, n-1,…, n-M+1 là không đổi khi n thay đổi( M không đổi). 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: Thực tế cho thấy khó có thể xác định hàm mật độ đồng xác suất của tập hợp các thời điểm quan sát trong quá trình ngẫu nhiên. Do đó chúng ta cần quan tâm đến các đặc tính thống kê từng phần( Partial) của nó. Xét một quá trình ngẫu nhiên rời rạc theo thời gian như trên ta định nghĩa kỳ vọng và hàm giá trị trung bình của biến ngẫu nhiên trong quá trình ngẫu nhiên như sau: Kỳ vọng của đại lượng ngẫu nhiên là trung bình theo xác suất các giá trị có thể nhận của đại lượng ngẫu nhiên đó, kí hiệu là E. Còn hàm giá trị trung bình (n): (n) = E[u(n)] (2.1) Trong đó, E là toán tử kỳ vọng thống kê, và hàm tự tương quan của quá trình ngẫu nhiên được định nghĩa: r( n, n-k) = E[u(n)u*(n-k)]; k = 1, 2,…, (2.2) Trong đó, dấu * là ký hiệu của liên hợp phức. Khi một quá trình ngẫu nhiên là dừng chặt thì lúc đó ta có: Hàm giá trị trung bình của quá trình ngẫu nhiên luôn luôn bằng hằng số , với mọi n. Hàm tự tương quan chỉ còn phụ thuộc vào sự khác nhau trong khoảng thời gian quan sát giữa thời điểm n và n-k, chính là k: r( n, n-k) = r(k). Tuy nhiên hai phương trình trên không đảm bảo rằng quá trình ngẫu nhiên là dừng chặt. Nhưng nếu, hai phương trình trên được đảm bảo, ta nói rằng quá trình ngẫu nhiên rời rạc theo thời gian là dừng theo nghĩa rộng( WSS). 2.2.4.Tương quan của các tín hiệu: Trong việc xử lý tín hiệu, chúng ta luôn cần phải so sánh các tín hiệu với nhau; Một phương pháp so sánh hay dùng nhất đó là tương quan( Correlation) sẽ được mô tả sau đây: Định nghĩa tương quan chéo( Cross_Correlation): Giả sử có hai dãy x(n) và y(n), tối thiểu một trong hai dãy có năng lượng hữu hạn. Tương quan chéo của x(n) và y(n) được định nghĩa như sau: rxy(n) = (2.3) Định nghĩa tự tương quan( Auto_Correlation): Trong định nghĩa tương quan chéo nếu ta có x(n) y(n) thì ta có định nghĩa tự tương quan. Vậy hàm tự tương quan được định nghĩa như sau: rxx(n) = (2.4) rxx(n) là hàm tự tương quan của dãy x(n). 2.3.GIỚI THIỆU LỌC THÍCH NGHI: [9] & [10] Trong các bộ lọc số quy ước( FIR và IIR), các thông số của quá trình lọc dùng để xác định các đặc trưng của hệ thống coi như đã biết, các thông số này có thể biến đổi theo thời gian, nhưng bản chất của sự biến đổi thì coi như đã biết. Trong nhiều bài toán thực tiễn, một số thông số có thể có độ bất định lớn do dữ liệu thử nghiệm trước về quá trình không được thích hợp. Một số thông số có thể biến thiên theo thời gian nhưng bản chất chính xác của sự biên thiên thì không thể tiên đoán được. Trong các trường hợp đó, chúng ta cần phải thiết kế bộ lọc có khả năng tự nắm bắt, để có thể thích nghi với hoàn cảnh hiện thời. d x e y Bäü loüc thêch nghi + - Các hệ số( Coefficient) của một bộ lọc thích nghi được hiệu chỉnh để bù lại các thay đổi trong các tín hiệu vào, tín hiệu ra hoặc trong các thông số của hệ thống. Thay vì bị cứng nhắc, một hệ thống thích nghi có thể nắm bắt các đặc trưng của tín hiệu và dò theo các biến đổi chậm. Một bộ lọc thích nghi có thể rất hữu ích cho sự bất định về các đặc trưng của một tín hiệu hoặc khi các đặc trưng đó thay đổi. Hình 2.1 sau thể hiện một cấu trúc cơ bản của bộ lọc thích nghi. Hình 2.1: Cấu trúc bộ lọc thích nghi cơ bản. Trong đó ngỏ ra y của bộ lọc thích nghi được so sánh với tín hiệu mong muốn( Desired) d để cho ra tín hiệu sai số( Error ) e, tín hiệu sai số này được hồi tiếp về để điều chỉnh bộ lọc thích nghi. Các hệ số của bộ lọc thích nghi được điều chỉnh, hay tối ưu hóa, sử dụng các thuật toán như LMS, dựa trên tín hiệu sai số e. Ở phần các thuật toán của bộ lọc thích nghi chúng ta sẽ nói rõ về thuật toán này. 2.4.CÁC CẤU TRÚC THÍCH NGHI: [9] & [10] Một số các cấu trúc thích nghi đã được sử dụng cho các ứng dụng khác nhau trong lọc thích nghi. Mỗi ứng dụng có một cấu trúc thích nghi cụ thể tương ứng. Sau đây chúng ta chỉ xét ba trường hợp cụ thể đó là: thứ nhất, cấu trúc thích nghi cho khử nhiễu( Noise Cancellation); thứ hai, cho hệ thống định vị( System Identification); và thứ ba, cho các bộ tiên đoán( Predictor) thích nghi. 2.4.1.Khử nhiễu: Hình 2.2 sau đây thể hiện cho cấu trúc để ứng dụng khử nhiễu. Bộ lọc thích nghi d + n + e n’ y Hình 2.2: Cấu trúc bộ lọc thích nghi cho khử nhiễu. Tín hiệu mong muốn d, đã bị sửa đổi bởi nhiễu cộng, n, không tương quan. Nhiễu n’ có thể đến từ vài nguồn giống như n nhưng đã bị thay đổi bởi điều kiện môi trường. Ngỏ ra y được thích ứng với nhiễu n, khi điều này xảy ra, tín hiệu sai số e tiến đến gần tín hiệu mong muốn d; toàn bộ ngỏ ra là tín hiệu sai số e này. 2.4.2.Nhận dạng hệ thống: Hình 2.3 sau đây thể hiện một cấu trúc thích nghi được dùng cho ứng dụng nhận dạng hay mô hình mẫu. Cùng một tín hiệu vào, được đưa đến hai hệ thống song song là hệ thống chưa xác định và bộ lọc thích nghi. Tín hiệu sai số e là sự khác nhau giữa đáp ứng của hệ thống chưa biết d và đáp ứng của bộ lọc thích nghi y. Tín hiệu sai số này được phản hồi về bộ lọc thích nghi và được dùng để cập nhật( Update) các hệ số cho bộ lọc cho đến khi toàn bộ ngỏ ra y = d. Khi điều này xảy ra, hoạt động xử lý thích nghi được kết thúc, và e tiến gần đến 0. Trong sự kết hợp này, bộ lọc thích nghi làm mẫu cho hệ thống chưa xác định. y x d e + - Bộ lọc thích nghi Hệ thống chưa biết Hình 2.3: Cấu trúc bộ lọc thích nghi cho nhận dạng hệ thống. 2.4.3.Bộ dự đoán thích nghi: Hình vẽ 2.4 sau đây sẽ minh họa cho cấu trúc của một bộ dự đoán thích nghi, mà có thể cung cấp một sự ước lượng của đầu vào. Bộ lọc thích nghi Khối trễ Đầu vào IN1 = d(n) e(n) IN2 y(n) Hình 2.4: Cấu trúc cho bộ dự đoán thích nghi. 2.5.CÁC BỘ LỌC WIENER: [2] & [9] & [10] 2.5.1.Giới thiệu: Khác với hầu hết các loại bộ lọc số được thiết kế dựa trên các khái niệm trong miền tần số, các bộ lọc Wiener được phát triển dựa trên các khái niệm về miền thời gian. Các bộ lọc Wiener được thiết kế để tối thiểu hóa sai số trung bình bình phương( MSE) giữa đầu ra của nó và một tín hiệu ra mong muốn hay yêu cầu. Vì vậy chúng được cho là tối ưu theo nghĩa của sai số trung bình bình phương. Định nghĩa đặc biệt này về tối ưu có thuận lợi là dẫn đến các lời giải có dạng hữu hạn cho các hệ số của bộ lọc về mặt hàm tự tương quan của tín hiệu đi vào bộ lọc và hàm tương quan chéo giữa tín hiệu vào và tín hiệu ra yêu cầu. Bộ lọc thích nghi chính là cơ chế để thực hiện bộ xấp xỉ Wiener tối ưu khi không có được các hàm tự tương quan và tương quan chéo cụ thể. Thay vào chổ các hàm đó, cần có một chuỗi các tín hiệu vào thứ hai, có tên là tín hiệu vào huấn luyện hay tín hiệu vào mong muốn, như thể hiện ở hình vẽ 2.5 sau: Bộ lọc tuyến tính Dãy xung theo dõi Tín hiệu ước lượng {y(n)} {x(n)} Dãy xung huấn luyện {x(n)} Hình 2.5: Bộ ước lượng tuyến tính bộ lọc thích nghi. Tín hiệu vào huấn luyện có phần nào đó gần đúng với tín hiệu ra mong muốn của một bộ lọc tối ưu. Tín hiệu vào nói trên có trong nhiều ứng dụng của bộ lọc thích nghi. Đáp ứng xung của bộ lọc thích nghi sau đó sẽ được biến đổi dần dần khi ngày càng có thêm nhiều dãy tín hiệu được theo dõi và nhiều dãy tín hiệu huấn luyện, khiến cho dãy tín hiệu ra x(n) càng gần đúng với dãy tín hiệu huấn luyện x(n), và nhờ đó ta xấp xỉ được tín hiệu ra của bộ lọc tối ưu. Và hình 2.6 sau đây sẽ minh họa cho bài toán thường gặp trong ước lượng tuyến tính. Hệ làm méo tín hiệu Tạp âm bổ sung Dãy tín hiệu hay Dãy xung quan sát dãy mang tin {x(n)} {y(n)} Hình 2.6: Bài toán ước lượng. Tín hiệu ta chú ý đến là dãy {x(n)}, nhưng ta không thể quan sát nó trực tiếp được, mà chỉ có thể quan sát dãy {y(n)}, được tạo ra bằng cách đưa dãy {x(n)} vào một hệ tuyến tính, làm méo tín hiệu, và bổ sung tạp âm hoặc nhiễu vào đầu ra. Để tái tạo {x(n)} từ {y(n)} ta cần phải thiết kế một bộ lọc tuyến tính như ở hình 2.7 sau. Bộ lọc tuyến tính Dãy xung quan sát {y(n)} Tín hiệu ước lượng {x(n)} Sai số {e(n)} Tín hiệu {x(n)} Hình 2.7: Ước lượng tuyến tính. Đầu ra của bộ lọc mới này là dãy {x(n)}, ước lượng của tín hiệu ta quan tâm là {x(n)}. Chất lượng của tín hiệu ước lượng được đặc trưng bằng hàm sai số {e(n)}, là hiệu của dãy mang thông tin và dãy ước lượng: e(n) = x(n) – x(n) (2.5) f(e) e Dĩ nhiên, sai số nhỏ nhất là của ước lượng tốt và sai số lớn là dấu hiệu của ước lượng kém. Ta cần chọn một đáp ứng xung, hoặc một đáp ứng tần số tương đương cho bộ lọc ở hình 2.7 sao cho sai số càng nhỏ càng tốt. Đây chính là bài toán tối ưu hóa. Ta cần tối thiểu hóa hàm f(e) của sai số đối với đáp ứng xung. Một cách thuận tiện là lấy vi phân của hàm f(e) đối với mỗi điểm trong đáp ứng xung và sau đó tìm một giá trị cho đáp ứng xung khiến cho tất cả vi phân đồng loạt bằng 0. Do đó, chọn f(e) = e2 là thuận lợi nhất, được minh họa ở hình 2.8 sau. Hình 2.8: Hàm bình phương sai số. Vì hàm bậc hai đơn giản này dễ lấy vi phân và khiến cho công việc tìm đáp ứng xung thích hợp dễ thực hiện. Ngoài ra, vì thường xuyên phải làm việc với các tín hiệu ngẫu nhiên, nên thường lựa chọn hàm giá trung bình của bình phương sai số: (n) = E[e2(n)] (2.6) Như vậy bộ lọc tối ưu được định nghĩa như bộ lọc giảm thiểu được sai số trung bình bình phương, trong nhóm tất cả các bộ lọc tuyến tính có thể được sử dụng. 2.5.2.Bộ lọc FIR Wiener: Nếu lúc đầu ta giới hạn bộ lọc tuyến tính ở hình 2.7 phải là FIR, thì đầu ra x(n) của nó được tạo ra từ một tổng hữu hạn của N tích: x(n) = (2.7) Tổng này có thể viết gọn hơn dưới dạng một tích vector: x(n) = hTy(n) (2.8) Phương trình này sẽ tương đương với phương trình sau: x(n) = yT(n)h (2.9) Ở đây, h là vector đáp ứng xung, là ma trận (Nx1), với N là chiều dài của N phần tử đầu tiên của chuỗi đáp ứng xung {hj}: h = [h0 h1 … hN-1]T (2.10) Và y(n) là vector tín hiệu chứa N phần tử cuối của chuỗi xung vào {y(n)}: y(n) = [y(n) y(n-1) … y(n-N+1)]T (2.11) Số mũ T biểu thị vector hay ma trận chuyển vị.Cấu trúc của một bộ lọc FIR Wiener được minh họa ở hình 2.9 sau đây. z-1 z-1 z-1 Dãy tín hiệu quan sát {y(n)} h0 h1 hN Tín hiệu ước lượng {x(n)} Hình 2.9: Cấu trúc bộ lọc ước lượng FIR. Nếu cả hai chuỗi tín hiệu {x(n)} và {y(n)} đều dừng, thì ta thay các phương trình(2.5) và (2.8) vào phương trình (2.6), ta được biểu thức cho hàm giá MSE như sau: = E[(x(n)-hTy(n))2] = E[x2(n)-2hTy(n)x(n)+hTy(n)yT(n)h] = E[x2(n)]-2hTyx+ hTyy h (2.12) Ở đây, yy là ma trận tự tương quan( N x N) của tín hiệu y: yy = E[y(n)yT(n)] (2.13) Còn yx là vector tương quan chéo N phần tử: yx = E[y(n)x(n)] (2.14) Như vậy, đối với một bộ lọc FIR, hàm giá MSE là một hàm bậc hai của các vector của các phân tử của vector đáp ứng xung h. Để được MSE cực tiểu, ta lấy vi phân MSE đối với mỗi phần tử của đáp ứng xung hj , lần lượt, rồi cho tất cả các vi phân đồng loạt bằng 0, như sau đây: = E[] = E[2e(n)] Thay e(n) trong vi phân từng phần dùng các phương trình (2.5) và (2.8): = E[2e(n) {x(n)-hTy(n)}] Và, khai triển tín hiệu ra hTy(n) của bộ lọc thành tổng của N tích trong đó chỉ có một tích chứa hj : = E[2e(n) {-hjy(n-j)}] = E[-2e(n)y(n-j)] = 0; ứng với j = 0,1,…, N-1 Lặp lại phép vi phân trên cho mọi giá trị của j, tạo ra 1 nhóm N phương trình vô hướng. Nhóm phương trình này tóm tắt nguyên tắc trực giao thống kê cho một bộ ước lượng FIR. Có thể nói, sai số đầu ra, e(n), đi đôi với một bộ lọc tối ưu thì không tương quan với tín hiệu quan sát nào cả trong số các tín hiệu y(n), y(n-1), .., y(n-N+1), đang có trong bộ lọc. Nhóm phương trình cũng có thể viết gọn hơn dưới dạng vector bằng cách tập trung tất cả các số hạng vi phân vào 1 vector có tên là vector Gradient V: = = -2E = -2Ee(n) = 2E[y(n)e(n)] (2.15) Thay e(n) vào(2.15) được: = -2E[y(n)(x(n) – yT(n)h)] = -2E[y(n)x(n)] + 2E[y(n)yT(n)h] (2.16) Dùng định nghĩa của ma trận tự tương quan và vector tương quan chéo từ các phương trình( 2.13) và ( 2.14): = -2yx + 2yy h (2.17) Như vậy, đáp ứng xung tối ưu hopt giải thiểu sai số MSE sẽ là nghiệm của nhóm N phương trình tuyến tính đồng loạt bằng 0, đó là: yy hopt = yx (2.18) Bộ lọc xác định bởi phương trình (2.18) là bộ lọc FIR Wiener hoặc bộ lọc Levinson. Sai số MSE cực tiểu, opt, nhận được bằng cách thay phương trình (2.18) vào phương trình(2.12): opt = E[x2(n)] - hoptyx (2.19) Phương trình(2.18) là một phương tiện để thiết kế các bộ lọc FIR tuyến tính tối ưu. Tuy nhiên, muốn tính đáp ứng xung của bộ lọc tối ưu, cần biết rõ ma trận tự tương quan và vector tương quan chéo. 2.5.3.Các thuật toán lọc thích nghi: 2.5.3.1.Giới thiệu: Các hệ thống xử lý tín hiệu qui ước làm việc theo kiểu vòng hở, nghĩa là cứ thực hiện cùng thao tác xử lý đó trong thời gian hiện tại không cần biết thao tác đó có cho kết quả đúng trong thời gian trước đó hay không. Hay là, các hệ thống đó giả thiết sự giảm cấp trong tín hiệu là đại lượng đã biết trước và bất biến theo thời gian. Việc thiết kế các bộ lọc tuyến tính tối ưu, hay còn gọi là ước lượng này, như lọc FIR Wiener đòi hỏi kiến thức rõ ràng hơn về môi trường của tín hiệu dưới dạng các hàm tương quan, mô hình không gian trạng thái hay ngay cả các hàm mật độ xác suất. Trong đa số các trường hợp, các hàm này là ẩn số và/hoặc là biến thiên theo thời gian. Các bộ xử lý thích nghi được thiết kế để thực hiện gần đúng như các bộ ước lượng này. Chúng làm việc với vòng hồi tiếp kín, trong đó đáp ứng tần số của bộ xử lý được khống chế bởi thuật toán hồi tiếp. Điều này cho phép chúng bù lại các méo dạng biến đổi theo thời gian và vẫn đạt khả năng vận hành gần với hàm ước lượng tối ưu. Các bộ lọc thích nghi dùng một bộ lọc lập trình được có đáp ứng tần số, hoặc hàm truyền bị biến đổi, hoặc thích nghi hóa mà không làm suy giảm các thành phần mong muốn của một tín hiệu, và chỉ làm suy giảm các tín hiệu can nhiễu, tức là làm giảm thiểu các méo dạng có trong tín hiệu vào. Cách thức biến đổi đáp ứng xung của bộ lọc thích nghi chính là thuật toán lọc thích nghi. Như vậy, bộ lọc thích nghi là bộ lọc biến đổi theo thời gian mà đáp ứng xung tại một thời điểm nào đó tùy thuộc vào tín hiệu vào, tín hiệu mong muốn và vào thuật toán lọc thích nghi. Bản chất biến đổi theo thời gian của một bộ lọc thích nghi dẫn đến khái niệm hội tụ.Trong một môi trường dừng, chỉ tiêu hội tụ là số lượng mẫu dữ liệu cần để đáp ứng xung của bộ lọc thích nghi đạt đến đáp ứng xung của bộ lọc tối ưu. Còn trong môi trường không dừng, chỉ tiêu hội tụ cũng là một số đo mức độ tương tương giữa đáp ứng xung của bộ lọc thích nghi với đáp ứng xung của bộ lọc tối ưu nay đã biến thiên theo thời gian. Tóm lại, bộ lọc thích nghi có thể là IIR hoặc FIR, nhưng FIR được sử dụng nhiều hơn do bản thân nó là loại bộ lọc ổn định. Như vậy, độ ổn định của toàn bộ bộ lọc thích nghi tùy thuộc vào thiết kế vòng hồi tiếp, tức là thuật toán để hiệu chỉnh các hệ số của bộ lọc. Sơ đồ khối của bộ lọc FIR thích nghi tổng quát được thể hiện ở hình 2.10 sau. Bộ lọc FIR Thuật toán thích nghi Tín hiệu phỏng định( tín hiệu huấn luyện) x(n) Dãy tín hiệu {x(n)} quan sát {y(n)} Đáp ứng xung Tín hiệu sai số {e(n)} Hình 2.10: Cấu trúc của một bộ lọc thích nghi tổng quát. Chuỗi dữ liệu vào, {y(n)}, được chập với chuỗi FIR, {hi(n)}, và kết quả đầu ra của bộ lọc là: x(n) = hi(n-1)y(n-i) (2.20) Biểu thức này được viết lại dưới dạng một tích vector: x(n) = hT(n-1)y(n) (2.21) Điểm khác nhau ở đây là các hệ số của bộ lọc FIR được tiếp nhận một cách biến thiên theo thời gian, tức là h(n-1) thay vì là h. Đầu ra hiện hành, x(n), được tính dựa vào nhóm hệ số trước đó là h(n-1). Chuỗi tín hiệu huấn luyện, x(n), bị trừ đi tín hiệu đầu ra để cho một tín hiệu sai số vô hướng, e(n). Sai số bây giờ được dùng cùng với vector tín hiệu vào, y(n) để xác định nhóm hệ số tiếp theo của bộ lọc, h(n). Ký hiệu h(n) được sử dụng vì các dữ liệu từ trước và kể cả y(n) và x(n) đã được dùng để tính h(n). Mục tiêu cuối cùng của thuật toán bộ lọc thích nghi là phỏng định xấp xỉ đáp ứng xung tối ưu. Thông thường, tối ưu được xác định theo nghĩa MSE, nên bộ lọc tối ưu trong một môi trường tĩnh là bộ lọc FIR Wiener của phương trình(2.18). Sau đây chúng ta sẽ tìm hiểu một vài thuật toán chính điều khiển bộ lọc thích nghi. 2.5.3.2.Thuật toán LMS: Thuật toán LMS, thường được gọi là một thuật toán Stochastic Gradient; nó thường được sử dụng cho các bộ lọc thích nghi, bởi vì các lý do sau đây: Nó là cơ bản đầu tiên. Nó rất đơn giản. Trong thực tế nó làm việc rất tốt. Nó yêu cầu ít phép toán. Nó cập nhật các hệ số rất đơn giản, nên nó thích nghi liên tục cho bộ lọc. Nó đánh dấu sự thay đổi chậm trong thông tin tín hiệu số rất tốt. Thuật toán này đi kèm với một bộ lọc FIR hiệu chỉnh được. Các hệ số hay trọng số của bộ lọc FIR thích nghi có thể hiệu chỉnh dựa trên một môi trường thay đổi như một tín hiệu vào. Cũng có thể sử dụng bộ lọc IIR thích nghi, nhưng các điểm cực của một bộ lọc IIR trong quá trình thích nghi có thể cập nhật đến các giá trị nằm ngoài vòng tròn đơn vị, làm cho bộ lọc không ổn định. Tín hiệu vào bị làm trễ của bộ lọc tuyến tính kết hợp được đo và cộng lại để cho tín hiệu ra y(n): y(n) = (2.22) Phương trình này được viết lại dưới dạng vector là: y(n) = W(n)XT(n) = X(n)WT(n) (2.23) Trong đó: W(n) = [w(0,n) w(1,n) … w(N,n)] (2.24) X(n) = [x(0,n) x(1,n) … x(N,n)] (2.25) Số mũ T biểu thị cho ma trận chuyển vị. Số đo chất lượng làm việc của một bộ lọc là dựa trên tín hiệu sai số: e(n) = d(n) – y(n) (2.26) Các hệ số của bộ lọc được hiệu chỉnh sao cho tối thiểu hóa một hàm sai số trung bình bình phương. Đó là hàm E[e2(n)], với E biểu thị là giá trị kỳ vọng hay là toán tử kỳ vọng thống kê: E[e2(n)] = E[d2(n)]- 2E[d(n)y(n)] + E[y2(n)] (2.27) Nếu ta xét khi chỉ có một hệ số thì phương trình(2.27) trở thành: E[e2(n)] = E[d2(n)]- 2E[d(n)x(n)]w(0) + E[x2(n)]w2(0) (2.28) Nếu d(n) và x(n) hoàn toàn độc lập với nhau, ta có: E[d(n)x(n)] = E[d(n)]E[x(n)] (2.29) Nếu các tín hiệu d và x hoàn toàn không đổi theo thời gian, các giá trị mong đợi của tích của chúng cũng sẽ không đổi theo thời gian. Trong trường hợp đó, phương trình(2.28) được viết lại là: E[e2(n)] = A - 2w(0) + Cw2(0) (2.30) Với A = E[d2(n)]; = E[d(n)y(n)]; C = E[x2(n)] = E[x(n)]E[x(n)] = E[y(n)/w(0)]E[x(n)] w(0) = E[y(n)]E[x(n)]/C = E[y(n)x(n)]/C = E[y(n)d(n)]/C = /C; do đó, số đo chất lượng làm việc cho một hệ số là: w(0) = /C (2.31) mà nó biểu thị giá trị tại đó E[e2(n)] là cực tiểu. Để biểu diễn kết quả trên ta thể hiện ở hình vẽ(2.11) sau đây. E[e2(n)] min 0 /C w(0) Hình 2.11: Đường biểu diễn chất lượng làm việc của 1hệ số. Hệ số được cập nhật theo cách sau: w(0,n+1) = w(0,n) - E[e2(n)] (2.32) ở đây, là một hằng số xác định tốc độ độ hội tụ. Dấu trừ trong phương trình(2.32) gắn liền với chiều của bước. Từ hình(2.11) ta thấy nếu giá trị hiện tại của hệ số ở bên trái của trị cực tiểu /C, bước phải là dương( tăng lên). Mặt khác, nếu giá trị hiện tại của hệ số ở bên phải của trị cực tiểu /C, bước phải là âm( giảm xuống). Trường hợp này sẽ xác định vùng có độ dốc dương của hàm chất lượng. Như vậy, chiều của bước tỷ lệ với phần âm của độ dốc. Người ta thường dùng phương trình sau đây để đại diện cho thuật toán LMS: W(n+1) = W(n) + 2e(n)X(n) (2.33) Phương trình(2.33) cho ta một phương tiện đơn giản nhưng mạnh mẽ và hiệu quả để cập nhật các hệ số, không cần lấy trung bình hoặc vi phân và sẽ được dùng để thực hiện các bộ lọc FIR thích nghi. Phương trình này thường được viết lại với = 2 trong các chương trình, tức là: wk(n+1) = wk(n) +e(n)x(n-k) (2.34) Thuật toán LMS rất phù hợp cho một số ứng dụng, gồm khử tạp âm và khử dội vang thích nghi, tiên đoán và cân bằng. Các biến thể khác của thuật toán LMS đã được sử dụng, như: LMS dấu sai số, LMS dấu dữ liệu, và LMS dấu dấu. Trong thuật toán LMS dấu sai số, thì phương trình(2.34) trở thành: wk(n+1) = wk(n) +sgn[e(n)]x(n-k) (2.35) Với sgn là hàm dấu được định nghĩa như sau: sgn[e(n)] = (2.36) Trong thuật toán LMS dấu dữ liệu, phương trình(2.4.30), trở thành: wk(n+1) = wk(n) + e(n)sgn[x(n-k)] (2.37) Trong thuật toán LMS dấu dấu, phương trình(2.34), trở thành: wk(n+1) = wk(n) + sgn[e(n)]sgn[x(n-k)] (2.38) Và được khai triển ra như sau: wk(n+1) = (2.39) Biến thể dấu dấu của thuật toán LMS cơ bản là gọn hơn về mặt toán học, vì thuật toán này không chứa phép nhân nào. Việc thực hiện các biến thể của thuật toán LMS, không khai thác các đặc điểm xử lý đường ống( Pipeline) của các bộ xử lý tín hiệu số chuyên dụng. Tốc độ thi hành trên các bộ DSP đối với các biến thể này có thể chậm hơn so với thuật toán LMS căn bản do có thêm các lệnh vì để cộng thêm các cấu trúc kiểu giải quyết được yêu cầu cho các điều kiện kiểm tra gồm dấu của sai số hay của mẫu dữ liệu. Thuật toán LMS đã được hoàn thành khá hữu dụng trong các bộ cân bằng thích nghi, khử tạp âm trong điện thoại, .v.v.Các phương thức khác, như là thuật toán RLS sẽ được trình bày ở phần sau. Thuật toán này có thể tỏ ra có độ hội tụ nhanh hơn thuật toán LMS cơ bản, nhưng phải trả giá cho sự tính toán nhiều hơn. RLS dựa trên việc bắt đầu với giải pháp tối ưu và sau khi dùng mỗi mẫu vào để cập nhật đáp ứng xung nhằm duy trì quá trình tối ưu hóa. Số bước cần thiết và trực tiếp được định nghĩa qua mỗi mẫu thời gian. Các thuật toán trở nên hữu dụng khi không có tín hiệu tham chiếu thích hợp. Bộ lọc được thích ứng trong một cái cách như để phục hồi vài đặc tính của tín hiệu đã bị mất từ trước khi đế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