- ベストアンサー
周波数特性解析について(サーボ系)
現在、サーボモータ+ボールネジのテーブルを使用したサーボ系のテストをしています。そこで、系の周波数解析をするためにSin波をスウィープ(アンプに入れるのではなく、上位のコントローラに挿入)するやり方での周波数解析ツール(C言語)を作成したのですが、他のやり方として、白色雑音(ホワイトノイズ)を使ったやりかたがあるようです。この方法だと、Sin波のスイープとは異なり、一発で系の周波数特性データがとれるという話を聞いたのですが、具体的な方法がネット上でも見つかりませんでした。そこで、 (1)C言語で白色雑音はどのように作るのか (2)入力する白色雑音はどれくらいのボリュームで 何秒間印加するのか? (3)フィードバックされるエンコーダデータをどのよう に変換(細工)して特性を取得するのか (4)スウィープの方法と比較した場合の長所・短所は? について、明るい方がいましたら教えてください。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
(1) Σcos(2πkt/T+φ) (φは乱数で与える、0から2πまでの数値、Tは測定全体の時間、kは0以上の整数)でkを0から測定したい最高周波数に相当するところまででのΣをとります。 (φ=0で固定すると、インパルスになってしまうので、、) (2)印加時間は、測定が完了するまで。測定時間は周波数特性で周波数の分解能、欲しい最低周波数で決まります。分解能や最低周波数を上げるためにはそれに応じて長い時間を必要とします。 レベルは、サーボ系が飽和したり機器に負担を与えない範囲で出来るだけ大きく。 (3)#1さんが書かれているように、フーリエ変換して時間信号から周波数応答に変換します。 (4)スイープ式の方が、測定時間はかかりますが、誤差の少ないデータを得やすいです。
その他の回答 (2)
- shkwta
- ベストアンサー率52% (966/1825)
原理的な話だけですが: f(t) = A Σ[k = 1 to N] cos( 2πk t/T) t:時刻 A, T, N:定数 (ただし、Nは自然数) で表される波を作ります。これはホワイトノイズとみなせます。 これを系に入力し、g(t)という出力が得られたとします。ここで、 g(t) = A Σ[k = 1 to N] {d(k) cos( 2πk t/T) + e(k) sin( 2πk t/T)} と表示すると、d(k), e(k)は系の周波数特性を表します。 d(k), e(k)を求めるには、 b(n) = ∫[0 to T] g(t) cos(2πn t/T) dt (ア) c(n) = ∫[0 to T] g(t) sin(2πn t/T) dt n = 1, 2, …, N を数値積分で求めます。 ここで ∫[0 to 2π] sin(m t) cos(n t) dt = 0 また、 m = n のとき ∫[0 to 2π] cos(m t) cos(n t) dt = π ∫[0 to 2π] sin(m t) sin(n t) dt = π m ≠ n のとき ∫[0 to 2π] cos(m t) cos(n t) dt = 0 ∫[0 to 2π] sin(m t) sin(n t) dt = 0 となります。 これを使うと、 b(n) = (A T/2)d(n) c(n) = (A T/2)e(n) となって、b(n)からd(n), c(n)からe(n)が求められます。 この方法はフーリエ変換といいます。この計算を効率よく実行するFFT(高速フーリエ変換)というアルゴリズムがあり、音声などをリアルタイムに処理するのに使われています。 欠点ですが、上の方法で多くのsin cos を足し合わせていることでわかるように、過入力にしないためには、Aをあまり大きな値にできません。つまり、実質は各周波数帯ごとに非常に小さな入力で測定していることになり、誤差が大きくなります。 技術的なことは専門の方に・・・
お礼
ありがとうございます。 精度を上げようとすると、やはり誤差との闘いになりそうですね。早速やってみます。
- shkwta
- ベストアンサー率52% (966/1825)
原理的な話だけですが: f(t) = A Σ[k = 1 to N] cos( 2πk t/T) t:時刻 A, T, N:定数 (ただし、Nは自然数) で表される波を作ります。これはホワイトノイズとみなせます。 これを系に入力し、g(t)という出力が得られたとします。ここで、 g(t) = A Σ[k = 1 to N] {d(k) cos( 2πk t/T) + e(k) sin( 2πk t/T)} と表示すると、d(k), e(k)は系の周波数特性を表します。 d(k), e(k)を求めるには、 b(n) = ∫[0 to T] g(t) cos(2πn t/T) dt (ア) c(n) = ∫[0 to T] g(t) sin(2πn t/T) dt n = 1, 2, …, N を数値積分で求めます。 ここで ∫[0 to 2π] sin(m t) cos(n t) dt = 0 また、 m = n のとき ∫[0 to 2π] cos(m t) cos(n t) dt = π ∫[0 to 2π] sin(m t) sin(n t) dt = π m ≠ n のとき ∫[0 to 2π] cos(m t) cos(n t) dt = 0 ∫[0 to 2π] sin(m t) sin(n t) dt = 0 となります。 これを使うと、 b(n) = (A T/2)d(n) c(n) = (A T/2)e(n) となって、b(n)からd(n), c(n)からe(n)が求められます。 この方法はフーリエ変換といいます。この計算を効率よく実行するFFT(高速フーリエ変換)というアルゴリズムがあり、音声などをリアルタイムに処理するのに使われています。 必要な測定時間は、原理的に、Tが最低限となります。 欠点ですが、上の方法で多くのsin cos を足し合わせていることでわかるように、過入力にしないためには、Aをあまり大きな値にできません。つまり、実質は各周波数帯ごとに非常に小さな入力で測定していることになり、誤差が大きくなります。 技術的なことは専門の方に・・・
お礼
ありがとうございます。 早速やってみます。m(_ _)m