« 2008年10月 | トップページ | 2008年12月 »

2008年11月の35件の記事

2008年11月30日

係数1/8の一次IIIRフィルタのステップ応答、インパルス応答

一次IIIRフィルタの簡単な実装の記事を続ける。以前の

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iir-ecd2.html

の記事から

一次遅れのIIRフィルタの計算式は

 y(nT) = x(nT) +  e^(-T/τ)*y{(n-1)T}  (式8)

となることがわかった。この式を変形すると

 y(nT) = x(nT) - {1-e^(-T/τ)}*y{(n-1)T} + y{(n-1)T}

    (式9)

となる。ブロック図で書くと

1stiir_const2

となる。今までの記事では、係数{1-e^(-T/τ)}を

   {1-e^(-T/τ)} = 1/16 

すなわち、右シフト演算4回として、実装した場合の各種波形グラフを見てきた。ディジタルフィルタの計算式は、

  y(nT) = x(nT) - 1/16*y{(n-1)T} + y{(n-1)T}

    (式11)

である。このとき、たとえばサンプリング周期T=1msとすると、時定数は約15msになる。

◆インパルス応答の時間波形(整数計算)

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iir-ad59.html

◆ステップ応答の時間波形(整数計算)

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iirt1ms15ms-820.html

◆正弦波入力応答の時間波形(整数計算)

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iirt1ms15ms-c85.html

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iirt1ms15ms2-ac.html

◆周波数応答(リニア周波数軸、整数計算)

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iir-58eb.html

◆周波数応答(ログ周波数軸、整数計算)

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iir-000f.html

今回は、時定数を変えてみよう。たとえばサンプリング周期T=1msのとき、時定数は約7msになるようにする。係数としては、1/16を1/8にする。右シフト3回で実装することを目論んでいる。

   {1-e^(-T/τ)} = 1/8

ディジタルフィルタの計算式は

  y(nT) = x(nT) - 1/8*y{(n-1)T} + y{(n-1)T}

    (式24)

となる。

正確な時定数τは

   e^(-T/τ) = 1-1/8 = -0.875

にて、サンプリング周期T=1msとすれば、時定数

  τ=7.488876[ms]

である。

さて、波形を示す。

■インパルス応答の時間波形(整数計算)

127のステップ入力の場合の応答である。時定数τ=7.488876[ms]のアナログローパスフィルタの応答と比較している。横軸は、サンプリングn。サンプリング周期T=1msとすれば、横軸は時間[ms]。

1_8_impluse_integer

ディジタルフィルタ出力y(nT)の場合は、ゼロに近づかない。7で飽和する。途中の1/8で7が桁落ちでゼロになってしまい、演算結果に反映されず、残ってしまう。

■ステップ応答の時間波形(整数計算)

ディジタルフィルタは127のステップ入力を入れると、最終値は127*8=1016になる。最終値がなぜ8倍されるかというのは、「最終値の定理」から決まる。最終値の定理については、

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iirt1ms15ms-820.html

の記事を参照。

グラフでは、1016のステップ入力のアナログ1次ローパスフィルタ出力と比較している。

1_8_step_integer

ほぼ同じになる。

エクセルデータはこちら

「motion_oyaji_IIR_1_8_time_step_081121.xls」をダウンロード

Link: 

「モーションおやじ」のプライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

2008年11月29日

簡単1次IIRフィルタに連続パルス入力入れた出力波形

超簡単な一次のIIRフィルタ

y(nT) = x(nT) - 1/16*y{(n-1)T} + y{(n-1)T}

    (式11)

に連続したパルスを入力してみる。計算の簡単化のために、係数1/16を使用している。サンプリング周期T=1msの場合、時定数τは約15msになる。設計の詳細については、前の記事

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iir-8a20.html

および、係数1/16の背景については、

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iir-ad59.html

を参照してほしい。

さて、整数演算のため、途中の1/16で桁落ちするので、パルスは127の大きさのパルスを入力する。横軸はサンプリングn、サンプリング周期T=1msの場合は時間[ms]になる。

■40ms周期でパルスを入力した場合の出力y(nT)

40ms毎に1msの127の値が入力されるので、平均値127*1ms/40msに、最終値16を掛けた値と比較している。

最終値については、記事

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iirt1ms15ms-820.html

の中ほどを参照してほしい。

1_16_conti_pluse_40ms_integer

■20ms周期でパルスを入力した場合の出力y(nT)

平均値127*1ms/20msに対して、最終値16を掛けた値と比較している。

1_16_conti_pluse_20ms_integer

■10ms周期でパルスを入力した場合の出力y(nT)

平均値127*1ms/10msに対して、最終値16を掛けた値と比較している。

1_16_conti_pluse_10ms_integer

■5ms周期でパルスを入力した場合の出力y(nT)

平均値127*1ms/5msに対して、最終値16を掛けた値と比較している。

1_16_conti_pluse_5ms_integer

出力y(nT)は、ローパスフィルタが効いて、連続パルス入力の平均値を得ていることがわかる。読者のみなさん、使えそうですか?

エクセルのデータはこちら

「motion_oyaji_IIR_1_16_time_conti_pulse_081121.xls」をダウンロード

Link: 

「モーションおやじ」のプライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

2008年11月28日

会社を辞めるチャンス(辞職の理由に事欠かない)

お客さんの受付で、入門票に記入して、バッジをもらって、そこを離れた。

そうしたら、次の人が

「中途採用の面接に来ました。」

と言っていた。

今は、資本家から見れば、中途採用のチャンスだねぇ!

労働者からみれば、起業のチャンスでもあるよ。

中途で入って、もう一社の人脈を作って(しばらくしのいで)、底が見えてから、創業する、という2段構えというアイディアもあるなぁ。

「モーションおやじ」も新卒で入った会社で、「コスト削減のため、技術者は本社に転勤してくれ」みたいなときに、辞職した。

上司を説得できる辞職の理由がすぐ見つかる昨今の状況は、天が与えてくれた自分の人生を見直す素晴らしい機会。

これからの人生、山あり、谷あり、ということがわかった。ならば、変化に対応できる生き方をしようじゃないか!

同じ人にあっているとその環境に頭脳が固定してしまう。刺激を回避するメンタリティになって、柔軟性が失われる。初めての人に強制的に会う環境「転職」も頭脳の活性化のために良いと思う。

会社の看板を使えない一人での他流試合(転職)は、自分の世の中におけるポジション、自分の強み、弱み、売りものがわかる。

給料が下がっても、目的のある転職はお勧めだ。知らないうちに給料天引きされて(お金を払って)、貴重な体験、人脈を作る、という考えもあり。

「あなたの売り物は何ですか?」と聞かれたら、

「部長(課長)をやっていたことです!」ということは、困るよね。

| | コメント (0) | トラックバック (0)

2008年11月27日

あれ何ですか?

Photo

営業に行ったら、機械装置の製作現場を見せてくれた。その向こうにシートをかぶった何か大きなものがある。

