how do I implement a real time FFT in simulink?
이전 댓글 표시
I need to implement a real time FFT of the signal in the attached simulink model in order to detect the frequency and phase of the highest peak (it's a single sinusoid, so it shouldn't be an issue). As you can see, I've set the simulation step to 1/48000. I would like the detection update rate to be 40Hz, so the FFT is run 40 times a second. I'd like the FFT to be run on the newest samples (i.e. 48000/40) plus an overlap of 50% of the previous set (48000/80), so in other words, the latest 1800 samples. I'd like to zero pad this up to the next power of 2.
I was trying to figure out how to do a FIFO buffer that saves the last 1800 samples, but I couldn't figure that out, and I couldn't advance past that stage.
In case it helps, here's what I have:
Simulink Version 24.2 (R2024b)
Control System Toolbox Version 24.2 (R2024b)
DSP System Toolbox Version 24.2 (R2024b)
Optimization Toolbox Version 24.2 (R2024b)
Signal Processing Toolbox Version 24.2 (R2024b)
Stateflow Version 24.2 (R2024b)
Statistics and Machine Learning Toolbox Version 24.2 (R2024b)
Thanks in advance
-Bastian
답변 (1개)
Mathieu NOE
2025년 1월 17일
0 개 추천
hello
why not simply use a counter to do the job ? (as we deal with a sinusoidal wave)
you need one counter for the frequency and another one to compute the phase vs a reference signal
doing a full fft for just one single frequency is bit of overkill in my eyes ...
attached a demo file
hope it helps !
댓글 수: 7
Bastian Kindereit
2025년 1월 17일
Mathieu NOE
2025년 1월 17일
- well I suppose your vibration signal is related to the shaft rpm , so even if its "broadband" (I suppose you mean it contains harmonics of the rotationnal speed freq) it's periodic by nature , so a counter is still an option .
- find the max amplitude tone only in that frequency range of 30-80Hz : do you mean you only have to track the shatf freq tone , and remove the harmonics ?
- there is a FFT block in Simulink , have you tried ?
Bastian Kindereit
2025년 1월 17일
Bastian Kindereit
2025년 1월 17일
Mathieu NOE
2025년 1월 17일
No continuous or constant sample times are allowed.
you need to feed a fft block with fixed rate (discrete) signals , so either your entire simulation is running with fixed rate or (if you're using a variable step solver) you have to convert signal to discrete using a ZOH block (look at the different options for rate conversion)
Bastian Kindereit
2025년 1월 17일
Walter Roberson
2025년 1월 17일
Perhaps use a https://www.mathworks.com/help/dsp/ref/buffer.html buffer block and an FFT block https://www.mathworks.com/help/dsp/ref/fft.html ?
카테고리
도움말 센터 및 File Exchange에서 Signal Operations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!