2013
CCS4 DSP Workshop Training Guide Document for student Tài liệu hướng dẫn thí nghiệm Xử lý số tín hiệu trên phiên bản CCS mới 4.x của Texas Instruments. Tài liệu dành cho sinh viên chuyên nghành điện tử ,ĐH Công Nghiệp TP HCM.
Draft version
Hoang Nguyen, Electronic Faculty Industrial University of Ho Chi Minh City 12/1/2013
CCS4 DSP Workshop
DSK6416 Labs workshop with CCS4
Contents
1
2
3
Giới thiệu về DSP Development Development Kit ........ ....... ....... .............. ....... ....... ....... ........ ....... .............. ....... ....... ....... ....... ... 2 1.1
Giới thiệu ....................................................................................................................... 2
1.2
DSK TMS320C TMS320C6713 6713 và TMS320C TMS320C6416 6416.............................................................................. 3
1.3
Code Code Compose Composerr Studio Studio ........................................................................................ ................................................................................................... ........... 5
Cài đặt môi trường thí nghiệm cho Kít DSP DSK6416 ............. ...... ....... .............. ....... ....... ....... ....... ........ ............. ....... ...... 6 2.1
Cài đặt CCS4 IDE ............................................................................................................. 8
2.2
Cài đặt thư viện và môi trường phát triển code cho DSK6416 ............. ...... ....... ....... ............... ....... ........ .... 10
Các bài thí nghiệm DSP trên kit DSK6416 ............. ...... ....... .............. ....... ....... ....... ....... ........ .............. ....... ....... ....... ....... . 11 3.1
Lab 1 – Làm quen với CCS4 ........................................................................................... ........................................................................................... 11
3.2
Lab 2 – Thuật toán tạo sóng sin trên DSP ............ ..... .............. ....... ....... ........ ....... .............. ....... ....... ....... ....... . 30
3.3
Lab 3 - Giao tiếp AIC23 – Xử lý tín tín hiệu hiệu âm thanh trên Kit DSK6416 DSK6416 ............ ..... ....... ............... ....... ........ .... 36
3.4
Lab 4 - Thiết kế bộ lọc FIR trên DSK6416 ...... .............. ....... ....... ....... ....... ........ .............. ....... ....... ....... ....... . 42
3.5
Lab 5 - Thiết kế bộ lọc IIR trên DSK6416 ....... .............. ....... ....... ....... ........ ....... .............. ....... ....... ....... ....... . 53
3.6
Lab 6 - Thuật toán biến đổi Fourier FFT (Optional) (Optional) ............ ..... ....... ....... ........ .............. ....... ....... ....... ....... . 61
Referen Reference ce ......................................................................... ................................................................................................................................ ....................................................... 68
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 1
CCS4 DSP Workshop
1 Giới thiệu về DSP Development Kit 1.1 Giới thiệu Bộ TMS320C6416 và TMS320C6713 Digital Signal Processing Starter Kit (DSK) của Texas Instrument là nền tảng phát triển giá thành thấp cho các ứng dụng xử lý tín hiệu số thời gian thực. Mỗi bộ bao gồm một mạch phát triển với bộ xử lý tín hiệu hi ệu số dạng số thực dấu d ấu chấm động độn g TMS320C6713 hoặc bộ xử lý tín hiệu số dạng số thực dấu chấm tĩnh TMS320C6416 , một bộ Audio Codec TLV320AIC23 và một Emulator kết nối tới PC qua cổng USB. Phần mềm chạy trên máy tính là Code Composer Studio (CCS) được cung cấp bởi TI để hỗ trợ viết các chương trình C hay ngôn ngữ assembly và được biên dịch, dowload , chạy trên kit DSK. Bộ xử lý tín hiệu số (DSP) là một dạng vi xử lý chuyên dụng. Nó có cấu trúc và tập lệnh của DSP được tối ưu hóa cho quá trình xử lý tín hiệu số thời gian thực. Kit DSK6416 sử dụng dòng dòn g DSP họ TMS320C6000 (C6x). Cấu trúc của bộ xứ lý tín hiệu số C6x rất thích hợp trong các tính toán mở rộng. Dựa trên kiến trúc tập lênh cực dài (VLIW), C6x được xem là một trong những họ vi xử lý mạnh mẽ nhất của TI. Bộ xử lý tín hiệu số được sử dụng tương đối rộng rãi, từ communication và điều khiển đến xử lý giọng nói và hình ảnh... Chúng ta có thể thấy chúng trong các thiết bị điện thoại di động, máy fax/modem, đĩa cứng, radio, máy in, tai nghe, máy chơi nhạc mp3, HDTV, máy ảnh kỹ thuật số…đặc biệt DSPs được sử dụng phổ biến trong điều khiển động cơ và các ứng dụng trong nghành công nghiệp ô tô và các ứng dụng công nghiệp. Nhìn chung, DSPs được quan tầm chủ yếu khi chúng ta cần xử lý tín hiệu thời gian thực. Xử lý thời gian thực có nghĩa là quá trình phải theo kịp với các sự kiện xảy ra ngoài.
Hình 1.1 : Các ứng dụng của DSP
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 2
CCS4 DSP Workshop
1.2 DSK TMS320C6713 và TMS320C6416 T MS320C6416
DSK TMS320C6713
Hình 1.2 : Kit C6713 DSK
Thông số chính : • A Texas Instruments TMS320C6713 DSP operating at 225 MHz. Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 3
CCS4 DSP Workshop
• An AIC23 stereo codec • 16 Mby Mb ytes of s ynchronous ynchronous DRAM • 512 Kby Kb ytes of non-volatile Flash memory memo ry (256 Kbytes usable in default configuration) • 4 user accessible LEDs and DIP switches • Software board configuration configuration through registers implemented in CPLD • Configurable Configurable boot options • Standard expansion expansion connectors for daughter card use u se • JTAG JT AG emulation through on-board JTAG emulator with USB host interface or external emulator • Single voltage power supply (+5V)
DSK TMS320C6416
Hình 1.3 : Kit 6416 DSK
Thông số board C6416 DSK : • A Texas Instruments TMS320C6416T DSP operating at 1 Gigahertz. • An AIC23 stereo codec • 16 Mby Mb ytes of s ynchronous ynchronous DRAM • 512 Kbytes Kb ytes of non-volatile non-volatile Flash F lash memory • 4 user accessible LEDs and DIP switches • Software board configuration configuration through registers implemented in CPLD • Configured Configured boot options and clock input selection • Standard expansion expansion connectors for daughter card use u se • JTAG JT AG emulation through on-board JTAG emulator with USB host interface or external emulator • Single voltage power supply (+5V) Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 4
CCS4 DSP Workshop
1.3 Code Composer Studio CCS cung cấp một môi trường phát triển tích hợp (IDE) dựa trên ngôn ngữ C cho các ứng dụng xử lý thời gian thực. Nó còn tích hợp cả c ả một trình dịch C , assembler và liker , phiên bản CCS4 cũng hỗ trợ các emulator cho phép phát triển nhanh các ứng dụng DSP trên nhiều nền n ền tảng khác nhau. Ngoài ra, nó còn hỗ trợ khả năng hiển thị đồ họa và hỗ trợ gỡ lỗi thời gian thực.
Hình 1.4 CCS phiển bản mới nhất V5.x
Một project trên CCS sẽ bao gồm tất cả các file cần thiết, để tạo ra file thực thi .out . CCS cho phép chúng ta tùy tù y chỉnh các option, các define như rất nhiều các công cụ IDE thông dụng khác, Bản CCS3.x thì chỉ tương thích với hệ điều hành Win XP trở về trước. Trong khi các phiên bản b ản mới hơn như CCS4.x hay CCS5.x hỗ trợ Windows 7 và Win Vista cả 32 và 64-bit. 64 -bit. Các phiên bản CCS4.x trở lên sử dụng nền tảng java và có giao diện di ện đổi mới và phức tạp hơn bản CCS 3. Bù lại, chúng tích hợp hầu hết các dòng MCU, DSP và OMAP của TI vào một công cụ phát triển duy nhất. Trong phạm vi tài liệu thí th í nghiệm này, chúng ta sẽ sử dụng phiên bản CCS 4.x và nền tảng phần cứng là DSK6416. Tuy Tu y vậy , Nếu chúng ta phát triển các ứng dụng này trên DSK6713, thì cũng không có sự khác biệt nhiều lắm về mặt thuật toán, ngoại trừ việc hiệu suất thực thi của chúng chún g có thể khác nhau do C6416 có kiến trúc số thực dấu chấm tĩnh, so với C6713 với kiến trúc số thực dấu chấm động.
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 5
CCS4 DSP Workshop
2 Cài đặt môi trường thí nghiệm cho Kít DSP DSK6416 Trong đĩa CD đi kèm k èm theo kit có phiên bản CCS3.1 . Tuy nhiên, hiện CCS3.x chỉ chạy trên hệ điều hành Win XP mà không hỗ trợ Win 7 hoặc Vista. Do đó, trong tài liệu này, chúng ta sẽ sử dụng bản 4.x mới m ới hơn, có hỗ trợ Windows 7 và Vista. Bộ kit phát triển DSK6416 và DSK6713 của Texas Instruments .
Môi trường phát triển cần yêu cầu tối thiểu :
CPU Tối thiểu Pentum 4 1.8Ghz trở lên Window XP , Win 7 hoặc Vista CCS phiên bản 4.x đi kèm theo tài liệu. Cài đặt Matlab phiên bản 2006 trở lên. Kit TMS320C6416 hoặc TMS6713
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 6
CCS4 DSP Workshop
Trong phần này, chúng ta sẽ cài đặt chương trình CCS 4.x. Sau đó, chúng ta sẽ phải thực hiện một số thao tác tá c cài đặt và setup môi trường phát triển DSP trên CCS4.x của Texas Instruments. Phần tiếp theo chúng ta sẽ thực hiện các bài thí nghiệm về các thuật toán xử lý tín hiệu số, bộ lọc số …
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 7
CCS4 DSP Workshop
2.1 Cài đặt CCS4 IDE Click vào chương trình cài đặt để cài đặt đ ặt CCS4.
Hình 2.1 : Cài đặt CCS4
Sau đó ta chọn Next, giao diện sẽ hiện ra như sau :
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 8
CCS4 DSP Workshop
Hình 2.2 : Click custom, để bỏ các phần không cần thiết
Bước tiếp theo ta chọn dòng chip C54x, C55x, C6000 DSP, còn lại đều bỏ chọn, nhấn next qua mục Select Components. Trong mục này ta chọn tất cả.
Hình 2.3 : Chọn các dòng chip và components cần thiết.
Sau đó chọn next để tiến hành cài đặt. Chú ý, trong quá trình cài đặt, CCS4 sẽ tự cài đặt Driver cho bộ emulator. Do đó, chúng ta phải xác nhận yes cho một số hộp thoại trong quá trình cài đặt. Nếu trong quá trình cài không xảy ra lỗi gì, thì CCS4 setup sẽ hiện ra bảng thông báo hoàn tất như sau :
Hình 2.4 : Cài đặt hoàn tất, nhấn Finish để kết thúc. th úc.
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 9
CCS4 DSP Workshop
2.2 Cài đặt thư viện và môi trường phát triển code cho DSK6416 Sau khi đã cài đặt đ ặt song CCS, ta tiến hành cài đặt thư viện và môi trường phát triển cho CCS. Đầu tiên, ta copy ba thư mục : BIOS, CSL, DSK6416 vào thư mục cài đặt CCS4
Hình 2.5 : Cài đặt hoàn tất, nhấn Finish để kết thúc. th úc.
Tùy vào hệ điều hành , và tùy vào thư mục ta chọn lúc cài đặt, thì thư mục cài sẽ khác nhau. Hình sau ví dụ cho hệ điều hành win 7, cài đặt ở thư mục mặc định
Hình 2.6 : Cài đặt hoàn tất, nhấn Finish để kết thúc. th úc.
Trong thư mục chính, ta còn có hai file : c6416dskinit.c và c6416dskinit.c và c6416dskinit.h , c6416dskinit.h , Hai file này là hai file cấu hình các thiết lập l ập cơ bản dành cho Kit DSK, hai file này sẽ được dùng khi ta tạo project p roject mới.
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 10
CCS4 DSP Workshop
3 Các bài thí nghiệm DSP trên kit DSK6416 3.1 Lab 1 – Làm quen q uen với CCS4 Trong bài Lab này, chúng ta sẽ Được làm quen với môi trường phát triển CCS4. Học cách tạo một project mới, import một project đã đ ã tồn tại, Biên dịch một chương trình và debug trên phần cứng DSK6416…
Tạo Project mới với CCS4 Đầu tiên khởi động CCS4 bằng CCS4 bằng cách click vào biểu tượng CCS4 desktop, hoặc trong Programs.
trên
Hình L-1.1 : Cài đặt hoàn h oàn tất, nhấn Finish để kết thúc.
Sau đó là màn hình hiển h iển thị yêu cầu chọn Workspace, là không gian làm việc v iệc của CCS4. Ta có thể chọn mặc định tại ổ đĩa C. Chú ý, Địa chỉ thư mục workspace workspa ce không nhất thiết phải là thư mục chứa các projects của ta sau này. Do đó, ta có thể thể chọn mặc định địa chỉ này , và sau này khi tạo project ta sẽ chỉ định cho chúng ở thư mục khác nếu muốn.
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 11
CCS4 DSP Workshop
Hình L-1.2 : Chọn OK để cài mặc định, hoặc nhấn browse để chọn thư mục khác
Bước tiếp theo sẽ là phần cài đặt bản quyền cho CCS4. Bởi vì chúng ta không có license chính thức, do đó ta sẽ chọn bản b ản Evaluate 30 days. Chúng ta cũng có thể tạo tài khoản TI trên website www.ti.com www.ti.com để để đăng ký một license free để sử dụng.
Hình L-1.3 : Chọn Evaluate 30 days
Sau đó vào Menu vào Menu File -> New-> CCS Project như hình sau :
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 12
CCS4 DSP Workshop
Hình L1.4 : Chọn Evaluate 30 days
Tại hộp thoại, ta đặt đ ặt tên cho project và chọn nơi lưu trữ cho project. Nếu chọn Use default location, CCS4 sẽ lưu vào thư mục của workspace.
Hình L-1.5 : Chọn Evaluate 30 days
Chọn dòng DSP sử dung, dun g, cụ thể ở đây là C6000 family. Sau đó click Next click Next
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 13
CCS4 DSP Workshop
Hình L-1.6 : Chọn dòng chip DSP Family cho project
Và tiếp tục chọn Next chọn Next
Hình L-1.7 : Additional Project Setting
Thiết lập như trong hình L-1.8 và Finish và Finish . Nếu muốn chọn các example có sẵn, thì chọn Next chọn Next rồi rồi chọn các example như hình L-1.9
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 14
CCS4 DSP Workshop
Hình L-1.8 : Chọn các option cho C6416
Hình L-1.9 : Chọn các example có sẵn trong CCS4
Sau đó, ta đã có một project pro ject trắng như hình L-1.10, nếu CCS4 không hiện ra như vậy, chúng ta click vào View -> C/C++ project
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 15
CCS4 DSP Workshop
Hình L-1.10 : New Project with CCS4
Bước tiếp theo là thiết lập môi trường phát p hát triển cho project. Click phải vào project helloworld > Properties như hình h ình L-1.11.
Hình L-1.11 : Project Properties
Chọn C/C++ Build > Include Options > Thêm > Thêm ba đường dẫn tới thư mục DSK6416, CSL và BIOS mà chúng ta đã copy copy ở phần trước.
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 16
CCS4 DSP Workshop
Hình L-1.12 : C/C++ Include Options
Tại mục Predefined mục Predefined Symbols, Symbols, chúng ta sẽ định nghĩa tên chip sử dụng là CHIP_6416
Hình L-1.13 : C/C++ Include Options
Tại mục File mục File Search Path chúng Path chúng ta thêm các thư viện và đường dẫn chứa các thư viện đó .
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 17
CCS4 DSP Workshop
Hình L-1.14 : C/C++ Include Options
Trong phần C6000 Linker > Basic Option , Option , Thêm Stack Thêm Stack Size và Size và Heap Heap Size là Size là 0x400 như hình L-1.15. Và khai báo Data báo Data model là là kiểu far trong mục C6000 Compiler > Runtime Model Options > Data Access Model như như hình L-1.16.
Hình L-1.15 : Khai báo Stack Size S ize và Heap Size
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 18
CCS4 DSP Workshop
Hình L-1.16 : Khai báo Stack Size S ize và Heap Size
Bước tiếp theo là viết một chương trình C helloworld. Click phải vào project helloworld > New > Source File như File như hình L-1.17.
Hình L-1.17 : New Project with CCS4
Chọn thư mục lưu file cùng cùn g với thu mục chứa project. Đặt tên file là Helloworld.c . Nhấn Finish để kết thúc.
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 19
CCS4 DSP Workshop
Hình L-1.18 : New Project with CCS4
Trong giao diện viết code của của file Helloworld.c , Viết Viết đoạn code sau : #include void main (void (void)) { printf(“ \n\rHello printf(“ \n\rHello World from DSK6416 ! ”); //xuất message ra console return ; }
Sau đó save lại như sau :
Hình L-1.19 : New Project with CCS4
Bước tiếp theo là tiến hành biên dịch d ịch chương trình. Click phải vào Project vào Project > Build Active Project
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 20
CCS4 DSP Workshop
Hình L-1.20 : New Project with CCS4
Nếu không bị lỗi gì trong quá trình viết code , ta sẽ thu thu được kết quả như hình L-1.21. Nếu có lỗi xảy ra. Hãy kiểm tra lại code chương trình, và các option đã chỉnh cho đúng như hướng dẫn ở trên hay ha y chưa.
Hình L-1.21 : New Project with CCS4
Bước tiếp theo tạo file configuartion để kết nối với DSK6416. Qui trình kết nối với board trong CCS4 được quản lý theo kiểu target configuration File. Nghĩa là , để kết nối với board DSK, D SK, ta phải tạo một file config cho board đó. Với cách quản lý này, CCS4 cho phép chúng ta triển khai ứng dụng trên nhiều nền tảng khác nhau mà không phải ph ải thay đổi nhiều trong môi trường phát triển. Tạo file Target Config bằng cách vào Target > New target Configuration... Con figuration... như hình L-1.22
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 21
CCS4 DSP Workshop
Hình L-1.22 : New Project with CCS4
Đổi tên thành Helloworld.ccxml thành Helloworld.ccxml , rồi nhấn finnish.
Hình L-1.23 : New Project with CCS4
Sau đó, chỉnh các thông số như hình L-1.23, rồi save lại. Chú ý, là sau khi save lại file config ta phải có thêm file Helloworld.ccxml Hello world.ccxml trong giao diện project như hình L-1.24. Nếu không thấy file này, Thực hiện lại các bước trên
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 22
CCS4 DSP Workshop
Hình L-1.24 : Target Configuration Configuration File for DSK6416
Hình L-1.25 : File Helloworld.ccxml
Bước tiếp theo là load chương trình xuống board để thực thi. Trước hết, ta phải kết nối DSK6416 với PC thông qua qu a cáp USB. Quá trình kết nối sẽ cần cài đạt driver Emulator. Trong quá trình cài đặt CCS4, nó đã tự động cài đặt driver này. Tuy nhiên , nếu vì lý do nào đó mà PC chưa cài được driver cho DSK6416 Emulator, thì chúng ta có thể cài lại driver trong thư mục DSK Emulator Driver đi kèm với tài liệu này nà y. Nếu quá trình cài đặt hoàn tất, ta sẽ có phần cứng sau trong phần hardware Manager của Windows Windo ws như hình L1.26
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 23
CCS4 DSP Workshop
Hình L-1.26 : Spectrum Digital Emulator for DSK6416
Bây giờ, chúng ta sẽ load chương trình xuống xuốn g board DSK6416 để thực thi bằng cách chọn Project chọn Project > Debug Active Project . . Nếu quá trình kết nối không có lỗi thì CCS4 sẽ hiện ra màn hình Debug như nh ư hình L-1.27. Nếu có lỗi xảy ra, hãy kiễm tra lại kết nối USB , Driver Emulator hoặc reset lại board DSK6416.
Hình L-1.27 : Debug chương trình Helloworld
Ta chú ý các nút Run , Pause , Stop để điều khiển quá trình debug chương trình, ngoài ra còn có các icon step, step over ov er … Ta nhấn nút Run để chạy chương trình , nút Pause để dừng chương trình, nếu muốn thoát khỏi giao diện debug thì nhấn nh ấn Stop. Và kết quả sau khi thực thi chương trình Helloworld thu được trên màn hình Console như hình L-1.28. Nếu không thấy xuất hiện cửa sổ Console, vào v ào View > Console .
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 24
CCS4 DSP Workshop
Hình L-1.28 : Màn hình Console khi Run chương trình Helloworld.c
Import một project có sẵn Trong quá trình phát triển, bạn có thể cần import một project có sẵn. Cách thực hiện như sau : Click File Click File > Import cửa sổ sẽ hiện ra bảng hội thoại như hình L-1.29
Hình L-1.29 : Import Project
Sau đó, chọn Browse tới thư mục chứa project muốn import. Sau đó nhấn finish để hoàn tất.
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 25
CCS4 DSP Workshop
Hình L-1.30 : Browse to CCS Project
Sau khi Import, cửa sổ quản lý project sẽ hiện h iện ra project mà ta đã import. Chú ý project nào in đậm và có chữ [Active chữ [Active - Debug] nghĩa nghĩa là ta đang làm việc trên project đó. Muốn chuyển chuyển qua project khác để làm việc , click phải vào project đó và chọn Set as Active project p roject
Hình L-1.31 : Quản lý nhiều project trong CCS4
API giao tiếp với ngoại vi trên board DSK6416 Đi kèm với board mạch DSK6416, chúng ta được đ ược nhà sản xuất cung cấp kèm theo các API hỗ trợ cho board DSK để giúp việc giao tiếp ứng dụng trở nên đơn Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 26
CCS4 DSP Workshop
giản hơn. Trong phần thí nghiệm này, chúng ta sẽ sử dụng thư viện để giao tiếp với led và Dip SW.
Với các hàm API có sẵn chúng chún g ta chỉ việc khai báo và sử dụng chúng trong chương trình của mình. Ví dụ: Viết chương trình giao tiếp với LED và DIP trên board DSK6416. Khi nhấn Dip switch 0 thì led 1 sẽ sáng, ngược lại led 1 sẽ tắt. Chúng ta sẽ hiệu chỉnh code cho chương trình Helloworld.c để thực hiện ví dụ này. Đoạn code chương trình được viết lại như sau : /* * Demo with LED, DIP on board * Author : Hoang Nguyen * Date : 12/1/2013 * Hardware : DSK6416 board * Platform : CCS4 Texas Instruments * * //Include API library support for DSK6416 board #include "dsk6416_dip.h" #include "dsk6416_dip.h" #include "dsk6416_led.h" void main() main() { printf("\n\rHello printf("\n\rHello World from DSK6416 !"); !"); printf("\n\rDemo printf("\n\rDemo Led & SW using DSK6416 Library!"); Library!"); DSK6416_init(); // Init DSK6416 board DSK6416_LED_init(); //init Led DSK6416_DIP_init(); //init Dip switch while(1) { DSK6416_LED_on(0); //turn on led 0 if(DSK6416_DIP_get(0)) //read dip switch 0 pressed status DSK6416_LED_on(1); //turn on led 1
else
DSK6416_LED_off(1); //turn off led 1 }
while(1); //stop here }
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 27
CCS4 DSP Workshop
Hình L-1.32 : Hiệu chỉnh chương trình Helloworld.c
Biên dịch chương trình và nạp code thực thi xuống board bo ard DSK6416, chúng ta có thể gạt SW trên board và xem led hiển h iển thị tương ứng.
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 28
CCS4 DSP Workshop
Bài tập thêm : 1) Viết code hiển thị led sáng đuổi cho kit DSK6416 ( Gợi ý, sử dụng hàm delay dela y DSK6416_waitusec() có DSK6416_waitusec() có sẵn trong thư viện dsk6416.h ) 2) VIết code đọc switch để thay đổi kiểu nhấp nháy nhá y của led sử dụng hàm DSK6416_LED_toggle() hàm DSK6416_LED_toggle() có có sẵn trong thư viện dsk6416_led.h
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 29
CCS4 DSP Workshop
3.2 Lab 2 – Thuật toán tạo sóng sin trên DSP Trong bài lab này, chúng ta sẽ Tìm hiểu thuật toán tạo sóng sine đơn giản. Viết chương trình C trên DSK6416 bằng phương pháp tra bảng. Sử dụng công cụ graph để phân tích phổ của tín hiệu Nguyên lý tạo sóng sin : Trong bài này nà y chúng ta sẽ thực hiện thuật toán dsp đầu tiên, đó là tạo tín hiệu sin bằng phương pháp tra bảng. Một mảng sine_table lưu trữ 8 phần tử tạo thành sóng sine, được tính từ công thức sau : 1000sin( ) , trong đó i chạy từ 0 tới 7
2/8
Hình L-2.1 : Tín hiệu sine tám điểm
Từ công thức này nà y ta sẽ có mảng sóng sine như sau : sine_table[8]={0,707,1000,707,0,-707,-1000,-707};
Trong bài lab này, chúng ta sẽ viết v iết chương trình tạo sóng sine bằng cách tra bảng như sau : Đầu tiên là tạo project sine_gen Tạo một project sine_gen project sine_gen như như đã hướng dẫn ở bài lab 1. Sau đó tạo file mới có tên là sine_gen.c là sine_gen.c với với nội dung như sau: /* * * * * * * *
Generate a sine wave using table-lookup method Author : Hoang nguyen File : sine_gen.c Date : 14/1/2013 Rev : 1.0 Hardware: DSK6416 board Platform: CCS4 Texas Instruments
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 30
CCS4 DSP Workshop */
#include //Declare Amplitude of Sine wave short A = 10; //create sine wave table short sine_table[8]={0,707,1000, sine_table[8]={0,707,1000,707,0,-707,-10 707,0,-707,-1000,-707}; 00,-707};//sine values output_buffer[8];//buffer //buffer luu tru du lieu song sine short output_buffer[8]; void main() main() { unsigned int i,j; printf(" \n\rSine wave generate using Table-Lookup "); while(1) //infinity Loop sine wave generator { for(i=0;i<8;i++){ output_buffer[i] output_buffer[i] = sine_table[i]*A; sine_table[i]*A; } } }
Bước tiếp theo là thực thi chương trình trên kit DSK6416. DSK6 416. Tạo file Target Configuration như hướng dẫn ở lab 1. Kết nối kit DSK6416 với PC thông qua cáp USB. Sau đó biên b iên dịch chương trình và nạp chương trình xuống kit bằng cách nhấn biểu tượng tượn g debug , hoặc vào Target-> Debug Active project như hình L-2.2
Hình L-2.2 : lab2 sine_gen example
Tiếp theo là vẽ đồ thị sóng só ng sine mới tạo. Nhấn biểu tượng Run để thực thi code, sau sau khi chương trình đã thực thi được một lúc, nhấn nút pause. Sau đó, vào Tools -> Graph -> Single Time . Một bảng cấu hình thông số sẽ hiện ra như hình hình L-2.3
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 31
CCS4 DSP Workshop
Hình L-2.3: Tools > Graph > Single Time
Hình L-2.4: Graph Properties for output_graph
Mô tả các thông số chúng ta cần quan tâm: Acquisition Buffer Size: kích thước của mảng (cụ thể ở đây đ ây là 8 byte). DSP data type : kiểu : kiểu dữ liệu của biến mảng ( cụ thể ở đây đâ y là biến có giá trị là biến nguyên 16bit có dấu). d ấu). Sampling rate: tần số lấy mẫu (ex: 8KHz). Start Address: tên của mảng muốn vẽ đồ thị. Display data size: size: kích thước của dữ liệu cần hiển thị.
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 32
CCS4 DSP Workshop
Ngoài ra các thông số khác chúng ta để mặc định. Sau khi khi hoàn tất, nhấn OK. Cúng ta sẽ thu được một đồ thị hiển thị th ị giá trị của mảng output_buffer . Đó chính là hình sine mà chúng ta đã đ ã tạo nên. Để ý là hình sine của chúng ta bị gấp khúc, nguyên nhân là do ta chỉ dùng 8 điểm đ iểm để tạo ra tín hiệu sine, do đó tín hiệu sine này có độ phân giải khá thấp.
Hình L-2.5: Đồ thị biểu diễn giá trị của mảng output_buff output_buffer er
Nhìn vào đồ thị chúng ta có thể thấy rằng một tín hiệu sine output_buffer đã được tạo ra từ mảng sine_table, và biên biên độ của nó đã tăng lên gấp 10 lần (biến A = 10). Xem xét phổ tín hiệu của chúng. c húng. Click vào Tools - >Graph->FFT Magnitude . Và nhập vào các thông số như hình 45
. Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 33
CCS4 DSP Workshop
Hình L-2.6: Graph Properties for FFT View
Một số thông số cần quan tâm:
Acquisition Buffer Size: kích thước của mảng (cụ thể ở đây đ ây là 8 byte). DSP data type : kiểu : kiểu dữ liệu của biến mảng ( cụ thể ở đây đâ y là biến có giá trị là biến nguyên 16bit có dấu). d ấu). Sampling rate: tần số lấy mẫu (ex: 8KHz). Start Address: tên của mảng muốn vẽ đồ thị. FFT Order : Bậc lấy FFT.
Ngoài ra các thông số khác có thể tìm hiểu thêm ở tài liệu liệu hướng dẫn của CCS4. Sau khi hòan tất. Nhấn OK để xem phổ của tín hiệu output_buffer như hình L-2.7
Hình L-2.7: FFT của tín hiệu output_buff output_buffer er
- Chú ý là với tần số lấy mẫu là 8000 (8Khz) thì tín hệu sine của chúng ta có tần số là 1KHz. Hãy Hã y giải thích tại sao ? - Nếu ta muốn có sóng sine sin e với tần số 2Khz thì tần số lấy mẫu phải là bao nhiêu?
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 34
CCS4 DSP Workshop
Bài tập thêm : 1) Viết chương trình tạo một sóng sine bao gồm tổng của hai sóng sine có tần số 1Khz và 2Khz (với tần số lấy mẫu là 16Khz) 2) Viết chương trình tạo sóng sine 16 điểm , so sánh với phổ của tín hiệu sine 8 điểm. 3) Hiệu chỉnh chương trình để có tín hiệu sine với v ới biên độ tăng gấp đôi. 4) Viết chương trình tạo sóng sine bằng phương pháp nội suy su y hoặc bằng công thức.
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 35
CCS4 DSP Workshop
3.3 Lab 3 - Giao tiếp AIC23 – Xử lý tín hiệu âm thanh trên Kit DSK6416 Trong bài lab này, chúng ta : Học cách giao tiếp khối Audio Codec trên DSK6416 . Xuất tín hiệu sóng sine ra headphone he adphone thông qua AIC23. Đọc tín hiệu vào từ line-in và xuất T/H ra headphone he adphone
Đầu tiên là tạo project sine_gen Tạo một project sine_gen như sine_gen như đã hướng dẫn ở bài lab 2. Sau đó copy hai file c6416dskinit.c và c6416dskinit.c và c6416dskinit.h vào c6416dskinit.h vào project và tạo file source sine_gen_out.c mới sine_gen_out.c mới thay thế cho file sine_gen.c với sine_gen.c với nội dung như sau : /* * Output a sine wave tone to headphone – Interface with AIC23 * Author : Hoang nguyen * File : sine_gen_out.c * Date : 14/1/2013 * Rev : 1.0 * Hardware: DSK6416 board * Platform: CCS4 Texas Instruments */ #include "dsk6416_aic23.h" #include "dsk6416_aic23.h" fs=DSK6416_AIC23_FREQ_8KHZ; //set sampling rate unsigned int unsigned int fs=DSK6416_AIC23_FREQ_8KHZ; //Declare Amplitude of Sine wave short A = 4; //create sine wave table short sine_table[8]={0,707,1000, sine_table[8]={0,707,1000,707,0,-707,-10 707,0,-707,-1000,-707}; 00,-707};//sine values short output_buffer[8]; output_buffer[8];//buffer //buffer luu tru du lieu song sine main() main() void { unsigned int i,j; comm_poll(); //init DSK, codec, McBSP i=0;j=0; printf(" \n\rSine wave generate using Table-Lookup "); while(1) //infinity Loop sine wave generator { for(i=0;i<8;i++){ output_buffer[i] output_buffer[i] = sine_table[i]*A; sine_table[i]*A; output_sample(output_buffer[i]); //xuat ra AIC23 } } }
Trong source code này, n ày, chúng ta sử dụng thư việc AIC23 (dsk6416_aic23 ) của DSK6416. Thư viện này cho phép chúng ta giao tiếp với vớ i chip audio codec trên kit DSK6416 , thư viện này nà y sử dũng một phần cứng có tên là McBSP trên Chip C6416, phần cứng này hỗ trợ giao tiếp t iếp trực tiếp với các chuẩn âm thanh như I2S , AIC … rất tiện lợi , xem hình 47. Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 36
CCS4 DSP Workshop
Để sử dụng thư viện, chúng ta cần phải include file dsk6416_aic23. Đồng thời add hai file c6416dskinit.c và c6416dskinit.c và c6416dskinit.h vào project. Hai file này giúp cho chúng ta khởi tạo và cấu hình thư viện dễ dàng.
Hình L-3.1: Giao tiếp với AIC23 sử dụng McBSP của C6416
Trong file chương trình, trước tiên chúng ta cần khai báo tần số lấy mẫu là 8Khz. Và trong hàm main , chúng ta sử dụng hàm compoll() để khai báo sử dụng thư viện giao tiếp AIC23, trong bài này, chúng ta sẽ xuất dữ liệu bằng phương pháp polling data. Để xuất dữ liệu ra chip chip AIC23, chúng ta sử dụng hàm output_sample() . Bước tiếp theo là thực thi chương trình trên kit DSK6416. DSK6 416. Tạo file Target Configuration như hướng dẫn ở lab 1. Kết nối kit DSK6416 với PC thông qua cáp USB, kết nối headphone như hình L-3.2. Sau đó biên dịch chương trình và nạp chương trình xuống kit bằng cách nhấn biểu tượng debug , hoặc vào Target-> Debug Active project Chạy chương trình và nghe âm thanh th anh phát ra trên headphone. Nếu không thấy âm thanh, kiểm tra lại source code và kết k ết nối kit DSK6416.
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 37
CCS4 DSP Workshop
Hình L-3.2: Kết nối DSK6416 với Headphone để nghe tone 888hz
Hiệu chỉnh code để tạo ra các tần số 100Hz,1Khz,10Khz 100 Hz,1Khz,10Khz . Nghe tín hiệu trên headphone và nhận xét?
Audio Loop back Bước tiếp theo, chúng ta sẽ phải hiệu chỉnh source sou rce code để thực hiện ứng dụng loopback audio như hình L-3.3. Trong bài trước, chúng ta chỉ mới biết xuất âm thanh ra chip AIC23, trong phần này nà y, chúng ta sẽ tìm hiểu cách đọc dữ liệu audio analog thông qua chip AIC23 như hình L-3.4.
Hình L-3.3: Kết nối DSK6416 cho ví dụ Audio Loopback
Hình L-3.4: DSK6416 giao tiếp ti ếp với AIC23
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 38
CCS4 DSP Workshop
Để đọc dữ liệu từ AIC23 qua đường đườn g Line in , sử dụng hàm input_sample() . input_sample() . Dựa vào hàm này, hãy viết code thêm vào đoạn chương trình sau để đọc dữ liệu từ máy phát nhạc , sau đó xuất ra headphone như hình h ình L-3.3. /* * Audio loopback example * Author : Hoang nguyen * File : audio_loopback audio_loopback.c .c * Date : 14/1/2013 * Rev : 1.0 * Hardware: DSK6416 board * Platform: CCS4 Texas Instruments */ #include #include "dsk6416_aic23.h" "dsk6416_aic23.h" fs=DSK6416_AIC23_FREQ_8KHZ; //set sampling rate unsigned int unsigned int fs=DSK6416_AIC23_FREQ_8KHZ; main() main() void { unsigned int i,j; comm_poll(); //init DSK, codec, McBSP i=0;j=0; printf(" \n\r Audio Loopback using AIC23 "); while(1) //infinity Loop Application {
// hãy viết code ở đây để thực hiện // chức năng như đã mô tả ở phần trên
} }
Tạo project mới có tên là audio_loopback. audio_loopbac k. Sau đó tạo file source code mới là audio_loopback.c, aud io_loopback.c, hãy đánh những doạn code ở trên vào file audio_loopback.c , sau đó thêm các đoạn code cod e để thực hiện yêu cầu của bài thí nghiệm dựa vào bảng mô tả các hàm trong thư viện như sau : Mô tả các hàm có trong thư viện c6416dskinit.c Hàm Void c6416_dsk_init () Void comm_poll() comm_poll() void comm_intr() comm_intr() void output_sample (Uint32 output_sample (Uint32 out_data) void output_left_sample (short out_data)
Mô tả Thiết lập board DSK6416 và McBSP giao tiếp AIC23 Thiết lập board DSK6416 và McBSP, và thiết lập mode polling cho McBSP Thiết lập board DSK6416 và McBSP, và thiết lập mode interrupt cho McBSP Xuất dữ liệu audio stereo ra AIC23 Outdate : dữ liệu integer 32bit ghép giữa kênh left và right mà ta muốn xuất ra AIC23 Xuất dữ liệu audio mono kênh left ra AIC23 Outdate : dữ liệu integer 16bit kênh left mà ta muốn xuất ra AIC23
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 39
CCS4 DSP Workshop
void output_right_sample (short out_data) Uint32 input_sample () short input_left_sample () short input_right_sample ()
Xuất dữ liệu audio mono kênh right ra AIC23 Outdate : dữ liệu integer 16bit kênh right mà ta muốn xuất ra AIC23 Đọc dữ liệu stereo audio-in từ AIC23, trả về dữ liệu stereo ghép giữa kênh left và right thành giá trị 32-bit Đọc dữ liệu mono audio-in từ AIC23, trả về dữ liệu mono kênh left 16-bit Đọc dữ liệu mono audio-in từ AIC23, trả về dữ liệu mono kênh right 16-bit
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 40
CCS4 DSP Workshop
Bài tập thêm : 1) Viết chương trình tạo 7 tín hiệu h iệu sóng sine có tần số của 7 nốt nhạc : Đồ , Rê , Mi , Pha , Son , La , Si . Cho tần số lấy mẫu là 24Khz. 2) Viết chương trình chơi nhạc đơn âm bài “happy birthday” birthd ay” (Gợi ý sử dụng bài tập số 1 và các hàm delay để tạo ra đoạn nhạc mong muốn) 3) Viết chương trình tạo cộng tín hiệu từ line-in lin e-in với sóng sine tạo ở lab 2 rồi xuất ra headphone.
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 41
CCS4 DSP Workshop
3.4 Lab 4 - Thiết kế k ế bộ lọc FIR trên DSK6416 Trong bài lab này, chúng ta sẽ: Thiết kế bộ lọc FIR trên matlab. T/H bộ lọc bằng PP xử lý theo khối (Block processing) T/H bộ lọc bằng PP xử lý theo mẫu (Sample ( Sample by sample)
Lý thuyết về bộc lọc FIR Như chúng ta đã biết bộ lọc FIR được đặc trưng bởi :
() = ℎ() ∗ () Với x(n) là tín hiệu ngõ vào, h(n) là đáp đ áp ứng xung của bộ lọc, y(n) là tín hiệu h iệu ngõ ra sau khi đã được lọc. Để tính tích tí ch chập này chúng ta có thể sử dụng một số phương pháp như sau: Đối với phương pháp xử lý khối chúng ta sẽ s ẽ sử dụng một số phương pháp sau: a. Dạng tích chập (convolution) (convolution) Đây là phương pháp tính tích chập trực tiếp . Đối với tín hiệu dạng LTI sẽ được tính theo công thức này.
() = ℎ()() ,
Công thức này sẽ tính tổng tất cả các giá trị h(i)x(j) với i+j = n. Trong phương trình trên i,j phụ thuộc vào đặc tính tự nhiên của bộ bộ lọc và dữ liệu đầu vào là h(n) và x(n). b. Dạng trực tiếp(direct tiếp(direct form)
() =
(.) (.)
(,) (,)
ℎ()( ( −) − )
Với M là bậc của bộ lọc nhân quả FIR với đáp ứng xung h(i) , i = 0,1,2….M. L là chiều dài của chuỗi dữ liệu ngõ vào (cụ thể là số mẫu ngõ ngõ vào). Như vậy khối dữ liệu ngõ ra sẽ có chiều dài như sau: L y = L+M Suy ra: 0≤ n ≤L+M-1 c. Dạng tuyến tính bất biến theo thời gian g ian LTI ( LTI LTI form)
() =
(,) (,)
(,)
()ℎ( ℎ( −) − )
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 42
CCS4 DSP Workshop
Với L là chiều dài (số mẫu) của ngõ vào, M là bậc của bộ lọc có đáp ứng ứn g xung h(i),với h(i),với i= 0,1,2…M. n = 0,1,2,….L+M-1. Là chiều dài của tín hiệu ngõ ra. d. Trạng thái tức thời và trạng thái tĩnh.
() = ℎ()( ( − )
Với 0≤ n ≤ L – 1. Đây được xem như là phương trình vào ra I/O cho tất cả bộ lọc FIR bậc M. Nhằm mục đích viết chương trình, người ta sẽ sử dụng công thức b , bởi công thức này không dẫn đến việc vượt quá vùng biên của củ a dãy. Trong bài lab này, chúng ta sẽ thực hiện bộ lọc FIR trên CCS4 bằng phương pháp xử lý khối và xử lý mẫu. * Phương pháp xử lý khối (block (block processing method) Đây là phương pháp xử lý một khối khố i dữ liệu đã có sẵn x(n) sẵn x(n) và cho ra một khối dữ liệu mới y(n) mới y(n).. Trước tiên, ta sẽ thiết kế bộ lọc trên matlab m atlab sử dụng FDA dụng FDA Toolbox như hình L-4.1. Từ đó, chúng ta sẽ thu được các hệ số đáp ứng xung h(n) của bộ lọc, cụ thể trong phần này sẽ là thiết kế bộ lọc lọ c FIR thông thấp (lowpass (lowpass fir filter ) bậc 121 kiểu Equiripple . Đây là đáp ứng xung của bộ lọc thu được đượ c trên Matlab với các thông số sau:
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 43
CCS4 DSP Workshop
Hình L-4.1: Thiết kế bộc lọc l ọc FIR trên matlab FDATool
Thông số bộ lọc như sau: Specify order: là bậc của bộ lọc – 121 Fs : là tần số lấy mẫu – 32KHz 32KHz Fpass: tần số cắt passband 300Hz Fstop : Tần số cắt stopband 3Khz
Sau khi thiết kế xong, FDA Tool của Matlab sẽ sinh ra các hệ số bộ lọc h(n) . h(n) . Đó chính là các hệ số của củ a bộ lọc, vì các hệ số này ít, ta sẽ include trực tiếp các hệ số này vào CCS4 bằng tay để thực hiện thuật toán lọc FIR. Trong bài thí nghiệm này, chúng ta sẽ sử dụng dụng một khối dữ liệu âm thanh 150.000 mẫu, là giọng nói demo thu trên PC lưu trong file Speech.h file Speech.h . . Ta sẽ thực hiện bộ lọc FIR tần số thấp trên đoạn speech này, n ày, và chúng ta sẽ xem xét hiệu ứng của nó như thế nào. Tạo một project một project mới có tên là fir_filter_block_processing là fir_filter_block_processing và và copy các file c6416dskinit.h , c6416dskinit.h , c6416dskinit.h và Speech.h và Speech.h như như hình L-4.2.
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 44
CCS4 DSP Workshop
Hình L-4.2 : Lab 4 FIR Filter Block Processing
Sau đó tạo file mới có tên main.c và thêm source code cho chương trình main.c như sau sử dụng công thức :
ℎ()( − ) , Với 0≤ n ≤ L – 1. () = ∑ /* * Project: fir filter deisgn on DSK6416 board * Block processing method * Author : Chu Manh Cuong * Date: 24/8/2011 * Board support: DSK6416 TI * Platform: CCS4 * */ //include library support #include #include "dsk6416_aic23.h" #include "Speech.h" #include Uint32 fs=DSK6416_AIC23_FREQ_32KHZ; fs=DSK6416_AIC23_FREQ_32KHZ; //set sampling rate //macro function #define max(a,b) (((a)>(b))?(a):(b)) (((a)>(b))?(a):(b)) (((a)<(b))?(a):(b)) #define min(a,b) (((a)<(b))?(a):(b)) //set gain #define GAIN 10 //filter order #define FIL_ORDER 122 //init lenght of input and output #define INPUT_LEN SPEECHBUF #define OUTPUT_LEN INPUT_LEN //include filter coeffciens 0, 0, 0, const short h[FIL_ORDER] = {0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 1, 0, -2, -5, -8, -12, -16, -22, -21, -17, -8, 5, 22, 44, 67, 109, 119, 117, 117, 99, 62, 6, -69, -157, 343, -417, -461, -460, -402, -277, -79, 191,
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
0, 2, -20, 90, -252,
-
526,
Page 45
CCS4 DSP Workshop 915, 1339, 3095, 2876, -79, -277, -69, 6, 44, 22, -12, -8, 1, 1, 0, 0,
1773,
2192,
2568,
2876,
3095,
3208,
3208,
2568,
2192,
1773,
1339,
915,
526,
191,
-402,
-460,
-461,
-417,
-343,
-252,
-157,
62,
99,
117,
119,
109,
90,
67,
5,
-8,
-17,
-21,
-22,
-20,
-16,
-5,
-2,
0,
1,
2,
2,
2,
1,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0};
signed long signed long temp;
//init output buffer y y[OUTPUT_LEN]; short y[OUTPUT_LEN]; main() main() void { int i,n; comm_poll(); //init dsk6416 board DSK6416_LED_init(); //LEDs init
and DAC,ADC
/*fir filter with block processing method */ for(n=0;n
for(n=0;n
return; }
Chạy chương trình trên Kit DSK6416 . DSK6416 . Chạy chương trình và nghe headphone để xem sự khác khá c biệt giữa việc có bộ lọc và không có bộ lọc như hình 53.
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 46
CCS4 DSP Workshop
Hình L-4.3 : Lab 4 FIR Filter Example
Xem xét đáp ứng bộ lọc thực tế, và phân tích phổ tín hiệu in/out . in/out . Vẽ đồ thị graph của biến h(n). Chạy chương trình và nghe headphone để xem sự khác biệt giữa việc có bộ lọc và không có bộ lọc. Đáp ứng của bộ lọc được vẽ trên CCS. Hãy so sánh với đáp ứng lý tưởng vẽ trên matlab
Hình L-4.4 : Đáp ứng của bộ lọc FIR vẽ trên CCS.
Phổ tần số của tín hiệu input speech:
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 47
CCS4 DSP Workshop
Hình L-4.5: Đồ thị phổ của tín hiệu Speech input
Phổ tần số của tín hiệu sau bộ lọc. So sánh và nhận xét với phổ tín hiệu đầu vào
Hình L-4.6 : Đồ thị phổ của tín hiệu output, sau khi qua bộ lọc FIR thông thấp
* Thiết kế bộ lọc FIR F IR thông thấp với phương pháp sample-by-sample Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 48
CCS4 DSP Workshop
Trong phương pháp này, dữ liệu được xử lý từng mẫu ở thời điểm điểm hiện tại bằng giải thuật DSP để cho các mẫu ở ngõ ra. Phương pháp này dùng phổ biến trong các ứng dụng thời gian thực như mạch lọc thời t hời gian thực áp dụng cho tín hiệu dài, xử lý các hiệu ứng âm thanh số, các hệ thống t hống điều khiển số, và xử lý tín hiệu thích nghi… Thuật toán xử lý mẫu trực tiếp ( sample ( sample by sample ) thực ) thực hiện theo thuật toán như sau: w0 =x; //đọc =x; //đọc dữ liệu hiện thời y = h0w0 + h1w1 + h 2w2+h3w3+…h N-1 w N-1 ; //Tính dữ liệu đầu ra w N-1 = w N-2 ; //Cập nhật các tín hiệu trễ w N-2 = w N-3 … w1 = w0 với N là bậc của bộ lọc, lọ c, x là đầu vào, y là đầu ra, h i là hệ số bộ lọc và w i là biến trung gian. Sử dụng tương tự ví dụ trên với bộ lọc đã thiết kế bằng Matlab. Tạo mới project fir_filter_sample_by_sample project fir_filter_sample_by_sample tương tự như ở trên và viết code cho file main như main như sau : /* * Project: Audio filter on DSK6416 board * Author : Hoang Nguyen * Date: 18/1/2013 * Board support: DSK6416 TI * Platform: CCS4 * */ //include library support #include "dsk6416_aic23.h" #include "dsk6416_aic23.h" #include "dsk6416_led.h" #include "dsk6416_dip.h" Uint32 fs=DSK6416_AIC23_FREQ_32K fs=DSK6416_AIC23_FREQ_32KHZ; HZ; //set sampling rate //set gain #define GAIN 10 //filter order #define FIL_ORDER 122 //include filter coeffciens const short h[FIL_ORDER] h[FIL_ORDER ] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 1, 0, -2, -5, -8, -12, -16, 20, -22, -21, -17, -8, 5, 22, 44, 67, 90, 109, 119, 117, 99, 62, 6, -69, -157, 252, -343, -417, -461, -460, -402, -277, -79, 191, 526, 915, 1339, 1773, 2192, 2568, 2876, 3095, 3208,
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
0,
-
-
Page 49
CCS4 DSP Workshop
3208, 3095, 2876, 2568, 191, -79, -277, -402, 157, -69, 6, 62, 67, 44, 22, 5, 16, -12, -8, -5, 2, 1, 1, 1, 0, 0, 0, 0,
2192,
1773,
1339,
915,
526,
-460,
-461,
-417,
-343,
-252,
99,
117,
119,
109,
90,
-8,
-17,
-21,
-22,
-20,
-2,
0,
1,
2,
2,
1,
0,
0,
0,
0,
0,
0,
0};
-
-
//temp variable for convolution signed long signed long temp; short w[FIL_ORDER]; short x; short y; void main() main()
{ int i,n=0;
comm_poll(); //init dsk6416 board and DAC,ADC DSK6416_LED_init(); //LEDs init DSK6416_DIP_init(); for(i=0;i=FIL_ORDER)n=0; else n++; //Read current sample frim line-in x = input_left_sample(); input_left_sample(); w[0] = x; temp = 0; for(i=0;i0;i--) w[i] = w[i-1]; //Output to Headphone output_sample(y); } } }
Kết nối phần cứng như hình h ình 4.6. Sau đó chúng ta sẽ load chương trình xuống kit DSK6416 . Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 50
CCS4 DSP Workshop
Khi chạy chương trình, chúng ta sử dụng Dip switch SW[0] để chọn mode hoạt động giữa sử dụng bộ lọc và không có bộ lọc. Nhận xét vế hiệu ứng thu được.
Hình L-4.7 : Audio FIR Filter Example
Như vậy, qua bài thí nghiệm này, chúng ta đã học cách cách thiết kế một bộ lọc FIR , và thực hiện chúng trên kit DSP. Đặc biệt là chúng ta biết cách xử lý tín hiệu audio realtime và xem xét được hiệu ứng ứn g thực tế của chúng. Trong bài sau , chúng ta sẽ xem xét một dạng d ạng bộ lọc khác , đó là dạng IIR và cách thực hiện bộ lọc IIR sử dụng ghép cascade các tầng SOS (Second-Order Section) rất thông dụng trong thực tế.
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 51
CCS4 DSP Workshop
Bài tập thêm : 1) Viết chương trình thu âm thành từ line-in, l ine-in, thực hiện bộ lọc FIR trên hai kênh stereo và xuất xu ất ra headphone bằng phương pháp sample by sample.. 2) Thiết kế bộ lọc thông dải bậc bậ c 65 , sử dụng Hamming windows, với tần số cắt là 2500Hz, tần số lấy lấ y mẫu 8Khz. 3) Thiết kế bộ lọc thông cao bậc 89 , sử dụng Hamming windows, với tần số cắt là 2200Hz, tần số lấy lấ y mẫu 8Khz. 4) Viết chương trình tính đáp ứng tần số của củ a bộ lọc FIR trên CCS4.
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 52
CCS4 DSP Workshop
3.5 Lab 5 - Thiết kế k ế bộ lọc IIR trên DSK6416 Trong bài thực hành này, chúng ta sẽ : Thiết kế bộ lọc IIR bằng công cụ FDATool của matlab ma tlab Viết chương trình C thực hiện bộ lọc IIR bằng thuật toán xử lý theo từng mẫu cho dòng audio liên tục.
Xem xét phương trình vào ra I/O sau :
Hoặc tương đương.
Phương trình có dạng đệ qui này n ày chính là công thức của bộ lọc IIR (Bộ lọc đáp ứng xung vô hạn). Ta thấy rằng tín hiệu đầu ra hiện tại y(n) , ngoài việc phụ thuộc vào các tín hiệu đầu vào trước đó x(n-k) như bộ lọc FIR, nó còn phụ thuộc vào các tín hiệu đầu ra trước đó y(n-k) . Các dạng cấu trúc của bộ lọc IIR :
Cấu trúc Direct form I Cấu trúc Direct form II Cấu trúc ghép cascade Cấu trúc ghép song song.
Dạng Direct form I được mô tả tổng quát như hình 5.1
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 53
CCS4 DSP Workshop
Hình L-5.1 : IIR dạng Direct form I
Dạng Direct form II là dạng phổ biến hơn với số khối delay giảm một nửa so với dạng direct form fo rm I.
Hình L-5.2 : IIR dạng Direct form II
Còn dạng ghép cascade và song son g song là dạng ghép nhiều bộ lọc bậc thấp để có bộc lọc với bậc cao hơn nhằm tăng hiệu suất của c ủa bộ lọc. Trong bài lab này , chúng ta sử dụng bộ lọc IIR SOS (Second Order Section) là dạng Direct form II ghép dạng cascade cascad e nhiều tầng, vốn rất phổ biến trong thực tế. Mỗi tầng SOS có cấu trúc như sau: Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 54
CCS4 DSP Workshop
Sau đó, chúng ta ghép nhiều bộ SOS lại theo th eo kiểu cascade để có các bộ lọc với hệ số cao hơn. Hình 5.3 mô tả một bộ lọc IIR bậc 4 sử dụng hai bộ lọc SOS bậc hai ghép kiểu cascade.
Hình L-5.3 : IIR dạng Direct form II SOS mắc cascade
Bước đầu tiên, là thiết kế bộ lọc IIR SOS SO S bằng công cụ matlab FDATool . FDATool . Trong bài thực hành này, chúng ta sẽ thiết th iết kế một bộ lọc IIR sử dụng 8 tầng SOS kiểu Cheby Cheb yshev II như hình h ình 5.2 . Sau khi thiết kế xong ta sẽ tạo ra file impinv.cof chứa hệ số của các tầng SOS. Thông số bộ lọc lọ c IIR như sau: IIR Type : Low pass Filter (Chebyshev (Chebyshev II) Sections : 8 Fs : 32Khz Fstop : 3Khz
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 55
CCS4 DSP Workshop
Hình L-5.4 : IIR SOS Design by Matlab FDAToo F DATooll
Tạo một project một project mới có tên là IIR_SOS_Filter là IIR_SOS_Filter và và copy các file c6416dskinit.h , c6416dskinit.h , c6416dskinit.h và impinv.h như impinv.h như hình 5.3.
Hình L-5.5 : Lab 5 IIR Filter using SOS stages
Sau đó tạo file mới có tên main.c và main.c và thêm source code cho chương trình main.c như main.c như sau :
/* * INDUSTRIAL UNIVERSITY of HO CHI MINH CITY
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 56
CCS4 DSP Workshop
* Project : IIR_SOS_filter * Description : Implementation of IIR Filter Using * Cascaded Second Order Direct Form II Sections * Author : Hoang Nguyen * Date: 19/1/2013 * Board support: DSK6416 TI * Platform: CCS4 * */ //include library support #include #include "dsk6416_aic23.h" #include "dsk6416_led.h" #include "dsk6416_dip.h" #include "impinv.cof"
Uint32 fs=DSK6416_AIC23_FREQ_32KH fs=DSK6416_AIC23_FREQ_32KHZ; Z; //set sampling rate //#define DEBUG short x_buffer[500]={0}; x_buffer[500]={0}; //Input buffer short y_buffer[500]={0}; y_buffer[500]={0}; //Output buffer
float w[NUM_SECTIONS][2] = {0}; void main() main()
{ int i,j,sect; float xn=0; float wn=0; float yn=0; short input,output;
comm_poll(); //init dsk6416 board and DAC,ADC DSK6416_LED_init(); //LEDs init DSK6416_DIP_init(); //DIPs SW init for(i=0;i
{ w[i][2] = 0; w[i][1] = 0; w[i][0] = 0; } while(1) //Infinity Loop App
{ (DSK6416_DIP_get(0)==1)//bypass //bypass audio if(DSK6416_DIP_get(0)==1) { DSK6416_LED_on(0);DSK6416_LE DSK6416_LED_on(0);DSK6416_LED_off(1); D_off(1); DSK6416_LED_off(2); input = input_left_sampl input_left_sample(); e(); x_buffer[i++]=input; if(i>499) i =0; output_sample(input); } else if(DSK6416_DIP_get(0)==0)//filtered audio
{ DSK6416_LED_off(0);DSK6416_L DSK6416_LED_off(0);DSK6416_LED_off(1); ED_off(1); DSK6416_LED_on(2);
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 57
CCS4 DSP Workshop xn = input_left_sample(); input_left_sample(); x_buffer[i++]=(short)xn; if(i>499) i =0; for (sect=0 ; sect< NUM_SECTIONS ; sect++) { wn = xn - a[sect][0]*w[sect][0] - a[sect][1]*w[sect][1]; a[sect][1]*w[sect][1]; #ifdef DEBUG printf("w[%d] printf("w[%d] = %f \n",i,wn); \n",i,wn);
#endif
yn = b[sect][0]*wn + b[sect][1]*w[sect][0] + b[sect][2]*w[sect][1]; b[sect][2]*w[sect][1];
#ifdef DEBUG
printf("y[%d] printf("y[%d] = %f\n",i,yn); %f\n",i,yn);
#endif
w[sect][1] = w[sect][0]; w[sect][0] = wn; xn = yn; //output of current section //will be input to next } output = (Uint32)yn; y_buffer[j++]=(short)yn; if(j>499) j =0; output_sample(output);//Send to headphone DAC } } }
Chạy chương trình trên Kit DSK6416 . DSK6416 . Build và chạy chương trình và nghe headphone để xem sự khác biệt giữa việc có bộ lọc lọ c và không có bộ lọc như hình 5.4. Sử dụng SW[0] để chọn có bộ lọc và không có bộ mọc
Hình L-5.6 : Lab 5 IIR Filter Example
Xem xét đáp ứng tần số của bộ lọc. lọc. Vẽ đồ thị graph phổ của tín hiệu hi ệu x_buffer và y_buffer. Hãy so sánh và nhận xét phổ của tín hiệu audio trước và sau khi sử dụng bộ lọc IIR. Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 58
CCS4 DSP Workshop
Hình L-5.7 : Phổ tín hiệu đầu vào
Hình L-5.8 : Phổ tín t ín hiệu sau bộ lọc IIR
Thay đổi hệ số bộ lọc high pass filter. filter. Hãy thay đổi bộ lọc high pass filter bằng cách sử dụng hệ số trong file hp_sos16_iir.cof . Hệ số của bộ lọc này được tạo bởi công cụ FDAtool của matlab với thông số như hình h ình 5.6 .
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 59
CCS4 DSP Workshop
Hình L-5.9 : High pass p ass Filter tần số cắt 3Khz
Load chương trình xuống DSK6416 và v à nhận xét về hiệu ứng của bộ lọc
Bài tập thêm : 1) Thiết kế bộ lọc chọn lọc bậc 16 sử dụng ghép tầng SOS , sử dụng Hamming windows, với tần số cắt là 888Hz, tần số lấy lấ y mẫu 8Khz. 2) Viết chương trình tính đáp ứng tần số của bộ lọc IIR trên CCS4. 3) Viết tín hiệu giả ngẫu nhiên trên CCS4 và đưa vào bộ lọc để xem đáp ứng của đầu ra. 4) Viết chương trình sine_sweep tạo tần số sóng sin quét từ tần số 300Hz tới 10Khz trên CCS4
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 60
CCS4 DSP Workshop
3.6 Lab 6 - Thuật toán toá n biến đổi Fourier FFT (Optional) Trong bài thực hành này, chúng ta sẽ : Viết chương trình C thực hiện bộ lọc thuật thu ật toán xử lý Fourier nhanh FFT (Fast Fourier Transform) dựa trên t rên thuật toán DFT. Và ứng dụng vào việc phân tích phổ của tín hiệu bất kỳ.
Thuật toán biến đổi Fourier rời rạc là thuật toán biến đổi tín hiệu miền thời gian thành tín hiệu tương đương trong miền tần số. Công thức DFT của tín hiệu rời rạc theo thời gian x(n) có dạng như sau :
X() X() = (n)
= 2 hoặc ho ặc = N là số điểm lấy DFT. L là chiều dài khung (frame length) lấy DFT. Tạo project trên CCS:
Viết chương trình như sau: /* * INDUSTRIAL UNIVERSITY of HO CHI MINH CITY * Implement DFT with C program * Author: Chu Manh Cuong * Project : example_dft * Date: 23/9/2011 * Hardware : DSK6416 * Platform : CCS4 */ #include #include #include "dsk6416_aic23.h" #include "dsk6416_led.h" #include "dsk6416_dip.h" Uint32 fs = DSK6416_AIC23_FREQ_8KHZ; DSK6416_AIC23_FREQ_8KHZ; /*setting N point DFT*/ #define N 128 //N point DFT
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 61
CCS4 DSP Workshop #define L 8 //leght of x #define Fs 8000 //sampling frequency for calculate fk (at fk,
magnitude is max) /*creat a sine wave table for example*/ {0,707,1000,707,0,-707,-1000,-707}; ,-707}; short x[L] = {0,707,1000,707,0,-707,-1000 /*declare struct for Complex*/ typedef struct tagComplex { float real; float img; }Complex; Complex X[N], z; //declar variables complex struct tagMagnitude{ short max;
Uint32 loc; }Magnitude; /*put DFT value to DFT array, note value at here is complex*/ short DFT_Complex[N]; /*real part of DFT*/ short DFT_Real[N/2]; /*wk, to calculate DFT*/ /*pi constant*/ #define pi 3.14 /*Detect peak of Frequency Spectrum array*/ short max_DFT(Uint32 *loc)
{ short max; int i;
max = DFT_Real[0]; *loc = 0; for( i=0;imax) { max = DFT_Real[i]; *loc = i; } } return max; } main main (void ) void { int n,k; float wk,fk; float temp;
comm_poll(); printf("-----------printf("----------------------------------------------------------------------------------\n"); \n" ); printf(" printf("
INDUSTRIAL UNIVERSITY of HO CHI MINH CITY
\n"); \n" ); printf(" printf(" Lab 6 : Implement DFT on CCS4\n" CCS4\n"); ); printf(" printf(" Author: Chu Manh Cuong\n" Cuong\n"); ); printf("-----------printf("----------------------------------------------------------------------------------\n\n"); \n\n" );
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 62
CCS4 DSP Workshop
printf("DSK6416> printf("DSK6416> %d point DFT of x[n]\n",sizeof(DFT_Complex)/2); x[n]\n", printf("DSK6416> printf("DSK6416> Length of x\n"); x\n"); printf("DSK6416> printf("DSK6416> L = %d\n", %d\n",sizeof(x)/2); printf("DSK6416> printf("DSK6416> fs = %dhz\n",Fs); %dhz\n",Fs); printf("DSK6416> printf("DSK6416> DFT Calculating... Calculating...\n" \n"); ); //DFT Algorithm Implementation for(k=0;k printf("-> X[%d] = %f",k,X[k].real); %f",k,X[k].real); if(X[k].img>0) printf(" printf(" + %fi\n",X[k].img); %fi\n",X[k].img); else
printf(" printf(" - %fi\n",abs(X[k].img)); %fi\n",abs(X[k].img)); #endif
} /*determine DFT module*/ for(n=0;n printf("-> DFT_Complex[%d] = %d\n",n,DFT_Complex[n]); %d\n",n,DFT_Complex[n]); #endif
} for(n=0;n
DFT_Real[n] = DFT_Complex[n]; Magnitude.max = max_DFT(&Magnitude.loc); max_DFT(&Magnitude.loc); #ifdef DEBUG printf("-> printf("-> Maximum magnitude = %d \n",Magnitude.max); \n",Magnitude.max); #endif
//Display infomation of signal's spectrum fk = (Magnitude.loc*Fs)/N; (Magnitude.loc*Fs)/N; //Get Peak of Spectrum printf("-> printf("-> Center freq = %f Hz\n" Hz\n",fk); ,fk); printf("-> printf("-> Acquisition Buffer : %d for x, %d for DFT_Complex, %d for DFT_Real\n", DFT_Real\n" ,sizeof(x)/2, sizeof(DFT_Complex)/2,sizeof(DFT_Real)/2); printf("-> printf("-> Dsp Data Type: 16 bit signed interger\n"); interger\n"); printf("-> printf("-> Sampling Rate HZ: 8000\n" 8000\n"); ); printf("-> printf("-> Start Address : x or DFT_Complex or DFT_Real\n"); DFT_Real\n"); printf("-> printf("-> Display Data Size: %d for x, %d for DFT_Complex, %d for DFT_Real\n", DFT_Real\n" ,sizeof(x)/2, sizeof(DFT_Complex)/2,sizeof(DFT_Real)/2); getchar(); while(1); }
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 63
CCS4 DSP Workshop
Kết nối board tới máy má y tính với cable USB, nhấp nh ấp vào Debug vào Debug Active Project sau đó nhấn vào Run. vào Run. Sau khi thực hiện xong chương trình, cửa sổ Console sẽ xuất hiện các thông số về chương trình như sau:
Tiến hành theo hướng dẫn chúng ta sẽ xem được lần lượt: Tín hiệu sine cần xác định DFT:
Đồ thị biến đổi FFT của CCSV4 sẽ có dạng d ạng như sau:
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 64
CCS4 DSP Workshop
Và đây là đồ thị DFT của tín hiệu h iệu x(n) sau khi được áp dụng thuật toán DFT: - Phổ phức:
-
Phổ thực của tín hiệu:
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 65
CCS4 DSP Workshop
So sánh DFT thu được sau khi chạy chạ y chương trình và FFT của CCSV4 là giống nhau.
Như vậy kết luận rằng với tín hiệu x(n) đã cho trong chương trình chúng ta đã xác định được DFT của nó với kết quả thu được như sau: N = 128 là số điểm DFT L = 8 là kích thước của x(n) Fs = 8Khz là tần số lấy mẫu Mainlobe DFT của tín hiệu nằm tại vị trí f thu được: F = 875 Hz (~888Hz như lý thuyết)
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 66
CCS4 DSP Workshop
Bài tập thêm : 1) Thực hiện thuật toán DCT (Discrete Cosine Co sine Transform ) trên CCS4. 2) Thực hiện thuật toán FFT (Fast Fourier Fou rier Transform ) 256 điểm trên CCS4.
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 67
CCS4 DSP Workshop
Reference 1. “Xử lý số tín hiệu và wavelets 1” , Lê Tiến Thường , NXB ĐHQG TPHCM , 2004 2. “Digital Signal Processing and Applications with the C6713 and C6416 DSK II” , , Rulph Chassaing , Wiley & Sons Publication , 2008 3. “Matlab 2009” , The Mathwork , 2009 4. “Internet websites”
Nguyễn Thế Hòang, Bộ môn Viễn Thông, ĐH CN TP HCM
Page 68