Plot step response of transfer function

195 visualizzazioni (ultimi 30 giorni)
I am trying to plot the step function of a difference equation. The equation is given by y(n) + 1/4*y(n-1) + 1/2*y(n-2) = x(n) + 1/2*x(n-1). Where x(n) is supposed to be the input and y(n) is the output. The error is as shown:
Is there no way to plot it using the step function?
Code:
num = [1 -1/4 -1/2];
den = [1 1/2];
s = step(num,den);
stem(s);
  1 Commento
Ye Ken Kok
Ye Ken Kok il 4 Nov 2022
Sorry fot not including the input signal for x(n). Here is the input signal.
F1 = 20;
F2 = 40;
F3 = 60;
Fs = 2*F3;
t = 0:0.001:2-0.001;
n = 0:100;
x = 10*sin(2*pi*F1*t)+10*sin(2*pi*F2*t)+10*sin(2*pi*F3*t);
xn = 10*sin(2*pi*(F1/Fs)*n)+10*sin(2*pi*(F2/Fs)*n)+10*sin(2*pi*(F3/Fs)*n);

Accedi per commentare.

Risposta accettata

Mathieu NOE
Mathieu NOE il 4 Nov 2022
hello
you have 2 mistakes to correct
1 - how to get a z transfer function from the difference equation
your num and den are wrong (signs are wrong and you flipped num with den)
this might help
2 - you have a discrete not a continuous time model so use dstep instead of step
num = [0 1 1/2];
den = [1 1/4 1/2];
s = dstep(num,den);
stem(s);
all the best
  1 Commento
Ye Ken Kok
Ye Ken Kok il 5 Nov 2022
Modificato: Ye Ken Kok il 5 Nov 2022
Thanks for your answer, I managed to solve it with your help

Accedi per commentare.

Più risposte (1)

Sam Chak
Sam Chak il 4 Nov 2022
It is a input-output difference equation. Thus, you cannot use the continuous-time Laplace transform.
Since the input is not provided, here is just a simple example.
dt = 0.001;
t = 0:dt:20; % sample times
ykm1 = 0; % initial value of y(k - 1)
ykm2 = 0; % initial value of y(k - 2)
xkm1 = 0; % initial x(k - 1)
xk = 0; % initial x(k)
Y = []; % placeholder for y(k) array
X = []; % placeholder for x(k) array
for k = 1:length(t)
% input-output difference equation
% y(n) = - 1/4*y(n-1) - 1/2*y(n-2) + x(n) + 1/2*x(n-1)
yk = - 1/4*ykm1 - 1/2*ykm2 + 1*xk + 1/2*xkm1;
ykm2 = ykm1; % when time advances, y(k - 1) becomes y(k - 2)
ykm1 = yk; % when time advances, y(k) becomes y(k - 1)
xkm1 = xk;
xk = sin(.05*pi*t(k));
Y = [Y yk];
end
plot(t, Y, 'linewidth', 1.5), grid on

Prodotti


Release

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by