MATLAB Answers

From numerical FFT to zero-pole diagram

3 views (last 30 days)
avihai on 5 Sep 2021
Commented: Star Strider on 6 Sep 2021
I have a simulink simulation that outputs time-domain signal to matlab (the input is also time-domain).
I made FFT on both input and output signal and have double complex vectors.
Now I'd like to make a zero-pole diagram from what I have but I have some challenges and I don't know how to continue.
  1. The pzmap and pzplot require a tf type input.
  2. my vectors are in a numerical frequency-domain and I have to convert them to a sort of symbolic z or s domain.
I'll be happy to know how should I proceed in order to succeed to do #1. Maybe #2 isn't relevant and there is a straightforward way?
  1 Comment
avihai on 5 Sep 2021
It seems that pzmap and pzplot can't run with FRD models. Is there a way to convert it to tf?

Sign in to comment.

Accepted Answer

Star Strider
Star Strider on 5 Sep 2021
Edited: Star Strider on 5 Sep 2021
What you can do depends on what the data are, one requirement being that to have complex vectors in the frequency domain.
To get an estimate of the pole and zero locations on the imaginary axis, plot the imaginary component of the fft as a function of frequency. The frequencies at the extremes () are the pole locations, and the zeros are the zero-crossings.
That is as close as it is possible get with only a fft result, although with the System Identification Toolbox, use the fft result with the idfrd function and go from there to identify the system. Then use the pzmap function and others to analyse the system.
EDIT — (5 Sep 2021 at 15:10)
It might be possible to convert the frequency domain data back to the time domain, then invert it. This is straightforward if the data are a two-sided Fourier transform, and only requires a bit more effort if it is a one-siced Fourier transform.

Sign in to comment.

More Answers (1)

Paul on 5 Sep 2021
Poles and zeros are based on the transfer function, which relates the output to the input. So in addition to the output signal, you'll also need to use the input signal. And you need to make sure that the frequency content of the input covers the frequencies that are relevant to your system, which you'll need to have some idea about.
One option is to try a single run with a Chirp Signal as the input, which might be difficult to use if you have low frequency poles or zeros.
Another approach would be to generate a single signal that is a series of sine waves.
Or you an run a loop over frequency stimulating the model with a single sine wave.
Once you have the input and output signals, then you can try ot use a function like tfest(), to estimate the transfer function, from which you can extract the poles and zeros.
Paul on 5 Sep 2021
To be clear, I was only suggesting a Bode plot to help get an idea if the data you have is sufficient to identify the system and to get some information that would then inform the usage of a function like tfest.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!