Based on: Multirate Filtering: Implementation on TI TMS320C54x by Douglas 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.
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.
Multirate Processing:
Introductionで示した全システムを実行する前に、サンプルレートコンプレッサーまたはエクスパンダー無しで、FIR1とFIR2と縦続したフィルターからなるシステムをデザインする事をお勧めします。その2つのフィルターシステムのレスポンスが正しい事を実証した後、完成したマルチレートシステムを実行し始め、全レスポンスを実証しなさい。初めに、
低サンプルレートで処理を行うために、コード中にカウンター(計数回路)を実行してください。カウンターはいつ圧縮レート処理が生じるかを決定し、またいつサンプルレートエクスパンダーを実行するためにFIR3の中にゼロを挿入するかを決定するためにも使えます。
マルチレート構造を実行するために役に立つ命令のいくつかは、addm(add to memory:メモリーに加える)とbc(branch conditional:分岐条件)命令です。また、banz(branch on auxiliary register not zero:補助レジスタが0以外なら分岐)やb(branch:分岐)指示も役に立つでしょう。
簡単なグラフィカルユーザーインターフェース(GUI)は、シリアルポート経由でDSPに1から10の数を送る事が(ser_snd.mを要するmrategui.mとして)可能です。これは実時間に圧縮因子と拡張因子を変換するために使えます。
MATLABのプロンプトにmrateguiと打ちこみ、GUIを起動しなさい。図が自動的にスライダと共に開きます。 スライダを調節すると、DSPに送られた圧縮因子と拡張因子が変わります。
与えられたアセンブリコードは、DSPがholdと名づけられたメモリー中のコンピューターから受け取っている最後の数を保存します。そのため、あなたがその与えられたコードの連続部を変えない限り、この場所においては、GUIによってセットされた最後の圧縮因子と拡張因子を見つけられます。シリアルポートに新しい数が受信される度に、圧縮と拡張因子が変換されるためには、コードの修正が必要です。もし"1"がシリアルポートに受信されたら、その全システムは最大限のレートで稼動します。またもし"10"が受信されたら、そのシステムは低レートで処理された各サンプル間で9つのサンプルを捨てます。
シリアルポートからのデータ読み取りと、シリアルポートへのデータ送信に使用されるREADSERとWRITSERマクロが、BKとコンディションフラッグTCと同程度に、AR0、AR1、AR2、そしてAR3レジスタを上書きする点に注意して下さい。そのため、これらのレジスタがあなたのコードに使われていないか、又はREADSERとWRITSERマクロをコールする前に、メモリにそれらの値を保存または復活させているかを確認しなければなりません。これはmvdmとmvmdの命令を使用して行うことができます。そのシリアルマクロはコールされる毎にAR1とAR3をセットアップするので、そのマクロをコールする前にそれらのレジスタを変える必要はありません。
READSERとWRITSERマクロに関する詳細は Core File: Serial Port Communication
Between MATLAB and TI TMS320C54xにあります。