0
$\begingroup$

I want to calculate the frequency response of a discrete PT1 system with T=T1 and K=1. (the code is at the bottom of the question) To validate the magnitude response, I want to use an sinusoidal input signal with linearly increasing frequency from 0 to fs/2. The magnitude response should be the envelope of the transient response. However, this is only the case if I change the line

u = sin(2*pi*f.*t);

to

u = sin(pi*f.*t);

Why? I assume that I have any kind of faulty reasoning here, but I can't find it.

Thanks in advance.

Full code:

clear

%% Input (linear frequency sweep)
Ts = .1e-3;
duration = 30;
t = (0:Ts:duration);
fs = 1/Ts;
f = (fs/2)*t/duration;
u = sin(2*pi*f.*t); 

%% PT1-system continuous
T1 = 1e-3;
G = tf(1,[T1 1]);

%% PT1 discretized
H = c2d(G,Ts,'zoh');

%% PT1 trasient response
x0 = 0;
x = lsim(H,u,[],x0,'zoh');

%% PT1 freq. response
[h,~] = freqz(H.Numerator{1:end},H.Denominator{1:end},f,fs);

%% Plot
figure(1),clf(1),hold on
plot(u),plot(x),plot(abs(h))
$\endgroup$

1 Answer 1

0
$\begingroup$

Found the error by myself now.

I did not use the instantaneous frequency for the calculation of the sweep signal, as stated here or here.

The corrected code is:

clear

%% Input (linear frequency sweep)
Ts = .1e-3;
duration = 30;
t = (0:Ts:duration);
fs = 1/Ts;
f = (fs/2)*t/duration;
finst = 1/2*(fs/2)/duration*t;
u = sin(2*pi*finst.*t);

%% PT1-system continuous
T1 = 1e-3;
G = tf(1,[T1 1]);

%% PT1 discretized
H = c2d(G,Ts,'zoh');
x0 = 0;

%% PT1 trasient response
x = lsim(H,u,[],x0,'zoh');

%% PT1 freq. response
[h,~] = freqz(H.Numerator{1:end},H.Denominator{1:end},f,fs);

%% Plot
figure(1),clf(1),hold on
plot(u),plot(x),plot(abs(h))
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.