<?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:m="http://www.w3.org/1998/Math/MathML" xmlns:md="http://cnx.rice.edu/mdml/0.4" xmlns:bib="http://bibtexml.sf.net/" id="m10017">
    
    <name>DSP Development Environment: Introductory Exercise for TI TMS320C54x (Japanese - 日本語)</name>
    <metadata>
  <md:version>1.5</md:version>
  <md:created>2004/03/24 13:10:37 US/Central</md:created>
  <md:revised>2005/08/22 18:12:17 GMT-5</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="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="jpfrantz">
      <md:firstname>Patrick</md:firstname>
      
      <md:surname>Frantz</md:surname>
      <md:email>jpfrantz@rice.edu</md:email>
    </md:author>
      <md:author id="emi">
      <md:firstname>Emiko</md:firstname>
      
      <md:surname>Yamai</md:surname>
      <md:email>eyamai@hotmail.com</md:email>
    </md:author>
      <md:author id="takaryo">
      <md:firstname>Hironori</md:firstname>
      
      <md:surname>Takaryo</md:surname>
      <md:email>s043105@ishikawa-nct.ac.jp</md:email>
    </md:author>
      <md:author id="yyama">
      <md:firstname>Yoji</md:firstname>
      
      <md:surname>Yamada</md:surname>
      <md:email>yyama@ishikawa-nct.ac.jp</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="emi">
      <md:firstname>Emiko</md:firstname>
      
      <md:surname>Yamai</md:surname>
      <md:email>eyamai@hotmail.com</md:email>
    </md:maintainer>
    <md:maintainer id="takaryo">
      <md:firstname>Hironori</md:firstname>
      
      <md:surname>Takaryo</md:surname>
      <md:email>s043105@ishikawa-nct.ac.jp</md:email>
    </md:maintainer>
    <md:maintainer id="yyama">
      <md:firstname>Yoji</md:firstname>
      
      <md:surname>Yamada</md:surname>
      <md:email>yyama@ishikawa-nct.ac.jp</md:email>
    </md:maintainer>
  </md:maintainerlist>
  
  <md:keywordlist>
    <md:keyword>anti-aliasing filter</md:keyword>
    <md:keyword>anti-imaging filter</md:keyword>
    <md:keyword>Code Composer Studio</md:keyword>
    <md:keyword>DSP</md:keyword>
    <md:keyword>FIR filter</md:keyword>
    <md:keyword>function generator</md:keyword>
    <md:keyword>MATLAB</md:keyword>
    <md:keyword>oscilliscope</md:keyword>
    <md:keyword>test vector</md:keyword>
    <md:keyword>TMS320C54x</md:keyword>
  </md:keywordlist>

  <md:abstract>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.</md:abstract>