「あれ何ですか?」

と聞いたら、これだった。

「乗ってもいいよ」と言うので、運転席に座って、アクセルをふかしたら、すごかったっぁ。

| | コメント (0) | トラックバック (0)

2008年11月26日

久し振りに知り合いに会ったら

久し振りに知り合いに会ったら、いきなり

「ずいぶん後退しましたね!」

と言われてしまった。

最近、この種のコメント多いなぁ。

| | コメント (0) | トラックバック (0)

簡単一次IIRフィルタに±パルスを入力した応答波形

簡単一次IIRローパスフィルタに±パルスを入力した応答波形を調べてみよう。

モータ制御していて、位置制御でサーボロックをかけたとき、このような現象が起こる。

フィルタの計算式は

y(nT) = x(nT) - 1/16*y{(n-1)T} + y{(n-1)T}

    (式11)

この式の背景は、

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iir-8a20.html

および

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iir-ecd2.html

の記事を参照してください。

整数演算で1/16を行っているため、桁落ちが発生する。この影響を小さくするために、+127、-127のパルスを入力している。

サンプリング周期T=1msの場合、時定数τは約15msになる。

■40ms毎、+127、-127のパルスを入力した場合の出力(整数演算)

横軸はサンプリング。サンプリング周期T=1msの場合、時間[ms]になる。

1_16_conti_pluse_both_40ms_integer

■80ms毎、+127、-127のパルスを入力した場合の出力(整数演算)

1_16_conti_pluse_both_80ms_integer

飽和している値は15。1/16の整数計算をしているので、15が1/16でゼロになってしまい、残ってしまう。詳細の記事は、インパルス応答の記事

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iir-ad59.html

を参照してください。

エクセルのデータはこちら

「motion_oyaji_IIR_1_16_time_both_pulse_081121.xls」をダウンロード

Link: 

「モーションおやじ」のプライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

2008年11月25日

開ループ伝達関数

ブラシレスモータ用制御部の設計をしている。お客様とは長い付き合いで、今回の機種では、位置検出器の分解能を上げてほしいとの要望である。

モータは同じで、位置検出器の分解能が上がったので、開ループ伝達関数を同じに保つため、ゲインの配分を変更する必要がある。

しかも、速度ループの開ループ伝達関数、位置ループの開ループ伝達関数をともに前の機種と同じに保ち、かつ、制御器のゲインニューニング感覚も同じようにしたい。

半日くらい考えていた。

実装して(コーディングは、お任せしているが)デバッグを始めたところ、「動作がおかしい」と、お呼びがかかった。

位置検出器データの下位をマスキングして、以前の機種の制御構造に戻すと動作が良くなる。

位置ループを切って、速度指令を入れて、動作を評価する。

速度PI制御器のI項(積分項)をなくして、速度制御を行う。

速度ループを切って、速度指令を入力して、トルク指令を観測する。

再度、速度PI制御器のI(積分項)を入れて、トルク指令を観測する。

等々。

約1日、デバッグにかかった。

時間かけすぎだが、わかった。位置検出器データのビット数が増えていたので、オーバーフローしているところがあった。そのほかにも何点かバグがあって、わかりにくくしていた。

組込機器のネガティブフィードバック制御のデバッグは、中の状態が連続時間で観測できないので、時間がかかる。

仮説を立てて、検証を繰り返す。論理的思考、発想力が勝負。

| | コメント (0) | トラックバック (0)

簡単一次IIRフィルタの周波数特性のグラフ(アナログフィルタとの比較) 2

先の記事で一次IIRローパスフィルタとアナログフィルタの周波数特性を比較した。横軸の周波数はリニアであった。

今回は、周波数をlog軸にしてみる。アナログフィルタの周波数特性に慣れている人は、横軸がlogのほうがわかりやすいと思う。

■ゲイン特性(1Hzから1000Hz)

1_16_freq_log_amp_comp

■ゲイン特性[dB](1Hzから1000Hz)

1_16_freq_log_gain_comp

■位相特性[rad](1Hzから1000Hz)

1_16_freq_log_phase_rad_comp

■位相特性[deg](1Hzから1000Hz)

1_16_freq_log_phase_deg_comp

エクセルのデータはこちら

「motion_oyaji_freq_IIIR1st_linear_comp_081123.xls」をダウンロード

Link: 

「モーションおやじ」のプライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

2008年11月24日

簡単一次IIRフィルタの周波数特性のグラフ(アナログフィルタとの比較)

先の記事で、インパルス不変法で設計した一次IIRローパスフィルタの振幅特性や位相特性のグラフを紹介した。

ディジタルフィルタの計算式は、

y(nT) = x(nT) - 1/16*y{(n-1)T} + y{(n-1)T}

    (式11)

で、係数を1/16として、シフト演算を使えるようにしている。

サンプリング周期T=1msの場合、一次IIRフィルタの時定数は、15.4946[ms]となる。詳細は

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iir-ad59.html

を参照。

今日は、そのグラフを同じ時定数のアナログローパスフィルタと比較してみる。さて、一次ローパスフィルタの伝達関数は、時定数をτ[s]として

              1

  G(s) = ------ (式20)

           1+sτ

s=jωを代入して、ωの関数にする。

              1   

G(jω) = -------

           1+jωτ

                1
       = -------------- * e^{jφ(ω)}   (式21)
         √ {1+(wτ)^2}

ここで、位相は

     φ(ω) = - arctan(wτ)     (式22)

絶対値の部分をとって、ゲインは、

                      1

     g(ω) = -----------   (式23)

             √ {1+(wτ)^2}

時定数τは、前述のように

     τ = 15.4946E-3

同じ時定数のアナログローパスフィルタの位相特性(式22)、ゲイン特性(式23)が得られたので、先の記事

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iirt1ms15ms-7ef.html

で導出した一次IIRローパスフィルタの振幅特性や位相特性を比較してみる。

グラフは

・細かい部分がわかるように、0から200Hzのグラフ

・サンプリング周波数1000Hzまでがわかるように、0から1000Hzのグラフ

を示す。

■ゲイン特性(0から200Hz)

比較のため、ディジタルのゲイン特性を正規化して(直流でのゲインの値、16ですべてのゲイン値を割って)いる。

1_16_freq_linear_amp_comp_200_2

200Hzまでは、ほとんど差がない。

■ゲイン特性(0から1000Hz)

サンプリング周期T=1msとしているので、1000Hzはサンプリング周波数である。

1_16_freq_linear_amp_comp_1000_2

サンプリング周波数1000Hzの半分、500Hzからずれてくる。

■ゲイン特性[dB](0から200Hz)

次に縦軸をデシベル[dB]にしてみる。

1_16_freq_linear_gain_comp_200_2

■ゲイン特性[dB](0から1000Hz)

サンプリング周期T=1msとしているので、1000Hzはサンプリング周波数である。

1_16_freq_linear_gain_comp_1000_2

■位相特性[rad](0から200Hz)

