<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE document PUBLIC "-//CNX//DTD CNXML 0.5 plus MathML//EN" "http://cnx.rice.edu/cnxml/0.5/DTD/cnxml_mathml.dtd">
<document xmlns="http://cnx.rice.edu/cnxml" xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:bib="http://bibtexml.sf.net/" id="m10621">
  <name>Multirate Filtering: Implementation on TI TMS320C54x (Thai Version)</name>
  <metadata>
  <md:version>2.9</md:version>
  <md:created>2004/10/31 14:55:59.821 US/Central</md:created>
  <md:revised>2004/10/31 14:56:16.745 US/Central</md:revised>
  <md:authorlist>
      <md:author id="dljones">
      <md:firstname>Douglas</md:firstname>
      <md:othername>L.</md:othername>
      <md:surname>Jones</md:surname>
      <md:email>dl-jones@uiuc.edu</md:email>
    </md:author>
      <md:author id="appadwed">
      <md:firstname>Swaroop</md:firstname>
      
      <md:surname>Appadwedula</md:surname>
      <md:email>appadwed@uiuc.edu</md:email>
    </md:author>
      <md:author id="mjberry">
      <md:firstname>Matthew</md:firstname>
      <md:othername>J.</md:othername>
      <md:surname>Berry</md:surname>
      <md:email>mjberry@uiuc.edu</md:email>
    </md:author>
      <md:author id="markhaun">
      <md:firstname>Mark</md:firstname>
      <md:othername>A.</md:othername>
      <md:surname>Haun</md:surname>
      <md:email>markhaun@uiuc.edu</md:email>
    </md:author>
      <md:author id="jake">
      <md:firstname>Jake</md:firstname>
      
      <md:surname>Janevitz</md:surname>
      <md:email>jake@janovetz.com</md:email>
    </md:author>
      <md:author id="kramer">
      <md:firstname>Michael</md:firstname>
      <md:othername>L.</md:othername>
      <md:surname>Kramer</md:surname>
      <md:email>kramer@ifp.uiuc.edu</md:email>
    </md:author>
      <md:author id="moussa">
      <md:firstname>Dima</md:firstname>
      
      <md:surname>Moussa</md:surname>
      <md:email>dmoussa@uiuc.edu</md:email>
    </md:author>
      <md:author id="dsachs">
      <md:firstname>Daniel</md:firstname>
      <md:othername>Grobe</md:othername>
      <md:surname>Sachs</md:surname>
      <md:email>sachs@uiuc.edu</md:email>
    </md:author>
      <md:author id="bwade">
      <md:firstname>Brian</md:firstname>
      
      <md:surname>Wade</md:surname>
      <md:email>bwade@uiuc.edu</md:email>
    </md:author>
      <md:author id="jpfrantz">
      <md:firstname>Patrick</md:firstname>
      
      <md:surname>Frantz</md:surname>
      <md:email>jpfrantz@rice.edu</md:email>
    </md:author>
      <md:author id="Kriengchaipruck">
      <md:firstname>Kamolchanok</md:firstname>
      
      <md:surname>Kriengchaipruck</md:surname>
      <md:email>Kamolchanokkrieng@hotmail.com</md:email>
    </md:author>
  </md:authorlist>

  <md:maintainerlist>
    <md:maintainer id="jpfrantz">
      <md:firstname>Patrick</md:firstname>
      
      <md:surname>Frantz</md:surname>
      <md:email>jpfrantz@rice.edu</md:email>
    </md:maintainer>
    <md:maintainer id="Kriengchaipruck">
      <md:firstname>Kamolchanok</md:firstname>
      
      <md:surname>Kriengchaipruck</md:surname>
      <md:email>Kamolchanokkrieng@hotmail.com</md:email>
    </md:maintainer>
  </md:maintainerlist>
  
  <md:keywordlist>
    <md:keyword>multirate sampling</md:keyword>
    <md:keyword>multirate system</md:keyword>
    <md:keyword>decimation</md:keyword>
    <md:keyword>interpolation</md:keyword>
    <md:keyword>banz</md:keyword>
    <md:keyword>serial port</md:keyword>
    <md:keyword>sample-rate compressor</md:keyword>
    <md:keyword>sample-rate expander</md:keyword>
    <md:keyword>up-sample</md:keyword>
    <md:keyword>down-sample</md:keyword>
    <md:keyword>DSP</md:keyword>
  </md:keywordlist>

  <md:abstract>You will implement a multirate system that includes three fininte impulse response filters.  The sample-rate compression and expansion factors can be controlled in real time using a MATLAB graphical user interface.  </md:abstract>
