How to make a transfer function minimum phase?

33 Ansichten (letzte 30 Tage)
Govind Narayan Sahu
Govind Narayan Sahu am 16 Mai 2023
Dear MATLAB Community,
I have a plant Transfer Function which is non minimum phase. I want to make it stable minimum phase system so that I can inverse it without instaability.
% Define the transfer function
H = tf([-4.8 16000 0 0],[4.8 16080 286800 51160000]);
isminphase([-4.8 16000 0 0], [4.8 16080 286800 51160000])
Thanks!
  3 Kommentare
Sam Chak
Sam Chak am 21 Mai 2023
What do you want to do after getting the inverse of this function?
H = tf([-4.8 16000 0 0], [4.8 16080 286800 51160000])
H = -4.8 s^3 + 16000 s^2 ----------------------------------------- 4.8 s^3 + 16080 s^2 + 286800 s + 5.116e07 Continuous-time transfer function.
step(H, 0.01)
Govind Narayan Sahu
Govind Narayan Sahu am 21 Mai 2023
I want to design a transfer function (Hinv) that will behave inversely to H so that the final magnitude of H*Hinv is (approximately) equal to one. This is because when I pass an input signal, it amplifies the output at about 10 Hz.
H will be invertible if it has a minimum phase.
I am able to create a frequency response that has a minimum phase, but not able to get a correct transfer function with the use of "invfreqz" and "freqz".
% Define the transfer function
num = [-4.8 16000 0 0];
den = [4.8 1.608e04 2.868e05 5.116e07];
H = tf(num,den); % Inverse Transfer function Den/Num
w = 2*pi*(0.1:0.01:100);
% Calculate complex cepstrum
c_hat_n = ifft(log(abs(squeeze(freqresp(H,w)))));
N = length(c_hat_n);
Nst = round(N/2)+1;
c_hat_n(Nst:N) = 0;
c_hat_n = c_hat_n*2;
h_hat_min = c_hat_n;
Hmin=exp(fft(h_hat_min));
w11 = angle(Hmin);
[b,a] = invfreqz((Hmin),w11, 3,3, [], 1000);
[h,w1] = freqz(b,a,N);
subplot(211)
hold on;plot(w/2/pi, abs(squeeze(freqresp(H,w))));
plot(w/2/pi, abs(Hmin),'r')
plot(w/2/pi, abs(h),'g')
xlabel('Frequency [Hz]')
ylabel('Magnitude, [N/N]')
subplot(212)
hold on;plot(w/2/pi, phase(squeeze(freqresp(H,w)))+2*pi);
plot(w/2/pi, phase(Hmin),'r')
plot(w/2/pi, 2*pi-w1,'g')
xlabel('Frequency [Hz]')
ylabel('Phase, [degree]')

Melden Sie sich an, um zu kommentieren.

Antworten (0)

Produkte


Version

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by