R8C/15、rmpa_w()関数で、firフィルター
0.おもしろ発見を、追加
コンペア1のレジスタ TM1=256 に、採っていましたが、この値を操作すると、
上図のように、80dBにも、及ばんと言う、フィルターが、できました。(これは、もう、8ビットでは、ないでしょう)
つまり、TM1=253に採ったのです。(これ以下でも、同じような特性に、なります。)
本文の、第三節、 3.係数が60の、バンドパスfirフィルター の実験結果と比べますと、わかりやすいです。
firフィルターの、係数の数60も、まったく同じ。
ただ、TM1=256か、TM1=253か、それだけの違いです。 プログラム4
この違いは、めちゃ、大きいで....
TM1=256 TM1=253 or less
なんで、そうなるの?
解らん... 聞かんといて...
では、実験結果の、下の櫛状の成分は、何?
これは、トラジェネの出力をOFFにした時の、マイコンからの出力そのものです。
これ、何とか、取れんかな....
--------------------------------------------------------------------------------------------------------------
1.PWMの、仕組みは?
タイマーZ、又は、タイマーCのコンペアマッチを使えば、PWMができる事が解りました。
しかし、仕組みが、よう解らんので、
もうちょっと、調べて見ました。
以降の結果は、全て、ローパスフィルターを通さないで、観察したものです。
(ゼロ時ホールド効果だけが、フィルターの右肩下がりに、影響します。...ローパスフィルターを通さないのですから..)
タイマーZを使って、プログラム1
(tzsc+1)+(tzpr+1)=256 の関係で、tzscと、tzprの値を変えて観察しました。
基本となる周波数と、その整数倍の波形が観察されます。
そうしますと
これは、「フーリエ級数における、フーリエ係数の大きさの変化」
を、見たものだと、言うことが解りました、フムフム...
パルスの幅を変えることは、
基本周波数(周期)一定で、その整数倍の関係にある、周波数の、フーリエ係数の大きさの変化を、もたらすようです....
2.係数が30のfirフィルター
プログラム2 (積和のrmpa)関数は、long型のrmpa_w()を採っています、すぐ、飽和するから...)
マクロでみると、こう、なっています。
78.41KHzは、PWMの周波数です。
(ローパスフィルターを通さないから、大きな振幅になっています。
この周波数は、firの係数の数で、多少違ってきます。)
firの係数の数は30なのですが、
firフィルターのサンプリング周波数は、33KHzも、あります。(H8 3664Fでは、アセンブリで、10KHz位に、なるのに...)
8ビットの限界である、50dBを、きっちり捕らえていますね...(実は、Q14に、採っています。)
これが、Q7ですと、
もうちょっと、特性が、悪くなります。
それから、
メイン関数の所で、操作するのと、割り込み関数の所で、以下の操作をするのと、どちらがよいか、調べました。
while(adst==1);
data[59-i] = data[29-i] = ad;
total=rmpa_w(0, 30, fir, data+29-i);
if (++i==30)i=0;
total=total>>7;
tm0=(char)total;
adst=1;
普通は。メイン関数の所で、操作するのが、速いと、思われますが、逆でした...
メイン関数の所で、操作するほうが、そうでないものより、サンプリング周波数は、下がりました。(約4.4KHzの差)
以外や....
3.係数が60の、バンドパスfirフィルター
けっこう、いけてますね....
ローパスフィルターとは、逆に、Q10,14では、正常な動作を、しませんでした。(フィルターに、ならない)
Q7で、正常なBPFに、なりました....???
Tracking Generatorの、入力の大きさによっては、ちゃんとした、BPFに、なりません、要注意!
(リファレンスレベルは、変えていません。)
TG LEVEL -20dBと、-30dBでは、特性が、大きく、違ってきますわ....
入力の大きさの、管理が必要な、ようですね....
H.17.5.23