</metadata>






  <content>
    <section id="sec3">
      <name>Implementation</name>
      <para id="p10">
	ก่อนที่จะเริ่ม  implementing ระบบทั้งหมดดังที่แสงอยู่ใน <cnxn document="m10024" target="fig1">Multirate Processing:
	Introduction</cnxn> ขอให้คุณทำการออกแบบระบบที่มีชุดของ
	filters FIR 1 และ FIR 2 ที่ไม่มี sample-rate compressor หรือ expander ก่อน.
	จากนั้นให้ทำการ  verify ว่าค่าที่ได้จาก  two-filter system นั้นถูกต้องหรือไม่
	 เมื่อเรียบร้อยแล้ว ก้อให้เริ่มทำการ mplement ระบบ multirate ทั้งหมด
	แล้วทำการ  verify ผลลัพธ์  ในตอนแรกให้ใช้  fixed compression และ expansion
	factors ของ
	<m:math>
	  <m:apply>
	    <m:eq/>
	    <m:ci>D</m:ci>
	    <m:ci>U</m:ci>
	    <m:cn>4</m:cn>
	  </m:apply>
	</m:math>.  ต่อไป คุณจะสามารถควบคุม  factor ตัวนี้โดยช้ MATLAB
	interface; อย่าลืมเงื่อนไขข้อนี้ในขณะเขียน code ด้วย
      </para>

      <section id="sec3a">
	<name>Compressed-rate processing</name>
	<para id="p12">
	  ให้ทำการ implement counter ใน code เพื่อที่จะทำการ  
	processing ที่ระดับ sample rate ที่ต่ำกว่าได้
	 counter จะเป็นตัวกำหนดว่า ompressed-rate processing
	จะเกิดขึ้นเมื่อไหร่ และยังสามารถใช้เป็นตัวกำหนดว่าจะเพิ่ม
	 ศูนย์ ไปใน FIR 3 เพื่อ implement sample-rate expander อีกด้วย
	</para>

	<para id="p13">
	  คำสั่งบางอย่างที่อาจมีประโยชน์ ช่วยในการ implement
	  โครงสร้างแบบ multirate structure คือ <code>addm</code> (add to
	  memory) และ  <code>bc</code> (branch conditional)
	 คุณอาจจะลองใช้  <code>banz</code>
	  (branch on auxiliary register not zero) และ <code>b</code>
         	 (branch)ได้เช่นกัน
	</para>

      </section>

      <section id="sec3b">
	<name>Real-time rate change and MATLAB interface</name>
	<para id="p16">
	  Graphical user interface (GUI) อย่างง่ายมีอยู่ที่  (as
	  <link src="mrategui.m">mrategui.m</link>, ซึ่งต้องมี
	  <link src="ser_snd.m">ser_snd.m</link>) จะทำหน้าที่ส่งตัวเลข
	ตั้งแต่  1 ถึง 10 ไปยัง DSP ผ่าน serial port.  ซึ่งสามรถใช้วิธีนี้ในการ เปลี่ยน
	ค่า compression และ expansion factor แบบ real time ได้
	</para>
	<para id="p18">
	  Run GUI โดยพิมพ์คำว่า<code>mrategui</code> ตรง MATLAB
	  prompt.  จากนั้นควรจะมี แถบเลื่อนปรากฏขึ้นมาอัติโนมัติ เพื่อไว้สำหรับปรับค่า
	 compression และ expansion factor ที่จะส่งไป DSP
	</para>

	<para id="p17">
	  Assembly code ที่คุณได้รับไปนั้นจะเก็บค่าสุดท้ายที่  DSP 
	ได้รับจากคอมพิวเตอร์ไว้ในหน่วยความจำตำแหน่ง ที่ระบุไว้ว่า
	   <code>hold</code>.  ถ้าหากคุณไม่ได้ทำการเปลี่ยน serial port
	สำหรับ  code นั้น, คุณก็จะสามารถหาค่าสุดท้ายของ compression และ
	 expansion factor ที่เกิดจาก  GUI ได้ที่หน่วยความจำตำแหน่งนี้. 
	 คุณต้องทำการแก้ไข  code เพื่อให้ทุกครั้งที่ได้รับค่าใหม่จาก
	  serial port,  compression และ expansion factor ถูกเปลี่ยนด้วย
	  ถ้าได้รับค่า  "1" ทั้งระบบควรจะทำงานที่ full rate; แต่ถ้าเป็น "10" ระบบ
	  ควรจะต้องเลือก  sample 9 ตัว จากแต่ละ sample ที่ถูกประมวลผลที่ lower rate ทิ้งไป
	</para>
	<para id="p14">
	  ให้สังเกตุว่า macro <code>READSER</code> และ <code>WRITSER</code>
	  ซึ่งใช้ในการอ่ารและส่งค่าไปยัง  serial port, ทำการ overwrite <code>AR0</code>,
	  <code>AR1</code>, <code>AR2</code>, และ register<code>AR3</code>
	  เช่นกัน <code>BK</code> และ  condition flag
	  <code>TC</code>.  เพราะฉะนั้นให้ระวังว่า   register เหล่านี้ไม่ได้ถูกใช้โดยส่วนอื่นใน code, 
	หรือคุณควรจะต้องทำการ  save และ restore ค่าในหน่วยความจำก่อนท่จะเรียกใช้ macro
	  <code>READSER</code> และ <code>WRITSER</code>  ซึ่งสามารถทำได้โดยใช้คำสั่ง
	 <code>mvdm</code> และ  <code>mvmd</code> โดยที่  macro เหล่านี้จะทำการ set up
	  ค่า <code>AR1</code> และ <code>AR3</code>  ทุกครั้งที่ถูกเรียกใช้ จึงไม่จำเป็นต้องเปลี่ยน 
	 register ก่อนที่จะเรียกใช้ macro
	</para>

	<para id="p15">
	  ข้อมูลเพิ่มเติมเกี่ยวกับ macro <code>READSER</code> และ
	  <code>WRITSER</code> หาได้ที่ <cnxn document="m10821">Core File: Serial Port Communication
	  Between MATLAB and TI TMS320C54x</cnxn>.
	</para>

      </section>
    </section>
  </content>
</document>
