前回の「・・・その3」でプログラム本体の話は終っています。
でも tap数を多くするとフィルタ特性は豹変します、と書いたので豹変させてみましょう。
でも tap数を多くするとフィルタ特性は豹変します、と書いたので豹変させてみましょう。
現用で使っている SSBジェネレータの BPF部分が此れと同じプログラムなので、係数を含めて流用します。
仕様は・・・381tap/100~2900Hz BPFです。
仕様は・・・381tap/100~2900Hz BPFです。
当然 381tapですから、其れに見合った Xリングメモリにしなくてはいけません。
その設定用プログラムを関数形にして・・・
その設定用プログラムを関数形にして・・・
XYZ(){
asm("mov #0x0810,W0");
asm("mov W0,XMODSRT");
asm("mov #0x0b09,W0");
asm("mov W0,XMODEND");
asm("mov #0x8008,W0");
asm("mov W0,MODCON");
asm("mov #0x0810,W8");
}
asm("mov #0x0810,W0");
asm("mov W0,XMODSRT");
asm("mov #0x0b09,W0");
asm("mov W0,XMODEND");
asm("mov #0x8008,W0");
asm("mov W0,MODCON");
asm("mov #0x0810,W8");
}
そして係数データも 381個にしますが、此処に全部は書けないので中を省略します。
DAT(){
asm("mov #0x1600,W1");
asm("**********");・・・1個目
asm("**********");・・・2個目
**********
**********
**********
asm("**********");・・・380個目
asm("**********");・・・381個目
}
asm("mov #0x1600,W1");
asm("**********");・・・1個目
asm("**********");・・・2個目
**********
**********
**********
asm("**********");・・・380個目
asm("**********");・・・381個目
}
此の**********部分は、各自の好みにより計算した数値を入れて下さい。
此れも忘れずに↓
asm("do #379,loop");・・・前回のプログラムの #9を #379にする
asm("do #379,loop");・・・前回のプログラムの #9を #379にする
以上の設定で動かした結果を下に・・・
横軸は [kHz] 縦軸は [db]で・・・381tap/BPFの実力は凄いですね。
1年ほど使っていますが問題ない様です。
1年ほど使っていますが問題ない様です。
さて私を含めて初心者と云う事で、扱いの容易い Xメモリだけを使ってプログラムを組んで来ました。
でも徐々に仕組みが解ってくると Yメモリも使って見たくなります。
実際に macの様な DSP命令は X/Y両方使うことが前提だと思います。
でも徐々に仕組みが解ってくると Yメモリも使って見たくなります。
実際に macの様な DSP命令は X/Y両方使うことが前提だと思います。
因みに Yも使うと 2000tap/20kHz近く入ります(実証済み?)
先は長いですがボケ防止にはピッタリの題材を与えてくれた OMに感謝です。
先は長いですがボケ防止にはピッタリの題材を与えてくれた OMに感謝です。
今回をもって FIRフィルタについての屁理屈は終ります。
長い間お付き合い頂き有難うございました。
by JA1QVM
長い間お付き合い頂き有難うございました。
by JA1QVM
P.S FIRフィルタのフロクとして登場する筈だった「ヒルベルト変換」の理論が薄ら覚えで、開発時は解ってプログラムを作りましたが今は自信が有りません。 間違いなくボケは進んでいるようです!