How to make a transfer function minimum phase?

조회 수: 8 (최근 30일)
Govind Narayan Sahu
Govind Narayan Sahu 2023년 5월 16일
댓글: Govind Narayan Sahu 2023년 5월 21일
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
Sam Chak
Sam Chak 2023년 5월 21일
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 2023년 5월 21일
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]')

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Filter Analysis에 대해 자세히 알아보기

제품


릴리스

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by