次は、位相特性をみてみる。

1_16_freq_linear_phase_rad_comp_2_2

20Hzくらいまでおなじ。ディジタルはアナログより、位相が遅れない。

■位相特性[rad](0から1000Hz)

サンプリング周期T=1msとしているので、1000Hzはサンプリング周波数である。

1_16_freq_linear_phase_rad_comp_1_2

■位相特性[deg](0から200Hz)

次に縦軸を度[deg]にしてみる。

1_16_freq_linear_phase_deg_comp_2_3

■位相特性[deg](0から1000Hz)

サンプリング周期T=1msとしているので、1000Hzはサンプリング周波数である。

1_16_freq_linear_phase_deg_comp_1_2

エクセルのデータはこちら

「motion_oyaji_freq_IIIR1st_linear_comp_081123.xls」をダウンロード

Link: 

「モーションおやじ」のプライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

デルの革命

Photo お勧め度★★★★★

顧客の要望するものを顧客に直接売って、在庫は限りなくゼロにする。

顧客の声を直に聞く。

これを徹底する。シンプルな方針を貫く。

| | コメント (0) | トラックバック (0)

2008年11月23日

簡単一次IIRフィルタの周波数特性のグラフ

今日は、一次のIIRフィルタの周波数特性のグラフを示す。

ゲイン特性の計算式は、先の記事より

                                   1

  g(ω)  = -----------------------------

            √ { (1-AcosωT)^2 +(AsinωT)^2}

     (式18)

位相特性の計算式は、先の記事より

 φ(ω) =  - arctan ( AsinωT / 1-AcosωT)  [rad]

     (式19)

ここで、

  A = e^(-T/τ)         (式13)

Tはサンプリング周期、τは時定数。

以下のグラフでは、

 1-A = 1 - e^(-T/τ) = 1/16

としてあります。

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iir-ad59.html

の記事の

 1-e^(-T/τ) =1/16  (式10) 

を意味しています。

ここで、サンプリング周期T=1msとすれば、時定数τは約15msとなります。

■ゲイン特性

周波数が上がるとゲインが小さくなります。周波数が高い正弦波をこのフィルタに入れると、出力波形の振幅が小さくなります。ローパスフィルタを設計したのだから、当然ですね。実際の入力の正弦波と出力の正弦波については、先の記事

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iirt1ms15ms-c85.html

を見てください。

1_16_freq_linear_amp

■ゲイン特性 [dB]

デシベル[dB]に直しました。

1_16_freq_linear_gain

■位相特性 [rad]

1_16_freq_linear_phase_rad

周波数が上がると位相が次第に遅れます。しかし、さらに周波数が上がると位相遅れが小さくなります。おもしろいですね。

■位相特性 [deg]

度で計算しました。

1_16_freq_linear_phase_deg

エクセルのデータは、こちら

「motion_oyaji_freq_IIIR1st_linear_081123.xls」をダウンロード

今回、サンプリング周期T=1msとして、時定数τが約15msになっていますが、

サンプリング周期を長くして、T=10msとすれば、時定数τが約150msとなります。周波数特性のグラフは同じ形になりますが、横軸の周波数最大値は200Hzを20Hzとして考えてください。

逆にサンプリング周期を短くして、T=0.1msとすれば、時定数τが約1.5msとなります。周波数特性のグラフは同じ形になりますが、横軸の周波数最大値は200Hzを2000Hzとして考えてください。

今回のディジタルフィルタの計算式は、

y(nT) = x(nT) - 1/16*y{(n-1)T} + y{(n-1)T}

    (式11)

です。乗算器や浮動小数点演算を使用しないで、シフト演算だけで一次IIRフィルタを実現しました。これなら、安いマイコンやVHDL、verilogで実現できますよね。

これから、今回のサンプリング周期T=1ms、時定数τ約15ms以外についても考えていきます。

Link: 

「モーションおやじ」のプライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

2008年11月22日

簡単一次IIRフィルタの周波数特性の計算式

さて、今回は、インパルス不変法で設計した一次のIIRローパスフィルタの周波数特性計算式を導きます。

本のディジタルフィルタの計算式は、先の記事

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iir-ecd2.html

から

y(nT) = x(nT) - {1-e^(-T/τ)}*y{(n-1)T} + y{(n-1)T}

    (式9)

である。この式において、サンプリング周期T=1ms、時定数τを約15msとおいて、各種の入力波形に対して、出力波形を計算した。

インパルス入力に対する出力波形

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iir-ad59.html

ステップ入力に対する出力波形

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iirt1ms15ms-820.html

正弦波入力に対する出力波形

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iirt1ms15ms-c85.html

を計算してきた。

さて、(式9)の伝達関数は、先の記事

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iir-8a20.html

から

                1   

 G(z)=------------------  (式5)

         1-e^(-T/τ)*z^(-1)

この式において、z=e^(jωT)、あるいは 、z^(-1)=e^(-jωT)を代入すると、ωTに関わる式

                              1   

 G{e^(jωT)} = ------------------  (式10)

                   1-e^(-T/τ)*e^(-jωT)

が得られる。オイラーの公式

  e^(-jθ) = cosθ - j * sinθ      (式11)

より、

  e^(-jωT) = cos(ωT) - j * sin(ωT)

であるから、

                              1   

 G{e^(jωT)} = ------------------------- 

                1-A*{ cos(ωT) - j * sin(ωT) }

     (式12)

ここで、

  A = e^(-T/τ)         (式13)

と置いた。さらに、分母の実数部と虚数部(jの付いている項)を分けて

                              1   

 G{e^(jωT)} = ------------------------- 

                1-A*cos(ωT) + j *A*sin(ωT)

     (式14)

となる。分母の

    実数部 + j 虚数部

の形を

    絶対値*e^(j位相)

の形に直す。この形を

    Abs * e^(j *Angle)

と置けば

    Abs = √ { (実数部^2) + (虚数部^2) }

    Angle = arctan ( 虚数部 / 実数部 )  [rad]

で得られる。(式14)の分母は

    実数部 = 1-A*cos(ωT)

    虚数部 = A*sin(ωT)

なので

    Abs = √ { (1-AcosωT)^2 +(AsinωT)^2}

       (式15)

         Angle = arctan ( AsinωT / 1-AcosωT)  [rad]

       (式16)

となる。

     1               1

  --------------   =  --- * e^{j(-Angle)}

  Abs * e^(j *Angle)    Abs

なので、(式14)は、

                     1   

 G{e^(jωT)} = --- *  e^{j(-Angle)}

                 Abs

     (式17)

となる。周波数特性のゲイン特性(振幅特性)は、(式17)の絶対値の部分から

              1

  g(ω) = ----

            Abs

                                   1

        = -----------------------------

           √ { (1-AcosωT)^2 +(AsinωT)^2}

     (式18)

デシベル[dB]表示にしたいときは、

   20 * log 10 | g(ω) |    [dB]

を計算する。

