- Index
- » Usage and Applications
- » OpenModelica Usage and Applications
- » FFT Examples
FFT Examples
FFT Examples
How ist it possible to get the result plots of the FFT´s?
In the example" Modelica.Math.FastFourierTransform.Examples.RealFFT1" is the resulting plot shown in the dokumentation but if I open the resulting mat file there are just two different values and I can´t plot the same results.
Also if I try to use the"RealFFTBlock" and try to see the harmonics by the example "Modelica.Blocks.Examples.Rectifier6pulseFFT", there are only 0 values in my resulting mat file.
Can anyone explain me what I´m doing wrong?
Re: FFT Examples
I'm having the same issue described below. When I run the example models under Modelica.Blocks.Examples.Rectifier6pulseFFT or Modelica.Blocks.Examples.Rectifier6pulseFFT I don't see any amplitude or phase data in the .mat output file. I don't change anything with the example files prior to running the simulations, and when I open the .mat file in octave I only get data in the first column (frequency). The amplitude and phase columns are all zeros.
I also tried running the RealFFT function contained in Modelica.Blocks on other rotational dynamics models I've created, and I get a similar output file. Has the RealFFT function worked for anyone else?
Re: FFT Examples
Hi there,
unfortunately I don't have a solution to the problem, I just experienced the same issues as you guys.
So I decided to implement a DFT on my own and I think I may found the issue of the realFFT example.
Have a look at the following basic example I implemented:
Code:
block DFT
import Modelica.Constants.pi;
parameter Integer N = 360 "Total number of samples";
Integer iTick;//(start=0, fixed=true);
Real y_buf[N];//(start=vector([6.5; fill(0, N - 1)]),each fixed=true);
algorithm
when sample(0, 0.1) then
iTick :=iTick + 1;
if iTick >= 1 and iTick <= N then
y_buf[iTick] := iTick;
end if;
end when;
end DFT;
I copied some parts of the realFFT example to sample a simple sine function but it didn't work! No values were written into the y_buf array.
So tried to simply assign the value of "iTick" to the buffer array but it still doesn't work..
My guess is that it has something to do with the when environment together with the sample() function because the following example works fine:
Code:
block DFT
import Modelica.Constants.pi;
parameter Integer N = 360 "Total number of samples";
//Integer iTick;//(start=0, fixed=true);
Real y_buf[N];//(start=vector([6.5; fill(0, N - 1)]),each fixed=true);
algorithm
for i in 1:N loop
y_buf[i] := i;
end for;
end DFT;
So if anyone has an idea why the first example doesn't work but the second does it would be a great help for my work!
Hopefully I can contribute with this post to motivate the discussion about these issues.
Re: FFT Examples
I experimented a little bit with your sample code. The trick seems to be, to define y_buf as a discrete variable. The buffer will be filled then.
Code:
block bufferTest
import Modelica.Constants.pi;
parameter Integer N = 360 "Total number of samples";
Integer iTick;
discrete Real y_buf[N](each fixed = true);
initial algorithm
iTick := 0;
algorithm
when sample(0, 0.01) then
iTick :=iTick + 1;
if iTick > 0 and iTick <= N then
y_buf[iTick] := Modelica.Math.sin(time);
end if;
end when;
equation
annotation(experiment(StartTime = 0, StopTime = 4));
end bufferTest;
This model runs in OMEdit and fills the y_buf.
I have attached a modified example RealFFT1, that provides the described results.
Regards Ulrich
RealFFT1-discretemo.zip
- Index
- » Usage and Applications
- » OpenModelica Usage and Applications
- » FFT Examples