忍者ブログ
ようこそ!JQ2RVNのブログです。 PICを使っていろいろな物を作ろうと画策中です。
[30] [29] [28] [27] [26] [25] [24] [23] [22] [21] [20]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ただいま、MPLAB C30で、フィルタ作りに格闘中です。

大まかな流れは以下のとおり

FIR用構造体を作成

FIR構造体の初期化

FIRの実行


上2つは、書籍やホームページを参照しておけばOKだと思う。

最後のFIRの実行は、そのまんまの名前のFIR()関数を使用する。
FIR( numSamp , &outSamp , &inSamp , &Filter )
という形式。

ここで、numSampはサンプリングされた値の個数。
多くの場合は1でよいと思う。


inSampがサンプリングされた値。
FIR()関数が呼び出されると、遅延配列の最古の値がinSampで書き換えられる。

もしタップ数が5つだったとしたら
5 4 3 2 1

4 3 2 1 inSamp
というように書き換えられる。

その上で、畳み込み計算がおこなわれて、結果がoutSampに出てくる。


遅延配列の書き換えは、dsPICの場合便利にできていて、
たとえば0から4の5つの番地に書き込もうとするとき、
dsPICに0と4を登録しておく。
そうすると、ポインタをインクリメントしていくと
通常だと、0 1 2 3 4 5 ・・・となるが、
dsPICだと、0 1 2 3 4 0 1 2・・・と自動的にポインタが戻ってくれる。

これを登録するのは、FIRStruct構造体に仕込まれていて
coeffsBase , coeffsEnd , delayBase , delayEnd
の4つの値になる。
(係数配列の先頭と終端、遅延配列の先頭と終端)

この機能があるおかげで、dsPICでの畳み込みは
REPEAT + MAC命令で、単純&高速にできる。
(レジスタはXMODSTAT , XMODEND , Y~~)

逆にいえば、これがなかったらPIC24と同じだなw
(ホントは40bitアキュムレータとか、ビット順序逆転とかもあるけど・・・)

PR

コメント


コメントフォーム
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字


トラックバック
この記事にトラックバックする:


忍者ブログ [PR]
カレンダー
11 2017/12 01
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
プロフィール
コールサイン:
JQ2RVN
性別:
男性
自己紹介:
PICの開発を勉強中です。
目標はPICTNCの高性能版を作ること。
まずは、本家を解析しています。
最新コメント
[04/23 Eolande]
[04/16 太田和巳(JF2UJG)]
[09/10 je7ifp]
[08/06 JQ2RVN]
[08/03 OVC]
最新トラックバック
バーコード
ブログ内検索
アクセス解析