</metadata>


    <content>

      <section id="sec_sum">
      <name>要約:</name>
      <para id="par_sum">　この実験では、コースで使用するハードウェアおよびソフトウェアを紹介します。この演習を終了すれば、デバッグ環境 Code Composer Studio を備えたシンプルなリアルタイムDSPシステムの操作に習熟することができるはずです。Code Composer は、学期を通じてあなたが使用するソフトウエアです。まず最初に実験設備に触れ、8タップの有限インパルス応答(FIR)フィルタを実時間DSPシステムに実装し、そのテストを行います（あらかじめコードが準備されています）。システムが動作可能になったところで、引き続きソフトウエアデバッグ/開発環境の調査を行います。このソフトウエア環境は、プログラムのロード、変更、コードのテスト、デバッグなどを実行するためのものです。最後に、MATLABでフィルタを作成し、DSP出力を検証するためのテストベクトルを作成します。</para>
      </section>

      <section id="intro">
	<name>イントロダクション</name>
	<para id="introp1">　この実験では、DSPシステムを動作させる場合に必要となるハードウェアおよびソフトウェアを紹介します。この演習を終了すれば、デバッグ環境を備えたシンプルなリアルタイムDSPシステムの操作に習熟することができるはずです。このDSPシステムは、学期を通じてあなたが使用するものです。まず最初に実験設備に触れ、8タップの有限インパルス応答(FIR)フィルタを実時間DSPシステムに実装し、そのテストを行います（あらかじめコードが準備されています）。システムが動作可能になったところで、引き続きソフトウエアデバッグ/開発環境の調査を行います。このソフトウエア環境は、プログラムのロード、変更、コードのテスト、デバッグなどを実行するためのものです。最後に、MATLABにより親しむためのいくつかの課題が与えられています。
	</para>
      </section>
      
      <section id="sec1">
	<name>実験設備</name>
	<para id="p1">　この実験では、あなたがテキサス・インスツルメンツ社製TMS320C549デジタル信号処理チップを実装したスペクトラム・ディジタル社製TMS320LC54x評価ボードを利用できることを仮定しています。DSP評価モ ジュールはWindows PCに接続し、デバッガおよび開発環境であるCode Composer Studioを使用して制御します。クリスタルセミコンダクター社製CS4226コーデックを使用したスペクトラム・ディジタル社製のサラウンドサウンドモジュールが、各DSP評価ボードの上にマウントされています。このボードは、44.1kHzのCDサンプルレートで2つのアナログ入力チャンネルおよび6つのアナログ出力チャンネルを提供します。DSPボードは、PC上のターミナルエミュレータまたはユーザが記述したコードによりシリアルポートを通じて通信することができます。 
	</para>
	
        <para id="p2">　実験装置のセットとして、DSPボードおよびPCに加えてテスト信号を発生するファンクションジェネレータおよび処理後の信号を表示するオシロスコープも準備してください。</para>
	
	<section id="sec1a">
	  <name>ステップ１:ケーブル接続</name>
	  <para id="p3">　BNCケーブルにより、ファンクションジェネレーターの出力とDSP評価ボード入力チャネル1とを接続してください。また、ボードの出力チャネル1と2をそれぞれオシロスコープのチャネル1と2に接続してください。<cnxn target="fig1"/>にこれらの接続図を示します。
	  </para>

	  <figure id="fig1">
	    <name>ハードウェア・セット・アップ例</name>
	    <media type="image/png" src="setup.png"/>
	  </figure>

	  <para id="p4">　この構成では、DSPボードへの入力信号は１つだけであり、出力信号は2つあるということに注意してください。DSPボードのチャネル1の出力はフィルタリングされた入力信号です。一方、チャネル2の出力はフィルタリングされていない入力信号です。ですから、オシロスコープ上で入力信号とフィルタ処理後の信号とを同時に観測することが可能です。準備ができたら、ファンクションジェネレーターおよびオシロスコープの電源を入れて下さい。
	  </para>
	</section>

	<section id="sec1b">
	  <name>ステップ２:ログイン</name>
	  <para id="p5">　指定されたネットワークIDおよびパスワードにより、実験セットのPCにログインして下さい。
	  </para>
	</section>
      </section>
      
      <section id="sec2">
	<name>開発環境</name>
	<para id="p8">　評価ボードは、PC上で動作するCode Composer Studioというアプリケーションを用いることにより、JTAGインターフェース(XDS510PP)を通じてPCから制御されます。この開発環境は、ユーザがPCでビルドしたコードをDSPボードにロードし、実行・デバッグすることことを可能にします。以下のステップ（<cnxn target="sec2a">ステップ３、４、５</cnxn>）に添って与えられたFIRフィルタのコードを実行し、デバッグ環境とリアルタイムシステムを自学自習して下さい。その後、（<cnxn target="sec2d">ステップ６、７</cnxn>）に従いMATLAB演習を行い、フィルタの周波数応答を検証して下さい。
	</para>

	<section id="sec2a">
	  <name>ステップ３: フィルタ処理コードのアセンブル</name>
	  <para id="p9">　提供されたFIRフィルタのコードを実行・テストする前に、ソース・ファイル群を適切なディレクトリに格納してアセンブルする必要があります。最初にコマンドウインドウを起動して、ファイルを保存するために新しいディレクトリを作成し、そして
