Connexions

You are here: Home » Content » Multirate Filtering: Implementation on TI TMS320C54x (日本語 - Japanese)
Content Actions

Multirate Filtering: Implementation on TI TMS320C54x (日本語 - Japanese)

Module by: Douglas L. Jones, Swaroop Appadwedula, Matthew Berry, Mark Haun, Jake Janovetz, Michael Kramer, Dima Moussa, Daniel Sachs, Brian Wade, Patrick Frantz, Emiko Yamai, Hironori Takaryo, Yoji Yamada Based on: Multirate Filtering: Implementation on TI TMS320C54xDouglas L. Jones, Swaroop Appadwedula, Matthew Berry, Mark Haun, Jake Janovetz, Michael Kramer, Dima Moussa, Daniel Sachs, Brian Wade

Summary: 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.

インプリメンテーション

Multirate Processing: Introductionで示した全システムを実行する前に、サンプルレートコンプレッサーまたはエクスパンダー無しで、FIR1とFIR2と縦続したフィルターからなるシステムをデザインする事をお勧めします。その2つのフィルターシステムのレスポンスが正しい事を実証した後、完成したマルチレートシステムを実行し始め、全レスポンスを実証しなさい。初めに、 D=U=4 D U 4 という一定の圧縮因子と拡張因子を使いなさい。その後、この因子をMATLABインターフェースを使って制御します。コードを書く際、この事を覚えておいて下さい。

圧縮レート処理

低サンプルレートで処理を行うために、コード中にカウンター(計数回路)を実行してください。カウンターはいつ圧縮レート処理が生じるかを決定し、またいつサンプルレートエクスパンダーを実行するためにFIR3の中にゼロを挿入するかを決定するためにも使えます。
マルチレート構造を実行するために役に立つ命令のいくつかは、addm(add to memory:メモリーに加える)とbc(branch conditional:分岐条件)命令です。また、banz(branch on auxiliary register not zero:補助レジスタが0以外なら分岐)やb(branch:分岐)指示も役に立つでしょう。

実時間レート変化とMATLABインターフェース

簡単なグラフィカルユーザーインターフェース(GUI)は、シリアルポート経由でDSPに1から10の数を送る事が(ser_snd.mを要するmrategui.mとして)可能です。これは実時間に圧縮因子と拡張因子を変換するために使えます。
MATLABのプロンプトにmrateguiと打ちこみ、GUIを起動しなさい。図が自動的にスライダと共に開きます。 スライダを調節すると、DSPに送られた圧縮因子と拡張因子が変わります。
与えられたアセンブリコードは、DSPがholdと名づけられたメモリー中のコンピューターから受け取っている最後の数を保存します。そのため、あなたがその与えられたコードの連続部を変えない限り、この場所においては、GUIによってセットされた最後の圧縮因子と拡張因子を見つけられます。シリアルポートに新しい数が受信される度に、圧縮と拡張因子が変換されるためには、コードの修正が必要です。もし"1"がシリアルポートに受信されたら、その全システムは最大限のレートで稼動します。またもし"10"が受信されたら、そのシステムは低レートで処理された各サンプル間で9つのサンプルを捨てます。
シリアルポートからのデータ読み取りと、シリアルポートへのデータ送信に使用されるREADSERWRITSERマクロが、BKとコンディションフラッグTCと同程度に、AR0AR1AR2、そしてAR3レジスタを上書きする点に注意して下さい。そのため、これらのレジスタがあなたのコードに使われていないか、又はREADSERWRITSERマクロをコールする前に、メモリにそれらの値を保存または復活させているかを確認しなければなりません。これはmvdmmvmdの命令を使用して行うことができます。そのシリアルマクロはコールされる毎にAR1AR3をセットアップするので、そのマクロをコールする前にそれらのレジスタを変える必要はありません。
READSERWRITSERマクロに関する詳細は Core File: Serial Port Communication Between MATLAB and TI TMS320C54xにあります。

Comments, questions, feedback, criticisms?

Discussion forum

Send feedback