次に、位相特性は、(式17)の位相の部分から

 φ(ω) = -Angle

     =  - arctan { AsinωT / (1-AcosωT) }  [rad]

     (式19)

度[deg]の表示にしたいときは

   φ(ω) / (2π) * 360   [deg]

を計算する。

ただし、

  A = e^(-T/τ)         (式13)

次の記事では、周波数特性(ゲイン特性、位相特性)を計算してみよう。

Link: 

「モーションおやじ」のプライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

2008年11月21日

簡単一次IIRフィルタの正弦波入力応答波形2

昨日の続きで、一次IIRローパスフィルタに正弦波を入力して、その入力と出力の比較波形をしめす。ディジタルフィルタの計算式は、

y(nT) = x(nT) - 1/16*y{(n-1)T} + y{(n-1)T}

    (式11)

横軸はサンプリングn、サンプリング周期T=1msなら、時間[ms]となる。サンプリング周期T=1msのとき、時定数が約15msのローパスフィルタになる。細かい条件は、昨日の記事を見てください。

■周期20msの正弦波入力に対する出力(実数演算)

1_16_sin_20ms_real_number

■周期20msの正弦波入力に対する出力(整数演算)

1_16_sin_20ms_integer

出力振幅は2032の期待に対して、408くらいであり、約1/5になっている。また、位相は4msほど遅れている。周期20msに対して、位相遅れを計算すると、4ms/20ms*360°=72°程度になる。

後日、アップロード予定のゲイン特性の50Hz(周期20ms)計算値は、0.20であり、上記の約1/5と一致している。位相特性の50Hz計算値は、-69°で、上記の72°程度と一致している。

■周期10msの正弦波入力に対する出力(実数演算)

1_16_sin_10ms_real_number

■周期10msの正弦波入力に対する出力(整数演算)

1_16_sin_10ms_integer

振幅は2032の期待に対して、313くらいであり、約0.15倍になっている。位相は2msほど遅れている。周期10msに対して、位相遅れを計算すると、2ms/10ms*360°=72°程度になる。

後日、アップロード予定のゲイン特性の100Hz(周期10ms)計算値は、0.10であり、上記の約0.15と一致している。周期が短くなって、波形が粗くなってくるので、これくらいの誤差はある。位相特性の100Hz計算値は、-66°で、上記の72°程度と一致している。

■周期5msの正弦波入力に対する出力(実数演算)

1_16_sin_5ms_real_number

■周期5msの正弦波入力に対する出力(整数演算)

1_16_sin_5ms_integer

周期5msなので、1周期内に5サンプリングしかない状態で、非常に粗い波形になっている。

振幅は2032の期待に対して、104くらいであり、約0.05倍になっている。位相は0.5msほど遅れている。周期5msに対して、位相遅れを計算すると、0.5ms/5ms*360°=36°程度になる。

後日、アップロード予定のゲイン特性の200Hz(周期5ms)計算値は、0.055であり、上記の約0.05倍と一致している。位相特性の200Hz計算値は、-51°で、上記の36°程度に近い。

エクセルの計算データは、こちら

「motion_oyaji_IIR_1_16_time_sin_081119.zip」をダウンロード

圧縮してあります。

Link: 

「モーションおやじ」のプライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

2008年11月20日

簡単一次IIRフィルタの正弦波入力応答波形

最近の記事では、一次のIIRフィルタで簡単なローパスフィルタを設計している。計算式は、しばらく前の記事から、

y(nT) = x(nT) - {1-e^(-T/τ)}*y{(n-1)T} + y{(n-1)T}

    (式9)

である。計算の簡単化のために、係数1/16を使用して、時定数τは約15msである。

インパルス応答、ステップ応答は、先の記事で計算してみた。

今回は、正弦波入力x(nT)を入れた応答出力y(nT)を計算する。いずれも、サンプリング周期T=1ms、横軸は時間[ms]である。実数演算と整数演算を比較して示す。整数演算の場合の正弦波振幅は127として、整数に丸めた入力を使用している。同様に整数演算1/16の出力も整数に丸めている。また、いずれの波形においても、入力を16倍にした出力(理想波形出力)と比較している。16倍の16は、先の記事で書いたように最終値の定理で求められる。

■周期1000msの正弦波入力に対する出力(実数演算)

1_16_sin_1000ms_real_number

■周期1000msの正弦波入力に対する出力(整数演算)

1_16_sin_1000ms_integer

時定数15msのローパスフィルタに対して、1000ms周期を正弦波を入力した場合、出力の振幅、位相ともに入力に対して大きな変化がない。

実数計算、整数計算の大きな差もない。

差異の詳細については、追ってアップロードするエクセルファイルを見てください。

■周期100msの正弦波入力に対する出力(実数演算)

1_16_sin_100ms_real_number

■周期100msの正弦波入力に対する出力(整数演算)

1_16_sin_100ms_integer_3   

出力振幅は2032の期待に対して、実際は1454であり、約0.721になっている。位相は12msほど遅れている。周期100msに対して、位相遅れを計算すると、12ms/100ms*360°=43°程度になる。

後日、アップロード予定のゲイン特性の10Hz(周期100ms)計算値は、0.717であり、上記の約0.721と一致している。また、位相特性の100Hz計算値は、-42°で、上記の43°程度と一致している。

別の周波数の正弦波入力に対する出力波形は、次の記事で。

Link: 

「モーションおやじ」のプライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

すぐ近くまで、雪が降りて来ました。

_081120jpg_2 昨晩は、雪が舞いました。中央アルプスは、すぐ近くまで、雪が降りて来ました。

我が家では、こたつが出ました。

下の写真は、南アルプス。

_081120_2

| | コメント (0) | トラックバック (0)

2008年11月19日

10000アクセスありがとうございます。

081119_10000_3 

今年の1月9日から、「モーションおやじ」ブログ始めて、10ヵ月と10日で、10,000アクセスになりました。

読者のみなさん、専門エンジニアしかわからない内容にお付き合いいただいて、ありがとうございます。

| | コメント (0) | トラックバック (0)

2008年11月18日

簡単一次IIRフィルタのステップ応答波形

まず、おさらい。

1次にIIRフィルタで、サンプリング周期T=1ms、時定数τ=15ms程度のローパスフィルタを実装しようとしている。

計算式は、さきの記事より、

y(nT) = x(nT) - 1/16*y{(n-1)T} + y{(n-1)T}

    (式11)

インパルス応答を先の記事で計算したので、今日は、ステップ応答を計算してみよう。

ステップ応答とは、たとえると、スイッチが入ったような応答である。いままでゼロだったのに、突然ある値が入力されたら、どのような出力が出てくるかという波形である。

■ステップ応答(実数計算)

まず、入力x(nT)は、ずっと1。式にすると、

  x(nT) =  1 (n=0,1,2,,,)

これを入力として、(式11)のディジタルフィルタ出力y(nT)を計算すると16に近づく。

 y(nT) → 16

この値は、最終値の定理として知られている計算式からも得られる。

