How to create Bode plot from measured data

115 次查看(过去 30 天)
Aloha, I have a *.csv file containing three columuns, time, input signal and output signal. The input signal is a sine wave with a continuously increasing frequency and the output signal is the open loop response for my system. I would like to create a bode plot of the data. How would I do this? I know that I need to fit the data somehow so that I can extract the magnitudes and phase, but i'm not sure where to start.
thanks, windell
  2 个评论
Azzi Abdelmalek
Azzi Abdelmalek 2016-4-19
can you post a sample of your Data? Or attach your csv file
Windell
Windell 2016-5-23
编辑:Windell 2016-5-23
Sure Azzi. The input is the blue and the green is the output.
-For magnitude response would I just divide the amplitude of the output by the input point by point and convert to dB?
-Also for phase delay would I find the peaks and subtract the input peak from the output peak position?
If i'm wrong, would you be able to show an example?

请先登录,再进行评论。

回答(1 个)

Star Strider
Star Strider 2016-4-19
If you already have a state-space or transfer function representation of your system, then just cut to the chase, use the transfer function representation (or the ss2tf function if necessary), and use the numerator and denominator polynomials with the bode, bodeplot, freqs or freqz functions to create the Bode plot.
----------------------
Otherwise, if your input is a sine of increasing frequency (and that frequency spans the frequency response of your system, essentially a ‘chirp’ signal), you have the magnitude response of your system, so the magnitude part of a Bode plot.
Getting the phase might be a bit more challenging. Taking a wild guess as to your data, I would use the invfreqz function to create a transfer function representation of your system, and then use the bode, bodeplot, or freqz functions to create the Bode plot.

Community Treasure Hunt

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

Start Hunting!

Translated by