Simulink上で​のフーリエ変換を用い​た振幅の導出

7 views (last 30 days)
Mitarashi
Mitarashi on 9 Jan 2017
Answered: takemoto on 13 Jan 2017
添付した写真(FullSizeRender)の式のように、ある周波数成分の振幅を求めそれを制御のために活用したいのですが、これをSimulink上で再現するにはどうすればよいでしょうか。 入力信号はモータの回転子の位置によって変化する信号で、継続的に振幅を算出し送り続ける必要があります。
とりあえずEmbedded Matlab functionを利用して添付した写真(testFFT)のようなプログラムで組んでみようみましたが、全く機能せず(出力のグラフの値がゼロ)。 式を見て適当かと思われるかもしれませんが、その通りで公式HP上で確認したFFTの文法自体の使い方もよく分かりませんでした。
尚、入力信号はSimulink上で発生させた高周波電圧信号です。一旦別の信号と重畳させたため高周波成分のみ抽出されたものが入力信号となっています。 ベクトル値が入力でないといけないということですが、これがベクトル値なのかすら分かりません。また、もしそうでなければどうやって変換すればいいのでしょうか?
また、そもそも添付した写真(FullSizeRender)のように振幅を求めることをFFTでやること自体が間違っていて、定積分の式等を組み合わせて行うべきなのでしょうか? 定積分のやり方自体が分からず再現できなかったのですが、もしありましたら教えて頂けると幸いです。
未熟でお恥ずかしい限りですが、アドバイス頂けましたら幸いです。 よろしくお願い致します。
  1 Comment
Rena Berman
Rena Berman on 9 Jan 2017
(Answers dev) Rough translation
question: Derivation of amplitude using Fourier transform on Simulink
body: I would like to find the amplitude of a certain frequency component as shown in the attached picture (FullSizeRender) formula, and use it for control, how can we reproduce it on Simulink? The input signal is a signal which varies depending on the position of the rotor of the motor, and it is necessary to continuously calculate the amplitude and continue to send.
For the time being, I tried using a program like the attached picture (testFFT) using the Embedded Matlab function, but it did not function at all (the value of the output graph was zero). Although it may seem appropriate to look at the formula, I did not understand how to use the grammar itself of FFT which I confirmed on the official HP as it is.
The input signal is a high frequency voltage signal generated on Simulink. Once it is superimposed with another signal, only the high frequency component is extracted and it is the input signal. It means that the vector value must be input, but I do not even know whether this is a vector value. Also, if not, how can we convert it?
Also, first of all, doing FFT with obtaining the amplitude like the attached picture (FullSizeRender) itself is wrong, should we combine definite integral expressions etc? I could not reproduce the method of definite integration itself, but I would be pleased if you could let me know.
I am immature and ashamed, but I am pleased if you can advise me. Thank you.

Sign in to comment.

Accepted Answer

takemoto
takemoto on 13 Jan 2017
ある信号について、特定の周波数成分の大きさを求めるために、fft処理を用いること自体は非常に一般的かと思います。この様な目的をSimulinkで実現する場合、通常、DSP System Toolboxから提供される、"FFTブロック"や、"magunitude FFT"ブロックを使用します。もし本オプションをお持ちであれば、"ex_fft_tut.slx"というサンプルが用意されています。コマンドウィンドウ上で、
>>ex_fft_tut
と入力することで、2トーン正弦波の合成波について、その振幅特性を表示するサンプルが起動しますので、こちらが参考になると思います。
本オプションをお持ちでない場合は、Embedded MATLAB Function (現バージョンでは、MATLAB Function)ブロックを使用する方法もあるかと思いますが、その場合、サンプル信号をメモリに逐次溜め込み、所望のfftサイズ(通常は2のべき乗)となった時点でfftを実行する、という手続きを別途記述する必要があるかと思います。

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!