<link src="filter.asm">filter.asm</link>、 
<link src="coef1.asm">coef1.asm</link>、 
<link src="coef2.asm">coef2.asm</link>、 
<link src="core.asm">core.asm</link>、 
<link src="vectcore.asm">vectcore.asm</link>
というファイルをそのディレクトリへコピーして下さい。
	  </para>

	  <para id="p10">　次に、<code>coef1.asm</code>というファイルを<code>coef.asm</code>というファイルにコピーし、コマンドウインドウで<code>asm filter</code>とタイプして、フィルタ・コードをアセンブリして下さい。 このアセンブリ処理では、まずFIRフィルタ係数(<code>coef.asm</code>)をアセンブリファイル<code>filter.asm</code>にインクルードし、それをコンパイルすることにより実行可能なバイナリファイル<code>filter.out</code>を生成します。          </para>
	</section>
	
	<section id="sec2b">
	  <name>ステップ４: フィルタ実行結果の確認</name>
	  <para id="p11">　フィルタ・コードがアセンブルされたら、デバッグ環境を起動するためにCode Composerアイコンをダブルクリックして下さい。DSPボードに実行可能バイナリコードをロードする前に、DSPボードをリセットし、<term>processor mode status register(PMST)</term>を初期化しなければなりません。ボードをリセットするために、Code Composer の<code>Debug</code>メニューから<code>Reset</code>オプションを選択して下さい。
	  </para>

	  <para id="p12">　ボードをリセットしたら、<code>View</code>メニューで<code>CPU Register</code>オプションを選択し、さらに<code>CPU Register</code>を選択して下さい。これにより、Code Composer 画面の下部にDSPのレジスタの値を表示するサブウィンドウが開きます。ここで、<code>PMST</code>レジスタの値が<code>FFE0</code>であることを確認して下さい。この値であれば、DSPボードは正常に動作しています。<code>PMST</code>レジスタの値が<code>FFE0</code>でない場合には、<code>PMST</code>レジスタの値をダブルクリックして<code>Edit Register</code>ウィンドウを開き、<code>PMST</code>レジスタの値を<code>FFE0</code>にして下さい。</para>

	  <para id="p13">　次に<code>File</code>メニューから<code>Load Program</code>を選択して、アセンブルされたフィルタリングプログラムをDSPボードにロードして下さい。最後に、DSPを再びリセットして、<code>Debug</code>メニューから<code>Run</code>を選択し、プログラムを実行してください。 </para>

	  <para id="p14">　実行中のプログラムでは、入力チャネル1から入力を受け取り、出力チャンネル1にフィルタリングした信号を、出力チャネル2には入力信号をそれぞれ出力します。アナログ入力をデジタル信号に変換し、そしてアナログ信号に戻す際に生ずる歪のために、出力チャネル2から出力される「未処理の入力信号」は、入力チャネル1に入力された実際の入力信号と異なるかもしれないことに注意して下さい。6チャネル入出力ボード上のA/DおよびD/A変換器は、44.1kHzのサンプルレートで動作し、アンチエイリアシングフィルタとアンチイメージフィルタを内蔵しています。理想的には、これらのフィルタは22.05kHz以上の周波数成分を除去します。また、6チャネル入出力ボード上のA/D・D/A変換器はAC結合されており、直流信号を通すことができません。以上より、入力チャネル1の信号と出力チャネル2の信号にはどのような違いが観測されると予想しますか?
	  </para>

	  <para id="p15">　ファンクションジェネレーターの出力信号を、振幅1.0Vピーク・トゥ・ピークの正弦波にして下さい。適切な周波数範囲で入力信号を掃引することにより、フィルタの周波数応答を観察して下さい。サンプリング周波数44.1kHzのDSPシステムに対する適切な周波数範囲はどのようであるべきでしょうか？
	  </para>
	  
	  <para id="p17">　観測した周波数応答に基づいて、フィルタ特性の種類(例：ローパス、ハイパス、バンドパス)および-6dB(振幅が半分になる)カットオフ周波数を明らかにして下さい。なお、オシロスコープのチャンネル1の信号の大きさがゼロになる可能性がありますので、トリガーソースをチャネル2にしたほうが適切です。</para>
	</section>

	<section id="sec2c">
	  <name>ステップ５：新しいフィルタでの再アセンブル及び再実行</name>
	  <para id="p18">　同様の手順を繰り返すことにとより、異なるフィルタ係数でDSPに実装したディジタルフィルタのタイプを特定することができます。先ほどとは違うフィルタ係数が<code>coef2.asm</code>に格納されています。 <code>coef2.asm</code>のコピーを作成し、そのファイルを改めて<code>coef.asm</code>と呼ぶことにします。  </para>

	  <para id="p19">　<cnxn target="sec2b">ステップ４</cnxn>で説明したように、<code>DOS</code>プロンプトで<code>asm</code> 命令を実行し、新しいフィルタ係数でのコードのアセンブルとテスト実行を繰り返すことが出来ます。<cnxn target="sec2b">ステップ４</cnxn>と同様に、あなたが実行しているフィルタ特性の種類を特定するとともに、フィルタの-6dBのポイントの周波数を測定して下さい。フィルタの特性により、-6dB周波数が複数存在する場合があることにも注意して下さい。</para>

	  
	</section>
	
	<section id="sec2d">
	  <name>ステップ６： MATLAB中のフィルタ応答確認</name>
	  <para id="p20b">　このステップでは、DSPからMATLABにフィルタ係数をコピーし、MATLABの<code>freqz</code>関数を使用して振幅特性を表示することによりフィルタの周波数応答を確認します。</para>
	  <para id="p21">　<code>coef.asm</code>ファイルに格納されているFIRフィルタ係数は、<code>0x1000</code>（１６進表示）の位置からスタートするDSP上のメモリに格納されています。また、先ほどアセンブル処理して実行した各フィルタは、8つの係数を有しています。符号付きの整数値としてフィルタ係数を表示するために、<code>View</code>メニューで<code>Memory</code>オプションを選択し、<code>Memory Window Options</code>画面を開きます。この画面の適切なフィールドで、スタートアドレスを<code>0x1000</code>にセットし、<code>16ビットSigned Int</code>フォーマットを指定します。「OK」をクリックすると、メモリ・ウィンドウが開き、指定されたアドレスのメモリの内容が表示されます。左側に表示される値は、メモリのアドレスを示しています。</para>

	  <para id="p22">　この例において、フィルタ係数は逆順のアドレスでメモリに記憶されます。すなわち最後の係数、	    <m:math>
	      <m:apply>
		<m:ci type="fn" class="discrete">h</m:ci>
		<m:cn>7</m:cn>
	      </m:apply>
	    </m:math>