フィルタの伝達関数をG(z)として、値が1のステップ入力を入力したとき、出力y(nT)の最終値は、

                      z

 lim{y(nT)} = lim (z-1) * G(z) *----

  n->∞        z->1               z-1

       = lim z*G(z)

                  z->1      

今計算しているディジタルフィルタの伝達関数は、先の記事の(式5)

http://robotcontroller.cocolog-nifty.com/blog/2008/11/iir-8a20.html

より

                1   

 G(z)=------------------

         1-e^(-T/τ)*z^(-1)

である。これを代入して、y(nT)の最終値は

                                     z

 lim{y(nT)} = lim ------------------------

  n->∞       z->1      1-e^(-T/τ)*z^(-1)

                    1

              = -------

                 1-e^(-T/τ)

先の記事で、簡単な演算を目論んで

      1-e^(-T/τ) = 1/16

と置いたので、y(nT)の最終値は、16となる。

グラフの比較波形として、アナログ波形を載せるが、最終値を一致させて比較しやすくするために、値16のステップ入力を入れたアナログ1次ローパスフィルタ出力波形

   y(t) = 16 * {1-e^(-t/15.4946E-3)}

を示している。15.4946E-3は、ディジタルフィルタ設計式から得られた時定数である。約15ms。

1_16_step_real_number

■ステップ応答(整数計算)

計算の途中、1/16で桁落ちするので、x(nT)として、127を入力している。式としては、

  x(nT) =  127 (n=0,1,2,,,)

最終値は、127の入力に変わったので、127*16=2032である。

比較用のアナログ波形は、最終値を合わせるために

   y(t) = 127 * 16 * {1-e^(-t/15.4946E-3)}

を示している。

1_16_step_integer

おおむね同じ波形になる。横軸はサンプリング、T=1msの場合は、時間[ms]。

差異に興味ある方は、エクセルのデータをみてね。データはこちら、

「motion_oyaji_IIR_1_16_time_step_081116.xls」をダウンロード

Photo最終値の定理は、例えば、

横山、佐川、貴家の訳;「ディジタル制御システム 解析と設計」、日刊工業新聞社、1990年、33ページ

に載っている。

Link: 

プライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

2008年11月17日

簡単一次IIRフィルタのインパルス応答波形

先の記事のおさらい。

1次のIIRのローパスフィルタは、以下の式で、実現できると書いた。

y(nT) = x(nT) - {1-e^(-T/τ)}*y{(n-1)T} + y{(n-1)T}

    (式9)

ここで、例として、係数

 1-e^(-T/τ) =1/16  (式10)

としてみよう。4回右シフトで1/16を実現しようともくろんでいる。

 1 - 1/16 = e^(-T/τ)

両辺のlnをとって、

 -T/τ= ln(1-1/16)

        τ = -T /{ln(1-1/16)}

     =T * 15.4946

となる。サンプリング周期T=1msとすれば、時定数τ=15.49msのディジタルフィルタが実現できる。 (式9)は、(式10)と置いたので

y(nT) = x(nT) - 1/16*y{(n-1)T} + y{(n-1)T}

    (式11)

となる。これを、実際に計算してみよう。

■インパルス応答時間波形(実数計算)

まず、入力x(nT)として、パルスを入力してみよう。

最初の1サンプリングだけ、1。あとは、ずっと0。式にすると、

  x(nT) =  1 (n=0)

  x(nT) =  0 (n=1,2,3,,,)

この場合の出力y(nT)は、以下のグラフになる。1/16の計算で小数点以下が発生するが、実数で計算している。アナログフィルタ出力の理想波形

  y(t) = e^(-t/0.0154946)

と比較している。

1_16_impluse_real_number_2

横軸はサンプリングn。サンプリング周期T=1msの場合は、時間[ms]と考えて良い。アナログ波形とディジタル演算波形に、ほとんど差がない。どのくらい差があるか知りたい方は、追って、エクセルデータをアップロードするのでみてください。

■インパルス応答時間波形(整数計算)

次に整数計算してみる。途中の1/16で桁落ち(小数点以下は無視される)ので、入力x(nT)を大きい値にする。ここでは、127にする。つまり、最初の1サンプリングだけ、127。あとは、ずっと0。式にすると、

  x(nT) =  127 (n=0)

  x(nT) =  0 (n=1,2,3,,,)

この場合の出力y(nT)は、以下のグラフになる。アナログの理想波形と比較している。横軸はサンプリングn。サンプリング周期T=1msの場合は、時間[ms]と考えて良い。

1_16_impluse_integer_3

出力y(nT)が0にならないことがわかる。15で落ち着いてしまう。理由は、途中の1/16演算に15が入力されても、演算結果が0になってしまい、出力に現れないことによる。

つまり、1/16を途中に入れると、16より1少ない15が誤差として残る。

使えるか?

16bit(-32768から+32767)等の有限桁数のデバイスで実装を狙っているので、誤差はやむを得ないという前提である。誤差15が気にならないように16倍したデータをx(nT)に入力すれば、誤差の割合は減る。つまり、精度は上がる。

あとで説明するかもしれないが、1/32を途中に入れると、32より1少ない31が誤差として残る。同様に1/8を途中に入れると、8より1少ない7が誤差として残る。

なお、今は、サンプリング周期T=1msとして、時定数τ=15.49msとなっているが、

サンプリング周期を1/10にして、T=0.1msなら、時定数は、1/10の1.549ms、

サンプリング周期を10倍にして、T=10msなら、時定数は、10倍の154.9ms、

どんなサンプリング周期でも15.49倍である。

次の記事では、ステップ応答の波形を計算する。

Link: 

プライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

2008年11月16日

時計のモータ

10年以上使っていた卓上のアナログ時計が止まってしまった。さっそく分解。

Photo_2

モータの全体写真。右下の丸いのがロータ。それを取り囲んでステータ。ステータには、コイルが一個。

Photo_3

これがロータ。

Photo_4

ステータには隙間がある。この隙間部分のコアは1枚。

Photo_5

コイル部はコアが3枚になっている。

Photo_6

電子回路は、8PIN-DIPのIC、水晶、ボリウム、トランジスタ、ブザー。いたってシンプル。

| | コメント (0) | トラックバック (0)

2008年11月15日

1次IIRフィルタの簡単お手軽な実装

前の記事のおさらいから。

一次遅れのIIRフィルタの計算式は

 y(nT) = x(nT) +  e^(-T/τ)*y{(n-1)T}  (式8)

となることがわかった。さて、係数のe^(-T/τ)は、どんな値になるだろうか?たとえば、サンプリング周期T=1ms、設計したいフィルタの時定数τ=10msとすると、e^(-0.1)=0.904837となる。

0.904837をどのように扱うか?

ためしに、この値を1から引いてみよう。

 1 - 0.904837 = 0.095163

約1/10.5。1/16としてしまえば、右シフト演算4回で行ける。割り算よりシフト演算なら格段に速い。VHDLやVerilogでも簡単に記述実装できる。

