Based on: DSP Development Environment: Introductory Exercise for TI TMS320C54x by Douglas L. Jones, Swaroop Appadwedula, Matthew Berry, Mark Haun, Dima Moussa, Daniel Sachs
Summary: This exercise introduces the hardware and software used in the course. By the end of this module, you should be comfortable with the basics of testing a simple real-time DSP system with Code Composer Studio, the debugging environment we will be using throughout the semester. First you will connect the laboratory equipment and test a real-time DSP system with provided code to implement an eight-tap (eight coefficient) finite impulse response (FIR) filter. With a working system available, you will then begin to explore the debugging software used for downloading, modifying, and testing your code. Finally, you will create a filter in MATLAB and use test vectors to verify the DSP's output.
Note: Your browser may not currently support MathML. See our browser support page for additional details. You can always view the correct math in the PDF version.
แบบฝึกหัดนี้เป็นการแนะนำฮาร์ดแวร์และซอฟท์แวร์ที่ใช้ในวิชานี้ในตอนท้ายของแบบฝึกหัดนั้น ผู้อ่านจะ สามารถเข้าใจพื้นฐานการปฏิการระบบประมวลผลสัญญาณดิจิตอล(DSP)แบบเรียลไทม์โดย Code Composer Studio ซึ่งเป็นสภาพแวดล้อมสำหรับทำการดีบัก ที่จะใช้ตลอดทั้งเทอมการศึกษา ขั้นแรกจะเป็นการเชื่อมต่ออุปกรณ์การทดลองและ ทำการทดสอบระบบประมวลผลสัญญาณดิจิตอล แบบเรียลไทม์ด้วยโค้ดที่เตรียมไว้ให้เพื่อจัดการกับ วงจรกรองแบบ ที่มีผลตอบสนองอิมพัลส์จำกัด (Finite Impulse Response: FIR) แบบ eight-tap (or eight coefficient) ด้วยสภาวะแวดล้อมนี้ทำให้ท่านสามารถเริ่มค้นหาซอฟ์ทแวร์ในการดีบักที่ใช้ในการดาว์นโหลด เปลี่ยนแปลง และทดสอบโค้ดของท่าน ท้ายที่สุดนั้นท่านจะสร้างวงจรกรองด้วย MATLAB และใช้ test vectors พิสูจน์ผลลัพท์ที่ให้จากระบบประมวลผลสัญญาณดิจิตอล
แบบฝึกหัดนี้ถือเอาว่าท่านสามารถเข้าถึงห้องปฏิบัติการซึ่งประกอบไปด้วยเครื่องมือดั่ง Texas Instruments รุ่น TMS320C549 ซึ่งเป็นชิพประมวลผลสัญญาณดิจิตอลบนบอร์ดดิจิตอลสเปคตรัมรุ่น TMS320LC54x บอร์ด ( evaluation board) นี้จะต่อกับเครื่องคอมพิวเตอร์ระบบปฏิบัติการวินโดว์ส และสามารถควบคุมโดยแอพพลิเคชั่นของคอมพิวเตอร์อย่าง Code Composer Studio ตัวดีบักและสภาพแวดล้อม ที่ใช้ในการทดลอง ด้านบนของ บอร์ด DSP นี้จะเป็น Spectrum Digital surround-sound module ที่ใช้งาน Crystal Semiconductor CS4226 codec บอร์ดที่ใช้นี้มีอินพุทแบบอนาลอก 2 ช่องและเอาท์พุท แบบอนาลอกอีก 6 ช่องที่มี อัตรา CD พื้นฐานอยู่ที่ 44.1 kHz บอร์ดประมวลผลสัญญาณดิจิตอลนี้ยังสามารถสื่อสารกับโค้ดของผู้ใช้งานหรือ Terminal Emulator ที่ปฏิบัติการอยู่บนเครื่องคอมพิวเตอร์ผ่านทางซีเรียล (Serial) พอร์ท
นอกจากบอร์ดประมวลผลสัญญาณดิจิตอลกับคอมพิวเตอร์แล้วนั้น ในแต่ละห้องปฏิบัติการณ์ยังควรที่จะมีการจัด Function Generator เพื่อการทดลองสัญญาณต่างๆ และ เครื่อง Oscilloscope เพื่อแสดงผลในรูปคลื่น
นำสายเคเบิลที่มี BNC ต่อกับเอาท์พุทของ Function Generator กับอินพุทช่องที่หนึ่งของบอร์ด DSP จากนั้นเชื่อมเอาท์พุทช่องที่หนึ่งและสองของบอร์ดเข้ากับช่องที่หนึ่งและสองของเครื่อง Oscilloscope การเชื่อมต่ออินพุทและเอาท์พุทสำหรับ บอร์ดDSP แสดงดั่งรูปที่ 1 รูป 1.
| Example Hardware Setup |
|---|
![]() |
มีข้อสังเกตุว่าในการติดตั้งข้างต้นนี้ จะมีเพียงสัญญาณเดียวเท่านั้นที่เข้าสู่ บอร์ดDSP และออกจากบอร์ดเป็นจำนวนสองสัญญาณ เอาท์พุทจากช่องที่หนึ่งนั้นคือสัญญาณที่ถูกกรองแล้ว และเอาท์พุทจากช่องที่สองคือสัญญาณที่ไม่ได้ทำการกรอง สิ่งนี้จะทำให้ท่านสามารถเห็นทั้งลักษณะสัญญาณที่เข้าสู่บอร์ด และ สัญญาณที่ได้รับหลังจากการกรองจากเครื่อง Oscilloscope หลังจากนั้นให้เปิดเครื่อง Function Generator และ Oscilloscope
ใช้เลขประจำตัวและรหัสที่กำหนดให้เพื่อทำการแสดงตัวเพื่อการใช้เครื่องคอมพิวเตอร์ในห้องปฏิบัติการ
บอร์ดจะถูกควบคุมโดยคอมพิวเตอร์ผ่าน JTAG (XDS510PP) ที่ใช้ Code Composer Studio ในสภาพแวดล้อมเช่นนี้จะอนุญาตให้ผู้ใช้ดาวน์โหลด ประมวลผล และดีบักโค้ดบนเครื่องคอมพิวเตอร์ เพื่อความคุ้นเคยกับสภาพแวดล้อมที่ใช้ดีบักและระบบเรียลไทม์ที่ใช้วงจรกรองแบบที่มีผลตอบสนองอิมพัลส์จำกัดนั้นให้ทำตามขั้นตอนที่จะกล่าวต่อไป (ขั้นตอนที่ 3, 4 และ 5) แล้วทำการวิเคราะห์ผลตอบสนองความถี่ของตัวกรองด้วยแบบฝึกหัดที่ใช้ MATLAB (ขั้นที่ 6 และ 7) (Steps 6 and 7).
ก่อนที่จะทำการปฏิบัติการและทดสอบโค้ดของวงจรกรองแบบที่มีผลตอบสนองอิมพัลส์จำกัดนั้น จะต้องมีการแอสเซมบลีไฟล์ต้นกำเนิด (Source File) ก่อน ลำดับแรกให้ใช้ DOS promptบนวินโดว์และสร้างไดเรคทอรี่ใหม่เพื่อเก็บไฟล์ หลังจากนั้นให้ทำสำเนาไฟล์ filter.asm, coef1.asm, coef2.asm, core.asm, และ vectcore.asm ลงในไดเรคทอรี่นั้น
ต่อจากนั้นให้ทำสำเนาไฟล์ coef1.asm ให้เป็นชื่อ
"coef.asm" และรวบรวมโค้ดตัวกรองเข้าโดยการพิมพ์
asm filter บน DOS prompt.
ขั้นตอนแรกในการรวบรวมนั้นรวมสัมปสิทธิ์ (coefficients) ของวงจรกรองแบบที่มีผลตอบสนองอิมพัลส์จำกัด (ซึ่งเก็บไว้ที่ coef.asm) iเข้าไปใน ไฟล์ filter.asm, แล้วก็ทำการคอมไพล์ผลเพื่อสร้างไฟล์เอาท์พุทที่มี ไบนารี่โค้ดที่พร้อมปฏิบัติการได้ในรูปของไฟล์ชื่อ filter.out.
จากโค้ดที่ได้สร้างไว้ข้างต้นนั้น ให้คลิ้กที่ไอคอน Code Composer สองครั้งเพื่อเปิดสภาพแวดล้อมที่ใช้ทำการดีบัก ก่อนที่จะทำการโหลดโค้ดนั้น จะต้องทำการติดตั้งบอร์ดDSP ใหม่ processor mode status register
(PMST). โดยการเลือก จากรายการ Debug ในแอพพลิเคชั่นของ Code Composer
Reset จากรายการ Debug ในแอพพลิเคชั่นของ Code Composer
เมื่อทำการติดตั้งบอร์ดเสร็จแล้ว ให้เลือก CPU
Registers จากรายการ View แล้วเลือก CPU Register. การทำเช่นนี้เพื่อเป็นการเปิดหน้าต่างย่อยที่ด้านล่างของหน้าต่างแอพพลิเคชั่นของ Code Composer ที่แสดง DSP registers ต่างๆ ตรวจสอบที่ PMST register ว่ามีค่าฐารสิบหกเป็น FFE0 เพื่อให้ บอร์ดDSP ทำงานได้อย่างถูกต้อง ถ้าค่าไม่เป็นอย่างดังกล่าวนั้นให้เปลี่ยนค่า PMST
register โดยการคลิ้กสองครั้งบนค่าที่ตั้งไว้และเปลี่ยนเป็นค่าที่ถูกต้องในหน้าต่าง Edit Register
ที่แสดงขึ้นมา
หลังจากนั้นให้ทำการโหลดไฟล์ตัวกรองที่รวบรวมไว้ข้างต้นโดยการเลือก Load Program จากรายการ
File ในท้ายสุดให้ติดตั้งค่า DSP ใหม่ และสั้งปฎิบัติการโค้ดโดยเลือกRun จากรายการ
Debug menu.
โปรแกรมที่ท่านได้ทำการปฏิบัติการอยู่นั้นจะอนุญาตให้อินพุทจากอินพุทช่องที่หนึ่งผ่านและส่งรูปแบบคลื่นเอาท์พุทไปยังเอาท์พุทช่องที่หนึ่งและสอง (ซึ่งก็คือสัญญาณที่ถูกกรองและสัญญาณอินพุท ตามลำดับ) มีข้อสังเกตุว่า สัญญาณอินพุทที่ออกมาทางช่องที่สองนั้นอาจจะแตกต่างจากอินพุทที่เข้าไปทางช่องที่หนึ่ง เนื่องจากเกิดการบิดเบือนจากการแปลงอินพุทที่เป็นอนาลอกให้กลายเป็นดิจิตอลและเปลี่ยนกลับไปเป็นอนาลอกอีกครั้งหนึ่ง ตัวเปลี่ยนอนาลอกเป็นดิจิตอลและ ดิจิตอลเป็นอนาลอกที่อยู่ในทั้งหกช่องนั้นรอบตัวบอร์ดนั้นทำงานที่อัตราพื้นฐานของ 44.1 กิโลเฮิร์ธ และมีตัวกรองแบบ anti-aliasing filter และ anti-imaging filter, ตามลำดับ นั้นคือตามแผนการนั้นจะสามารถขจัดความถี่ที่มากกว่า 22.05 กิโลเฮิร์ธ ตัวแปลงบนทั้งหกช่องของบอร์ดนั้นยังเป็นคู่กระแสสลับ AC coupled และไม่สามารถผ่านสัญญาณกระแสตรงได้ จากข้อมูลเบื้องต้นนั้นอะไรคือสิ่งที่แตกต่างระหว่างสัญญาณต่างๆจากอินพุทช่องที่หนุ่งและเอาท์พุทช่องที่สองที่ท่านคาดหวังไว้นั้น
ตั้งค่าขนาดสูงของความถี่ใน Function Generator เป็น 10 โวล์ทจากจุดสูงสุดและต่ำสุด และตั้งรูปคลื่นพ้อลส์ (pulse) ให้เป็นรูปคลื่นไซด์ (Sinusoidal) สังเกตุผลตอบสนองความถี่ของตัวกรองโดยการเปลี่ยนสัญญาณอินพุทตามความถี่เกี่ยวข้อง อะไรคือช่วงความถี่เกี่ยวข้องสำหรับระบบ DSP ที่มีอัตราเบื้องต้นเป็น 44.1 กิโลเฮิร์ธ
จากตัวสนองความถี่ที่ได้ทำการวิเคราะห์นั้น ให้ทำการวิเคราะห์ลักษณ์ของฟิวเตอร์ว่าเป็นชนิดใด ( วงจรกรอง low-pass วงจรกรอง high-pass หรือ วงจรกกรองแบบ band-pass) และณ.ที่ -6 เดซิเบล (half-amplitude) ความถี่คัทออฟ (หรือ ความถี่ต่างๆ) นี่อาจจะช่วยการตั้งค่าชนวนบนช่องที่สองของ oscilloscope เพราะว่าสัญญาณบนช่องที่หนึ่งอาจจะเข้าสู่ศูนย์ได้
เมิ่อทำการหาชนิดของตัวกรองเรียบร้อยแล้ว DSP จะทำการอิมพลีเม้นต์ และทำตามขั้นตอนข้างต้นซ้ำอีกครั้งกับตัวกรองและตัวสัมปสิทธิ์ที่ต่างกันออกไปขณะทำการแอสเซมบลี สัมปสิทธิ์ที่ต่างกันในไฟล์ coef2.asm. ทำสำเนาของ
coef2.asm และเปลี่ยนชื่อเป็น coef.asm.
กระบวกการแอสเซมบลีและการทอสอบตัวกรองตัวใหม่นั้นสามารถทำตามการแนะนำการใช้ asm prompt และทำตามขั้นตอนซ้ำอีกครั้งโดยการประมวลผลด้วยโค้ดจากขั้นตอนที่4 Step 4.
จากนั้นให้ทำการหาชนิดของตัวกรองใหม่อย่างเช่นขั้นตอนที่4 Step 4, และค่าของตัวกรองณ. -6 เดซิเบลโดยการทอสอบระบบด้วยความถี่ที่ต่างกัน
ในขั้นตอนนี้เป็นการใช้ MATLAB เพื่อวิเคราะห์ ผลตอบสนองความถี่ของตัวกรองนั้นๆ ด้วยการทำสำเนาค่าสัมปสิทธิ์จาก DSP ไปยัง MATLAB และแสดงขนาดของผลตอบสนองความถี่โดนการใช้คำสั่ง
freqz ใน MATLAB
ไฟล์
coef.asm จะทำการเก็บสัมปสิทธิ์ของวงจรกรองแบบที่มีผลตอบสนองอิมพัลส์จำกัดนั้นซึ่งจะบันทึกในหน่วยความจำบน DSP
เริ่มจากตำแหน่ง (ฐานสิบหก) 0x1000และแต่ละตัวกรองที่ได้กระทำการแอสเซมบลีและประมวลผลแล้วจะมีสัมปสิทธิ์แปดตัว ในการดูสัมปสิทธิ์ของตัวกรองในรูปแบบของจำนวนเต็มที่มีเครื่องหมายนั้นให้เลือกรายการ Memory จากรายการ
View เพื่อเปิดรายการ Memory Window
Options หลังจากนั้นให้เปลี่ยนค่าที่อยู่ตัวแปลเป็น 0x1000 และเปลี่ยนค่าเป็น
16-Bit Signed Intคลิ้ก OK เพื่อเปิดหน้าต่างหน่วยความจำที่แสดงค่าที่อยู่ของความจำต่างๆซึ่งจะแสดงอยู่ด้านซ้ายมือ
ในตัวอย่างนี้สัมปสิทธิ์ตัวกรองจะอยู่บรรจุลงหน่วยความจำตามลำดับที่น้อยลงไปซึ่งก็หมายถึงตัวสัปสิทธิ์ตัวสุดท้ายซึ่งก็คือ
0x1000 และตัวสัปสิทธิ์ตัวแรกซึ่งก็คือ
0x1007.
หลังจากเข้าใจการเก็บค่าสัมปสิทธิ์แล้วนั้นขั้นตอนต่อไปจะเป็นการใช้คำสั่ง freqz ใน MATLAB เพื่อจะดูการตอบสนองของตัวกรอง ในการใช้คำสั่งนี้ผู้ใช้ต้องสร้างเวคเตอร์ของสัมปสิทธิ์ขึ้นใน MATLAB ตัวอย่างเช่นในกรณีวิเคราะห์ตัวกรองชนิด three-tap ที่มีค่าสัมปสิทธิ์ -10,20,-10 จะสามารถใช้คำสั่งทาง MATLAB ดังต่อไปนี้
h = [-10, 20, -10]; plot(abs(freqz(h)))
จะสังเกตุได้ว่าจะต้องมีการใส่ค่าลงไปถึงแปดค่า ตั้งแต่หน่วยความจำที่ 0x1000 ถึง
0x1007 ลงในค่าสัมปสิทธิ์
ให้ตั้งข้อสังเกตุว่าเมื่อเทียบ ผลการตอบสนองจาก MATLAB กับผลการทดลองก่อนใช้ MATLAB นั้นเป็นอย่างไร สิ่งใดที่ทำให้ผลที่ได้รับต่างกัน
MATLAB script จะถูกเก็บไว้ให้สำหรับคนที่ต้องการนำไปใช้เป็นแนวทางในการพัฒนา code ต่างๆ ยกตัวอย่างเช่น script ที่ใช้ในการบันทึกค่า coefficient ที่ผ่านการกรองจาก MATLAB ให้อยู่ในรูปที่สามารถนำไปใช้ในขั้นตอนของ Assembly ได้ทันทีโดยไม่ต้องพิมพ์ข้อมูลเข้าไปใหม่ (จะเป็นประโยชน์อย่างมากสำหรับการทำ filter จำนวนมาก) Script บางส่วนจะถูกติดตั้งบนคอมพิวเตอร์ของคุณเรียบร้อยแล้ว และในบางส่วนคุณสามารถไปดาวน์โหลดได้จากลิงค์ที่แสดงไว้
ในขั้นแรกให้ใช้ MATLAB สร้าง eight-tap filter แบบสุ่มโดยพิมพ์คำสั่ง h = gen_filt; จากนั้นให้ทำการบันทึกค่าเวคเตอร์ของสัมปสิทธิ์ตัวกรองด้วยการพิมพ์คำสั่ง
save_coef('coef.asm',flipud(h));โดยอย่าลืมตรวจให้แน่ใจว่าไฟล์นั้นถูกบันทึกอยู่ที่ไดเรคทอรี่ของคุณ (script ที่กระทำฟังก์ชันดังกล่าวนั้นคือ gen_filt.m และsave_coef.m.)
Script ของ MATLAB จะทำการบันทึกค่าเวคเตอร์
coef.asm. โปรดระวังว่าค่าของเวคเตอร์สัมปสิทธิ์ที่ถูกบันทึกนั้นจะถูกกลับลำดับ นั่นคือ ค่าของสัมปสิทธิ์
0x1000
จนถึง 0x1007 นั้นลำดับจะถูกลับ
ตอนนี้คุณอาจจะลอง re-assembly และประมวลผลโค้ดที่ใช้ในการกรองใหม่ โดยทำตามขั้นตอนที่ 5Step 5.
ให้สังเกตด้วยว่าในขณะที่คุณโหลดตัวกรอง ตัวใหม่เข้าไปนั้นหน่วยความจำในตำแหน่ง 0x1000 ถึง
0x1007 นั้นมีการเปลี่ยนแปลง
ไม่เพียงคุณสามารถดูข้อมูลที่อยู่ในหน่วยความจำของ DSP ผ่านตัวดีบัก แต่คุณยังสามารถเปลี่ยนค่าที่อยู่ในหน่วยความจำนั้นได้อีกด้วย คุณสามารถทำได้โดยการ double-click ที่ตำแหน่งที่คุณต้องการ จากนั้นคุณก็สามารถทำการเปลี่ยนค่าได้จาก pop-up window
เปลี่ยนค่าที่อยู่ในหน่วยความจะตั้งแต่ตำแหน่ง
0x1000 จนถึง 0x1007 เพื่อให้สอดคล้องกับตัวกรอง
หลังจากที่ทำการเปลี่ยนค่าสัมประสิทธิ์ครบทั้ง แปดตัวแล้ว ให้ทำการรัน filter ตัวใหม่ และให้ใช้ oscilloscope ในการวัดค่า delay ที่เกิดขึ้นระหว่างอินพุตและคลื่นผลลัพธ์ที่ผ่านการกรองแล้ว
จะเกิดอะไรขึ้นกับผลลัพธ์ที่ได้ถ้าคุณทำการเปลี่ยนค่า scaling หรือ ค่า delay? สำหรับ six-sample delay นั้นมีความยาวกี่วินาที?
ในแบบฝึกหัดสุดท้ายนี้ คุณจะได้ผลลัพธ์จาก DSP สำหรับค่าอินพุท ที่ถูกกำหนดโดย test vector จากนั้นจะทำการเปรียบเทียบผลลัพธ์ที่ได้จาก DSP กับผลลัพธ์ที่ได้จากการ ทำ MATLAB simulation ของ filter processing โดยใช้ อินพุทเดียวกัน ถ้า DSP ถูก implement อย่างถูกต้องผลลัพธ์ที่ได้จะใกล้เคียงหรืออาจจะเท่ากัน เพื่อที่จะทำการทดสอบดังกล่าว ให้คุณสร้างกราฟคลื่นขึ้นใน MATLAB จากนั้นให้บันทึกเป็น test vector จากนั้นให้ทำการประมวลผล DSP filter โดยใช้ test vector ดังกล่าวเป็น input เมื่อเสร็จแล้วให้ทำการ import ผลลัพธ์เข้าไปใน MATLAB เพื่อเปรียบเทียบผล
ขั้นตอนแรกในการใช้ test vector ก็คือการสร้างสัญญาณอินพุทที่เหมาะสม ทางหนึ่งที่สามารถทำได้คือ การใช้ฟังก์ชัน sweep (available as sweep.m) ที่เคลื่อนที่ข้ามช่วงของความถี่ จากนั้นให้ใช้ฟังก์ชัน
save_test_vector (available as save_test_vector.m ให้ทำการบันทึกใส่ในไฟล์ที่จะนำไปใช้ต่อในส่วนของการทำ DSP
สร้าง sinusoid sweep และทำการบันทึกให้เป็น DSP test vector ไฟล์ด้วยคำสั่งต่อไปนี้:
>> t=sweep(0.1*pi,0.9*pi,0.25,500); % Generate a frequency sweep
>> save_test_vector('testvect.asm',t); % Save the test vector
จากนั้นให้ใช้คำสั่ง conv ของ MATLAB ในการจำลองผลของการทำ filter sweep ด้วย filter
gen_filt ก่อนหน้านี้ ให้สังเกตว่านี่เป็นขั้นตอนในการสร้างเวคเตอร์ที่มีขนาด 507 (โดยที่
>> out=conv(h,t) % Filter t with FIR filter h
>> out=out(1:500) % Keep first 500 elements of out
ในตอนนี้ให้ทำการแก้ไขในไฟล์ filter.asm เพื่อที่จะใช้ “test_vector” จาก core file vectcore.asm. แทนที่จะรับข้อมูลจาก A/D converter แล้วส่งข้อมูลผลลัพธ์ไปให้ D/A Core file จะรับ input และบันทึก output ไปที่หน่วยความจำของ DSP โดยที่ test vector นั้นจะถูกเก็บอยู่ที่ evaluation board ของ DSP ซึ่งจะไม่ยุ่งเกี่ยวกับในส่วนของโปรแกรมและข้อมูลอื่น
.etext สามารถหาข้อมูลเพิ่มเติมในส่วนของการแบ่งหน่วยความจำของ DSP รวมทั้งการทำ memory mapping ได้จาก Core File: Introduction to Six-Channel
Board for TI EVM320C54
ในการประมวลผลโปรแกรมสำหรับ test vector นี้ จะต้องไปทำการแก้ filter.asm. โดย assembly source นั้นเป็นเพียง text ไฟล์ ที่คุณสามารถทำการ edit ได้โดยใช้ editor ตามที่คุณต้องการ เช่น WordPad, Emacs, และ VI โดยทำการแก้ที่บรรทัดแรกของไฟล์จาก
.copy "core.asm"
ให้เป็น:
.copy "testvect.asm"
.copy "vectcore.asm"
ให้สังเกตว่าข้างหน้าของ
.copy นั้นจะต้องใส่ directive
การเปลี่ยนแปลงนี้จะส่งผลกับ test vector ที่คุณสร้างขึ้นและสามารถเลือกใช้ core ไฟล์ตามที่ต้องการ หลังจากที่ทำการแก้ไข code เสร็จเรียบร้อยแล้วให้ทำการ assemble , โหลด แล้วรันไฟล์โดยใช้ Code Composer เหมือนก่อนหน้านี้ หลังจากผ่านไป 2-3 วินาที ให้ทำการ หยุดการทำงานของ DSP (ใช้คำสั่ง Halt ที่อยู่ภายใต้
Debug menu) จากนั้นให้ตรวจดูว่า DSP ได้หยุดทำงานที่ branch statement ที่ branch ไปที่ตัวของมันเอง จากหน้าจอ disassembly window บรรทัด: 0000:611F F073 B 611fh จะถูก highlight
จากนั้นให้ทำการบันทึก test output ไฟล์แล้วทำการโหลดกลับเข้าสู่ MATLAB ซึ่งสามารถทำได้โดยการบันทึก 3,000 memory element ( 6 channels คูณด้วย 500 samples) โดยเริ่มที่ตำแหน่ง 0x8000 iในหน่วยความจำของโปรแกรม ทำได้โดยเลือก File->Data->Save... ที่อยู่ใน Code Composer Studio ให้ใส่ชื่อไฟล์เป็น
output.dat แล้วกด Enter
จากนั้นให้ใส่ค่า 0x8000 ในช่อง Address field ของ Dialog Box ที่แสดงขึ้น, ใส่ 3000 ในช่อง Length field ให้เลือก Program จาก drop-down menu ถัดไปที่ Page ทุกครั้งที่ทำการบันทึกผลลัพธ์ต้องตรวจดูว่าได้ใส่ length ที่ถูกต้อง ( 6 คูณด้วยขนาดของ test vector)
ขั้นสุดท้าย ให้ใช้คำสั่ง read_vector (available as read_vector.m) เป็นคำสั่งที่ใช้ในการอ่านผลลัพธ์ที่บันทึกอยู่ใน MATLAB สามารถทำได้โดยพิมพ์คำสั่งต่อไปนี้:
>> [ch1, ch2] = read_vector('output.dat');
ตอนนี้ผลที่ได้คือ ch1 จะเป็นค่า test_vector ที่ผ่านการ filter ของ test signal ที่คุณสร้างขึ้น ในขณะที่ ch2 นั้นควรจะใกล้เคียงหรือเหมือนกับ ch1 เป็นผลลัพธ์ที่ได้จาก DSP
ch2 และ ch1ไม่เหมือนกันนั้นเป็นเพราะ quantization error ในการบันทึก test vector สำหรับ หน่วยความจำแบบ 16-bit
หลังจากที่ทำการโหลดผลลัพธ์ของการกรอง (calculated as
out above) เพื่อทำการเปรียบเทียบผลกับ (in
ch1 from above). เรายังสามารถนำผลลัพธ์ที่ได้มาสร้างกราฟเพื่อดูเปรียบเทียบ ซึ่งสามารถทำได้ดังนี้:
>> plot(out,'r'); % Plot the expected curve in red
>> hold on % Plot the next plot on top of this one
>> plot(ch1,'g'); % Plot the expected curve in green
>> hold off
คุณจะต้องตรวจให้แน่ใจว่าผลลัพธ์ทั้งสองนั้นต่างกันเกือบเป็นศูนย์ ซึ่งสามารถทำได้ด้วยการสร้างกราฟผลต่างของทั้งสองเวคเตอร์:
>> plot(out-ch1); % Plot error signal
Yคุณจะพบว่าผลลัพธ์ทั้งสองออกมาต่างกันก็เพราะ DSP ใช้ 16-bit precision ในการคำนวณ ในขณะที่ MATLAB ใช้ 64-bit floating point numbers for its arithmetic
ให้สังเกตว่าการเปรียบเทียบสองเวคเตอร์ด้วยวิธีนี้นั้น เวคเตอร์ทั้งสองควรจะมีขนาดเท่ากันซึ่งสามารถกำหนดได้จากคำสั่งใน MATLAB out=out(1:500)
above.