は<code>0x1000</code>の位置に、また最初の係数

	    <m:math>
	      <m:apply>
		<m:ci type="fn" class="discrete">h</m:ci>
		<m:cn>0</m:cn>
	      </m:apply>
	    </m:math>
は<code>0x1007</code>に格納されます。
	  </para>

	  <para id="p23">　以上の準備により、メモリに格納された係数値を確認することができ、フィルタ係数値からMATLABの<code>freqz</code>関数によりフィルタの振幅特性を確認する準備ができました。freqz関数を使用するために、フィルタ係数値を格納したベクトルをMATLABのワークスペースに作成しなければなりません。例えば、係数-10、20、-10の3タップフィルタの応答は、下記のMATLABのコマンドにより表示することができます。
	    <list id="link2" type="bulleted">
	      <item><code>h = [-10, 20, -10];</code></item>
	      <item><code>plot(abs(freqz(h)))</code></item>
	    </list>
	  </para>

	  <para id="p24">　なお、この演習課題では、アドレス<code>0x1000</code>から<code>0x1007</code>までのメモリの内容を、係数ベクトル

	    <m:math>
	      <m:ci>h</m:ci>
	    </m:math>

に入力しなければならないということに注意してください。 
	  </para>

	  <para id="p25">MATLABで表示した振幅特性は、先ほどの実験結果に一致しますか。違いがあるとすれば、どのように説明できるでしょうか？</para>
	</section>
	
	<section id="sec2e">
	  <name>ステップ７： MATLAB中への新しいファイルの作成と確認</name>
	  <para id="p26">　MATLABスクリプトはコード開発の役に立ちます。例えば、これらのスクリプトのうちの1つでは、MATLABの中で作成されたフィルタ係数をアセンブリ処理の際にインクルード可能なファイルとして保存することができます。これは、長いフィルタを実現する際に非常に便利です。これらのスクリプトは、あなたのコンピューターに既にインストールされているかもしれません。もしないようなら、紹介されているリンクからそれらのファイルをダウンロードしてください。</para>

	  <para id="p27">　最初に、MATLABプロンプトで<code>h = gen_filt;</code>とタイプして、MATLABに「ランダム」8-タップ・フィルタを作成させてください。次に、<code>save_coef('coef.asm',flipud(h));</code>とタイプして、フィルタ係数ベクトルを保存してください。あなた自身のディレクトリの中でファイルを保存することを確認すること(これらの機能を実行するスクリプトは <link src="gen_filt.m">gen_filt.m</link>や<link src="save_coef.m">save_coef.m</link>として利用可能です)。
	  </para>

	  <para id="p28">上記の場合、MATLABスクリプトはベクトルの係数