そうか!

係数をe^(-T/τ)ではなくて、1-e^(-T/τ)の形になるようにすれば簡単な演算になるのだ。(式8)を係数1-e^(-T/τ)になるよう変形してみる。

 y(nT) = x(nT) - {1-e^(-T/τ)}*y{(n-1)T} + y{(n-1)T}

    (式9)

これをブロック図に書くと、

1stiir_const2

実装例、入出力時間波形、周波数特性については、次回以降で説明します。お楽しみに!

Link: 

プライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

2008年11月14日

インパルス不変法による一次IIRフィルタ設計(基本、初歩)

さて、FIRフィルタの次は、IIRフィルタを設計してみる。

 FIR(Finite Impulse Response)フィルタ。有限インパルス応答フィルタ。

 IIR(Infinite Impulse Response)フィルタ。無限インパルス応答フィルタ。

例えば、IIRフィルタの入力に1サンプリングだけ1、その次からずっと0を入力した場合、IIRフィルタ出力は小さな値になっていくが無限に続く。その波形を示す。一次遅れの例である。

Iir

これがIIR(無限のインパルス応答)なる名前のゆえん。

さて、IIRフィルタ設計法にもいろいろあるが、わかりやすい「インパルス不変法」で一次遅れフィルタを設計してみる。

「インパルス不変法」というのは、アナログフィルタ入力に細いパルスを入れた場合のアナログフィルタ出力と上記のように、最初のみ1で、次からずっと0のデータを入力したIIRフィルタ出力波形とを一致させようという方法である。

例えば、アナログフィルタが一次遅れでその入力に細いパルスを入れた時の出力が上記波形のように、指数関数的で減少し、その時定数がτ[s]であるとすれば、出力波形は以下の式になる。

 g(t) = e^(-t/τ)  ( t>=0 )                (式1)

この波形をT[s]ごと、サンプリングした場合、g(t)の値は、上式にt=0, t=T, t=2T, t=3T,,,を代入して、その値は

 1, e^(-T/τ),  e^(-2T/τ), e^(-3T/τ) , , ,

と変化していく。 一般には

 g(nT) = e^(-nT/τ)  ; n=0,1,2,,,  (式2)

と表現できる。(式2)のz変換する。右辺は、1サンプリング遅れるごとにその値にz-1をかけて、その総和を求める。数列のz変換は級数になる。左辺は単純にG(z)とおく。

 G(z) = 1 + e^(-T/τ)*z(-1) + e^(-2T/τ)*z^(-2) + e^(-3T/τ)*z^(-3) + ,,,

     (式3)

これは、公比e^(-T/τ)*z(-1)の等比級数である。(式3)の両辺にe^(-T/τ)*z(-1)をかける。

 G(z)*e^(-T/τ)*z(-1) =

  e^(-T/τ)*z(-1) + e^(-2T/τ)*z^(-2) + e^(-3T/τ)*z^(-3) + ,,,

     (式4)

(式3)の両辺から(式4)の両辺を引くと

 G(z) - G(z)*e^(-T/τ)*z(-1) = 1

G(z)について整理して

         1

 G(z) = -----------------  (式5)

        1 -  e^(-T/τ)*z(-1)

これが、時定数τの一次遅れになるIIRフィルタである。

G(z) = Y(z) / X(z) を代入して、フィルタ入力X(z)とフィルタ出力Y(z)の関係式に変形する。

 Y(z)        1

 --- = -----------------  (式6)

 X(z)       1 -  e^(-T/τ)*z(-1)

これをY(z)=の形に変形すると、

 Y(z) = X(z) + e^(-T/τ)*Y(z)*z(-1) (式7)

これを逆z変換して、実時間の式へ戻す。Y(z) => y(nT) , X(z) => x(nT) , Y(z)*z^(-1) => Y{(n-1)T}と代入して、

 y(nT) = x(nT) +  e^(-T/τ)*y{(n-1)T}  (式8)

この計算式で一次遅れのIIRフィルタができる。ブロック図は、

 1stiir_const1

図としては簡単だが、Aの値が1と0.9の間の値になる。実際に、T=1msとして、時定数τ=10msとすると、e^(-0.1)=0.904837となる。これを浮動小数点演算ユニット(FPU)や乗算器(かけ算を行うハードウェア)がない安い16ビットマイコンや32ビットマイコン、あるいはディジタル回路用ハードウェア記述言語のVHDLやverilogでどのように実装したらよいのか、工夫が必要。工夫については、次の記事で。

Link: 

プライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

駒ケ根の月

14 14日朝、中央アルプスに沈む月。今朝は6時発で出張。薄暗い。

同じ日、夜の月。

14_2

| | コメント (0) | トラックバック (0)

2008年11月13日

移動平均フィルタによる振動時の速度検出フィルタ効果(周波数検出フィルタ)

モータの軸が振動しているとき、すなわち、ロータリーエンコーダを入力がアップダウンするときの移動平均フィルタによる速度検出フィルタの動きをみてみたい。

・周期40msで、±1の振動をしている場合

40ms

・周期20msで、±1の振動をしている場合

20ms

いずれの周期の振動も、振幅が小さく、入力データx(nT)の値が小さい領域での移動平均フィルタ動作なので、入力x(nT)と移動平均フィルタ出力y(nT)の明確な差異がわからない。

エクセルのデータはこちら「10081112.xls」をダウンロード

シミュレーションのブロック図は、こちら

http://robotcontroller.cocolog-nifty.com/blog/2008/11/post-8678.html

Link: 

「モーションおやじ」のプライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

2008年11月12日

移動平均フィルタによる速度検出フィルタ(周波数検出フィルタ)

今回は、移動平均フィルタへの入力を変えてみる。いままでの記事では、正弦波入力波形を示してきた。今回は、周波数検出、速度検出を意識して、パルスを入力してみる。

Photo

一定周波数のパルスをカウントして、一定周期T毎、その差分を取る(引き算をする)。

  x(n) = c(nT) - c{(n-1)T}

これは、周波数検出になる。もし、そのパルス発生源がロータリエンコーダやリニアスケールならば、速度検出になる。このカウンタの差分データを10回移動平均に入力してみる。

サンプリング周期T=1ms、すなわち、サンプリング周波数1000Hzとして、いろいろな周波数を入力し、10回移動平均入力のx(nT)と、移動平均出力のy(nT)を以下に比較する。横軸は時間[ms]、縦軸はx(nT)もしくはy(nT)。

・10010Hzのパルス入力に対するx(nT)とy(nT)

入力x(nT)、出力y(nT)ともの1のずれがある。入力x(nT)では平均10に対して1、出力y(nT)では平均100に対して1、なので、フィルタを通したことによりS/N比(信号とノイズの比)が10倍改善されている。

10010hz

・1010Hzのパルス入力に対するx(nT)とy(nT)

入力x(nT)、出力y(nT)ともの1パルスのずれがある。入力x(nT)では平均1に対して1、出力y(nT)では平均10に対して1、なので、フィルタを通したことによりS/N比(信号とノイズの比)が10倍改善されている。

1010hz

・110Hzのパルス入力に対するx(nT)とy(nT)

入力x(nT)、出力y(nT)ともの1パルスのずれがある。入力x(nT)では0に対してたまに1、出力y(nT)では1に対してたまに1、なので、フィルタを通したことによりS/N比(信号とノイズの比)が改善されている。

110hz

・11Hzのパルス入力に対するx(nT)とy(nT)

入力x(nT)、出力y(nT)ともの1パルスのずれがある。入力x(nT)では0に対してたまに1、出力y(nT)では0に対してたまに1、なので、フィルタを通したことによりS/N比(信号とノイズの比)改善効果は、ない。

11hz

・まとめ

”10回”移動平均にすると、サンプリング周波数1000Hzに対して、その”1/10”の100Hzくらいまで、ノイズ改善の効果がある。”1/100”の10Hz前後になると、効果がない。

エクセルの元データはこちら「10081111.xls」をダウンロード

本記事では、定速時の動作について計算した。+1、-1、+1と振動している場合の動作については、次の記事で。

Link: 

「モーションおやじ」のプライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

2008年11月11日

移動平均フィルタ段数増加のメリット、デメリット

移動平均回数をどのように決めたらよいか?

移動平均回数を増やすメリット: 

  データの分解能が増える。

  シャープなローパスフィルタが得られる。

移動平均回数を増やすデメリット: 

  高い周波数の信号(速い動き)を検出できない。

  演算回数が増える。

  必要メモリが増える。

  位相特性が遅れる。(動きが遅れて検出される)。

どのように段数決めるか?

  答えは、バランスですな!

「答えになってない!」と言われそうですが、、、

IIRフィルタについても、別の機会に説明していく予定。期待してね!

Link: 

「モーションおやじ」のプライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

2008年11月10日

単純移動平均フィルタ位相特性 まとめ 比較

単純移動平均フィルタ位相特性について、移動平均回数をパラメータとしてまとめる。先の記事の周波数特性の式から、位相部分、すなわち、e^(jφ)の形のφの部分を取り出す。

・2回平均

  φ(ω) = - ωT / 2

・4回平均

  φ(ω) = - ωT 3 / 2

・8回平均

  φ(ω) = - ωT 7 / 2

・10回平均

  φ(ω) = - ωT 9 / 2

これをグラフにして比較する。サンプリング周期T=1msとしている。横軸は、周波数[Hz]。縦軸は[rad]である。

_rad

次に、縦軸を[deg]にした位相特性グラフを示す。上のグラフの縦軸に対して、*360/2πを行っている。横軸は同じように周波数[Hz]。サンプリング周期Tは1ms、すなわち、サンプリング周波数は1000Hzである。

_deg

サンプリング周波数が2倍の2000Hzになる場合は、上図横軸右端の500Hzを1000Hzに置き換えてほしい。逆に、サンプリング周波数が1/2の500Hzになる場合は、上図横軸右端の500Hzを250Hzに置き換える。

エクセルの元データは、こちら「motion_oyaji_freq_MA_Conc_Phase_081107.xls」をダウンロード

移動平均段数増加のメリット、デメリットについては、別の記事で。

Link: 

「モーションおやじ」のプライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

2008年11月 9日

単純移動平均処理振幅特性(ゲイン特性) まとめ 比較

単純移動平均ゲイン特性のまとめ

先の記事の周波数特性の式から、振幅の部分を取り出して

・2回平均

  g(ω) = | 2* cos(ωT/2) |

・4回平均

        | sin(2ωT) |

  g(ω) = ------------

                | sin(ωT/2) |

・8回平均

        | sin(4ωT) |

  g(ω) = -----------

               | sin(ωT/2) |

・10回平均

        | sin(5ωT) |

  g(ω) = ----------

              | sin(ωT/2) |

これをグラフにする。サンプリング周期T=1msとしている。横軸は周波数[Hz]。

_

2回平均は、周波数ゼロ、すなわち、直流にて、ゲインは2となる。4回平均は、4。8回平均は、8。10回平均は10。直流でのゲインを1になるように規格化して、比較しやすくする。つまり、2回平均のゲイン特性は、2で割る。4回平均のゲイン特性は、4で割る。他も同様。

規格化したグラフは、

__2

サンプリング周期T=1ms、すなわちサンプリング周波数は1000Hzである。このとき、

2回平均の場合は、サンプリング周波数の1/2の500Hzでゲインゼロ

4回平均の場合は、サンプリング周波数の1/4の250Hzでゲインゼロ

8回平均の場合は、サンプリング周波数の1/8の125Hzでゲインゼロ

10回平均の場合は、サンプリング周波数の1/10の100Hzでゲインゼロ

となる。

例えば、他のサンプリング周波数で、2000Hzにしたら、同様に

2回平均の場合は、サンプリング周波数の1/2の1000Hzでゲインゼロ

4回平均の場合は、サンプリング周波数の1/4の500Hzでゲインゼロ

8回平均の場合は、サンプリング周波数の1/8の250Hzでゲインゼロ

10回平均の場合は、サンプリング周波数の1/10の200Hzでゲインゼロ

となる。1/nも同様。

次に、縦軸の振幅をdB(デシベル)単位にする。つまり、上記グラフの縦軸の10底のlogをとって、20をかける。すると

_db

横軸は、周波数[Hz]。サンプリング周期は1ms。平均回数を増やしたほうが、シャープなローパスフィルタになる。

エクセルの元データはこちら「motion_oyaji_freq_MA_Conc_Amp_081107.xls」をダウンロード

Link: 

「モーションおやじ」のプライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

2008年11月 8日

単純移動平均フィルタ周波数特性 まとめ 比較

単純移動平均周波数特性のまとめ

先の記事の伝達関数G(z)のzにz=e^(jωT)を代入して、オイラーの公式を利用して、式を整理する。

・2回平均

  G(ωT) = 2* cos(ωT/2) * e^(-jωT/2)

・4回平均

         sin(2ωT)

  G(ωT) = --------- * e^(-jωT3/2)

                  sin(ωT/2)

・8回平均

         sin(4ωT)

  G(ωT) = --------- * e^(-jωT7/2)

                  sin(ωT/2)

・10回平均

         sin(5ωT)

  G(ωT) = --------- * e^(-jωT9/2)

                  sin(ωT/2)

一般の形のn回平均もわかるよね!

2回移動平均のオイラーの公式を使った変形については、こちらを参照

http://robotcontroller.cocolog-nifty.com/blog/2008/10/post-0e41.html

4回移動平均のオイラーの公式を使った変形については、こちらを参照

http://robotcontroller.cocolog-nifty.com/blog/2008/10/post-2781.html

Link: 

「モーションおやじ」のプライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

2008年11月 7日