<m:math>
  <m:ci>h</m:ci>
</m:math>
を、<code>coef.asm</code>と名付けられたファイルの中へ保存します。このスクリプトでは、係数ベクトルを「逆順」にしてから保存してることに注意してください。前述のように、メモリアドレス<code>0x1000</code>から<code>0x1007</code>番地まで
<m:math>
  <m:ci>h</m:ci>
</m:math>
の内容を逆順で格納するためです。
	  </para>

	  <para id="p29">
<cnxn target="sec2c">ステップ５</cnxn>で行ったように、新しいフィルタコードを再度アセンブリし再実行出来ます。
	  </para>


	  <para id="p30">
新しいフィルタをロードする時に、<code>0x1000</code>から<code>0x1007</code>までのメモリロケーションの内容が更新することに注目しなさい。
	  </para>

	</section>
	<section id="sec2f">
	  <name>ステップ８：メモリ中のフィルタ係数修正</name>
	  <para id="p31">　デバッガを使用してDSP上のメモリの内容を参照するだけでなく、すべてのメモリのアドレス（番地）について、そのアドレスをダブルクリックし、ポップアップ・ウィンドウの中で値を変更をするだけで、そのアドレスに格納された内容を変更することができます。
	  </para>

	  <para id="p32a"><code>0x1000</code>から<code>0x1007</code>までのメモりロケーションにおいて、フィルタ係数が次式で示される遅延器
	    <equation id="eqn1">
	      <m:math>
		<m:apply>
		  <m:eq/>
		  <m:apply>
		    <m:ci type="fn" class="discrete">h</m:ci>
		    <m:ci>n</m:ci>
		  </m:apply>
		  <m:apply>
		    <m:times/>
		    <m:cn>8192</m:cn>
		    <m:apply>
		      <m:ci>δ</m:ci>
		      <m:apply>
			<m:minus/>
			<m:ci>n</m:ci>
			<m:cn>4</m:cn>
		      </m:apply>
		    </m:apply>
		  </m:apply>
		</m:apply>
	      </m:math>
	    </equation>
を実現するようにメモリの内容を変更して下さい。DSPは、整数値8192を16ビット2の補数形式で表現可能な正の最大の整数値 32768 で割った分数値として表現することに注意して下さい。このフィルタの出力信号は、入力信号より4サンプル遅延し、大きさは
	    <m:math>
	      <m:cn type="rational">1<m:sep/>4</m:cn>
	    </m:math>.
になります。DSPにおける数値の内部表現の考え方についての情報は<cnxn document="m10808">TWO'S COMPLEMENT AND FRACTIONAL ARITHMETIC FOR 16-BIT PROCESSORS</cnxn>文書にあります。
	  </para>

	  <para id="p32b">　8つの係数値すべてに変更を加えた後で新しいフィルタプログラムを実行し、処理前の入力信号とフィルタ処理後の信号（遅延を受けた信号）の波形間の遅れをオシロスコープを用いて測定してください。
	  </para>

	  <para id="p33">信号の大きさを決定するスケーリング係数（先ほどの例では8192）や遅延のサンプル数を変化すると、出力信号はどのように変化するでしょうか？また、6サンプルの遅延は何秒の遅延時間に相当するでしょうか。オシロスコープのチャネル１とチャネル２の信号間の遅延時間を測定する最も効率的な方法は何でしょうか？
</para>
	</section>

	<section id="sec2g">
	  <name>ステップ９：テストベクトルシミュレーション</name>
	  <para id="p34">　最後の演習として、指定した入力信号をテストベクトルとして与えたときのDSPの出力信号を検討しましょう。同じフィルタに同じ入力信号を加えた時の出力をMATLABシミュレーションにより生成し、DSPの出力を比べます。DSPへのフィルタプログラムの実装が正しければ、2つの出力はほとんど同一になります。この比較を行うために、MATLABで信号波形を生成し、それをテストベクトルとして保存します。このテストベクトルをDSPに実装したフィルタに加え、その出力信号をMATLABシミュレーションとの比較のために、MATLABに取り込みます。
	  </para>

	  <para id="p36">　テストベクトルを利用する第一歩は適切な入力信号を生成することです。これを行う1つの方法は、MATLABの掃引正弦波発生関数を利用して、対象とする周波数帯域を掃引する正弦波信号を発生することです。以下のMATLAB関数<link src="save_test_vector.m">save_test_vector.m</link>により、DSPのコードにインクルードする掃引正弦波信号をファイルに保存できます。
	  </para>

	  <para id="p36b">　以下のMATLABコマンドにより、掃引正弦波を生成するとともにDSP用のテストベクトルとしてファイルに保存してください。
	  </para>

	  <code type="block">
	    <![CDATA[
	    >> 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
	    ]]>
	  </code>

	  <para id="p37">次に、MATLABの<code>conv</code>コマンドを使用して、MATLABシミュレーションにより出力信号を生成します。具体的には、掃引正弦波信号を入力信号として前述の<code>gen_filt</code>を使って生成したフィルタ係数
	    <m:math>
	      <m:ci>h</m:ci>
	    </m:math>
との畳み込み演算を行います。この結果として、長さ507(

	    <m:math>
	      <m:apply>
		<m:minus/>
		<m:apply>
		  <m:plus/>
		  <m:ci>n</m:ci>
		  <m:ci>m</m:ci>
		</m:apply>
		<m:cn>1</m:cn>
	      </m:apply>
	    </m:math>,

	    <m:math>
	      <m:ci>n</m:ci>
	    </m:math>

はフィルタの長さで、

	    <m:math>
	      <m:ci>m</m:ci>
	    </m:math>

は入力の長さ）)サンプルのベクトルが生成されます。このベクトルの最初の500サンプルの要素だけを保管して下さい。ちなみに、<code>help conv</code>とMATLABのコマンドウインドウでタイプすると、<code>conv</code>関数に関する情報を得ることができます。
	  </para>

	  <code type="block">
	    <![CDATA[
	    >> out=conv(h,t)                       % Filter t with FIR filter h
	    >> out=out(1:500)                      % Keep first 500 elements of out
	    ]]>
	  </code>

	  <para id="p38">次にもう一つの「テストベクトル」コアファイル<link src="vectcore.asm">vectcore.asm</link>を使用するように<code>filter.asm</code>ファイルを修正します。DSPの通常動作時のようにA/D 変換器から入力信号を取得したりD/A変換器に出力を渡すのではなく、このコアファイルはその入力をDSP上のメモリから取り出し、またその出力をDSPの上のメモリに保存します。テストベクトルは、DSP評価ボード上のメモリの１ブロックで、あなたのプログラム・コードあるいはデータを邪魔することがないアドレスに格納されます。
<note type="注:">テスト・ベクトルは<code>.etext</code>セクションに格納されます。メモリマップを含むDSPのメモリ・セクションの詳細については、<cnxn document="m10513">CORE FILE:SIX-CHANNEL BOARD FOR TI EVM320C54</cnxn>を参照して下さい。</note>

そのテスト・ベクトルを保管するメモリ・ブロックは4,000要素までのベクトルを保管するのに十分な大きさです。 テスト・ベクトルは、入力チャネルのためのデータ、および6つの出力チャンネルすべてからのデータを格納します。
	  </para>

	  <para id="p40">　テスト・ベクトルとともにプログラムを実行するために、<code>filter.asm</code>を修正する必要があるでしょう。このアセンブリソースは単純なテキストファイルですので、WordPad、Emacsおよび vi など、あなたのお好きなエディターを使用して編集することができます。そのファイルの第1行を次の2行に置き換えてください。