単純移動平均フィルタ伝達関数 まとめ 比較

単純移動平均の伝達関数のまとめ

移動平均にはローパスフィルタ(LPF)の役目の他に、分解能を増やすという機能もある。そのため、よく使う、情報を1ビット増やすための2回平均、情報を2ビット増やすための4回平均、情報を3ビット増やすための8回平均、情報を10倍にする10回平均について、まとめる。それ以外の平均回数については、本ブログ記事から推測できますよね!

・2回平均

  G(z) = 1 + z^(-1)

・4回平均

              1 - z^(-4)

   G(z) = ----------

              1 - z^(-1)

・8回平均

              1 - z^(-8)

   G(z) = ----------

              1 - z^(-1)

・10回平均

              1 - z^(-10)

   G(z) = ----------

              1 - z^(-1)

単純2回移動平均の伝達関数の求め方はこちら

http://robotcontroller.cocolog-nifty.com/blog/2008/10/post-0e41.html

単純4回移動平均の伝達関数の求め方はこちら

http://robotcontroller.cocolog-nifty.com/blog/2008/10/post-2781.html

Link: 

「モーションおやじ」のプライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

2008年11月 6日

単純移動平均の時間波形(4回平均)

Photo

1000Hzサンプリング(制御周期1ms)の4回移動平均フィルタに100Hz,200Hz,250のsin波を入力した場合の、

入力x(nT)、出力y(nT)、内部状態のx{(n-1)T}、x{(n-2)T}、x{(n-3)T}を示す。横軸の単位はms。

x(nT)を正弦波として、

  y(nT) = x(nT) + x{(n-1)T}  + x{(n-2)T}  + x{(n-3)T}          

を計算したグラフである。

サンプリング周波数1000Hzの1/10の100Hzの正弦波を4回移動平均フィルタへ入力すると、出力振幅が入力の約3倍になる。

サンプリング周波数1000Hzの1/5の200Hzでは、出力振幅が入力の約1倍。

サンプリング周波数1000Hzの1/4の250Hzでは、出力はゼロ。フィルタリングされる。

たとえば、サンプリング周波数が2倍の2000Hz(制御周期500us)のとき、やはり、サンプリング周波数2000Hzの”1/4”の500Hzでは、出力がゼロになる。

読者のみなさんのシステムのサンプリング周波数が1000Hzのn倍だったら、特性はn倍の周波数に拡大されると考えてください。1/nでも同様。

”2回”移動平均の場合は、サンプリング周波数の”1/2”の周波数の正弦波を入力すると出力がゼロ。

”4回”移動平均の場合は、サンプリング周波数の”1/4”の周波数の正弦波を入力すると出力がゼロ。

エクセルの元データはこちら「motion_oyaji_wave_MA4_081029.xls」をダウンロード 

”2回”移動平均の時間波形はこちらhttp://robotcontroller.cocolog-nifty.com/blog/2008/10/post-1979.html

Link: 

「モーションおやじ」のプライムモーション社(みんなで手軽にWindowsリアルタイムIO制御)

プライムモーション(Windowsで手軽にリアルタイムIO制御)

| | コメント (0) | トラックバック (0)

2008年11月 5日

超高速画像処理ボード

先週、とある装置メーカの社長さんが、電話をかけてきた。「今度、ホームページをリニューアルするけれど、モーションおやじさんのページへリンク張っていい?」

もちろん「YES」。次に「流れるように物が動いて、その物に印字された文字を高速に検査したいのだが、高速画像処理ボード知ってる?」と聞かれた。

そのときは「残念だけど最近は情報を集めてない。ごめんなさい。」と答えた。

ところが、その数日後、

ある人の紹介で、別の社長さんを表敬訪問したら、「うちで1秒間に68,000ラインのラインセンサ画像を入力して、リアルタイムに判断できる高速処理ボードがある」とのこと。

偶然につながった!

| | コメント (0) | トラックバック (0)

2008年11月 4日

資本主義は嫌いですか

Photo お勧め度★★★★★(今が旬)

中身はサブプライム危機の説明。

興味深かったのが、

71ページからの

・収入がない老人が命をつなぐ法

73ページからの

・「ダタのバブル紙切れ」で世代間の助け合いができる

83ページからの

・賦課方式年金制度は公営ねずみ講

142ページからの

・ヘッジファンド国家アイスランドの教訓

先に紹介した「すべての経済はバブルに通じる」と合わせて読むと、サブプライム危機という現在の世界的な金融構造危機について知識が得られる。

| | コメント (0) | トラックバック (0)

2008年11月 3日

すべての経済はバブルに通じる 2

「すべての経済はバブルに通じる」20ページから、

サブプライムローンとは、住宅価格上昇が前提のしくみであり、住宅価格が下落を始めれば破綻することは必然だった。

住宅価格上昇とともに、サブプライムローン産業が拡大した理由は「証券化」である。と著者は言う。

「証券化」とは:
同書24ページから

第一段階:様々な実物資産(ここでは住宅ローンであるが、住宅ローンに限らない)を集め、これらの資産から生じるキャッシュフローを権利としてまとめる。
第二段階:その権利を細かく分けて、分けられた権利をそれぞれ個別の証券とする。
第三段階:分けられた個別の証券を、それぞれ別の投資家に対して売り出す。

サブプライムローンが証券化されると投資家からみた魅力が増す。

1、切り分けたので、少額から投資できるようになりお金が集まりやすい。
2、リスクの低い部分、リスクの高い部分に分けることができる。リスクの低い部分は安全だということでAAAの格付けになりうる。投資家の許容度の応じた商品になって、買いやすくなる。
3、たとえば、東海岸の住宅ローンと西海岸の住宅ローンを混ぜることによって、リスクが分散する。

「証券化」することによって、「商品化」され、価格がついて、世界中に流通するようになる。

| | コメント (0) | トラックバック (0)

2008年11月 2日

すべての経済はバブルに通じる

Photo_3お勧め度★★★★★(今が旬)

最近の経済状況で、さすがに経済の本を読みたくなった。

同書のまえがきから:

質問1:お金はなぜ殖えるのだろう?

質問2:経済はどうやって成長し続けるのだろう?

質問3:資本主義とは何だろう?

「ネズミ講」

答案にこれが書いてあれば、90点です。

ネズミ講、これが、お金が殖える理由であり、経済成長がプラスを持続するメカニズムであり、資本主義の本質なのです。

| | コメント (0) | トラックバック (0)

2008年11月 1日

JIMTOF2008(日本国際工作機械見本市)

Jimtof2008 東京ビッグサイトにJIMTOF2008(日本国際工作機械見本市)を見に行ってきた。この展示会は、20年くらい前から何回も行っているが、機械の大きさ、展示会の大きさに圧倒される。日本はモノづくりの力があるよね。

森精機のブースの中に、ユーザの切削加工作品が並んでいる。すごい。必見!

| | コメント (0) | トラックバック (0)

« 2008年10月 | トップページ | 2008年12月 »