　すなわち；
	  </para>

	  <code type="block" id="codeblock1">
	    <![CDATA[
	    .copy 	"core.asm"
	    ]]>
	  </code>

	  <para id="para40b">
の代わりに、
	  </para>

	  <code type="block" id="codeblock2">
	    <![CDATA[
	    .copy 	"testvect.asm"
	    .copy	"vectcore.asm"
	    ]]>
	  </code>

          <para id="para40b-1">の２行を使用して下さい。
          </para>

	  <para id="para40c">予約語<code>.copy</code>の前の空白は、通常通り必要です。
	  </para>

	  <para id="para40d">これらの変更は、作成したテスト・ベクトルにコピーされ、もう一方のコアファイルが利用されます。あなたのコードを修正した後に、それをアセンブルし、そしてこれまで通りCode Composerを使ってファイルをDSPにロードして実行してください。数秒後に、(<code>デバッグ</code>メニューにある <code>停止</code>コマンド使用して）DSPを停止させ、DSPがそれ自体に分岐する分岐文で停止したことを確認します。逆アセンブラウィンドウで、次の行 <code>0000:611F F073 B 611fh</code> が強調表示されているはずです。
	  </para>

	  <para id="p41">
次に、テスト出力ファイルを保存して、MATLABにそれをロードして下さい。プログラムメモリの0x8000 の場所で始まる最初に保存された3,000メモリ要素(6チャンネルX 500サンプル)によって行うことができます。これをコードコンポーザスタジオ中で<code>File-&gt;Data-&gt;Save...</code>と選び、そしてファイル名を<code>output.dat</code>と入力し<code>Enter</code>を押します。次に、ポップアップしたダイアログ・ボックスのアドレス・フィールドに<code>0x8000</code> と、長さフィールドに<code>3000</code>と入力し、ページの隣にあるドロップダウンメニューからプログラムを選びます。結果を保存する場合、正しい長さ(6Xテスト・ベクトルの長さ)を使用することを常に確かめてください。
	  </para>

	  <para id="p42">
最後に、MATLABへ保存された結果を読み込むための<code>read_vector</code>機能(<link src="read_vector.m">read_vector.m</link> として 利用可能)を使用して下さい。これを次のMATLABコマンド:
	  </para>

	  <code type="block">
	    <![CDATA[
	    >> [ch1, ch2] = read_vector('output.dat');
	    ]]>
	  </code>

          <para id="p42a">
を使って実行しなさい。
          </para>

	  <para id="p43">
MATLABベクトル <code>ch1</code>は、生成したテスト信号のフィルタされたバージョンに一致します。MATLABベクトル <code>ch2</code>は、DSPシステムの入力から、その変わらない出力へ通された時に生成したテスト・ベクトルとほとんど同一です。

<note type="注:">DSPの16ビットメモリへテスト・ベクトルを保存する際に導入された量子化エラーのために、ベクトル<code>ch2</code>はテスト・ベクトルが生成されたMATLAB と同一になりません。</note>
	  </para>

	  <para id="p44">
MATLABにフィルタの出力をロードした後に、(上記の<code>out</code>として計算された)予期された出力と（上記から<code>ch1</code>の中の)フィルタの出力を比較して下さい。同じ軸上の2本の曲線を単にプロットすることによりグラフにより比較することが出来ます。例えば:
	  </para>

	  <code type="block">
	    <![CDATA[
	    >> 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 
	    ]]>
	  </code>

	  <para id="p47">
2つの出力間の違いが0に近いことも確認して下さい。これは、2つのベクトル間の違いをプロットすることにより確認出来ます:
	  </para>

	  <code type="block">
	    <![CDATA[
	    >> plot(out-ch1); % Plot error signal 
	    ]]>
	  </code>

	  <para id="p48">
2つのシーケンスが正確に同じではないことを観測するでしょう。これはMATLABがその算術のために64ビットの浮動小数点を使用している間、DSPが16ビットの精度に対する反応を計算するためです。
	  </para>

	  <para id="p49">
このように2つのベクトルを比較するために、2つのベクトルが、上記のMATLABコマンド<code>out=out(1:500)</code>を使用した後に確認される長さが、正確に一致しなければなりません。
	  </para>

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