Last active
January 9, 2016 22:08
-
-
Save dugagjin/1d59942dce90b9d6cd0d to your computer and use it in GitHub Desktop.
lineaire tijdsinvariante systemen
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% Maak de FRF van een eerste ordesysteem, gegeven de transferfunctie: H(jw) | |
% = A/1+jw*Tau. Waarbij Tau = 0.5 en A = 1. Maak een Bodeplot, duid het -3 dB punt | |
% aan door middel van een rood cirkel. | |
clear all;clf; | |
A = 1; | |
Tau = 1/2; | |
w = linspace(0,100,10000); | |
s = j * w; | |
H = A ./ (Tau*s+1); | |
figure(1); | |
subplot(2,1,1); | |
semilogx(w, db(H),1/Tau,-3,'or'); % 1/Tau,-3 om de -3dB aan te duiden voor dB grafiek. | |
subplot(2,1,2) | |
semilogx(w, angle(H),1/Tau,atan(-1),'ro'); % 1/Tau,atan(-1) om -3dB punt te hebben voor hoek grafiek. | |
% Om verschil te zien van twee verschillende manieren van doen: | |
figure(2); | |
NUM = [A]; | |
DEN = [Tau 1]; | |
SYS = tf(NUM,DEN); | |
bode(SYS); | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% Maak een FRF van een tweede ordesysteem, gegeven de transferfunctie: | |
% H(jw) = wn²/(-w²+2E*wn*j*w+wn²) waarbij wn = 10 en E = 0.1. Maak een bode | |
% plot, en duid de resonantiefrquentie aan door middel van een rode lijn | |
% (voor amplitude) en rood cirkel (voor fase). | |
clear all;clf; | |
wn = 10; | |
E = 0.1; | |
N = 1000; | |
w = linspace(0,100,N); | |
% amplitude in functie van rad/s | |
figure(1); | |
NUM = [wn.^2]; | |
DEN = [-1 2*E*wn*1i wn.^2]; | |
SYS = tf(NUM,DEN); | |
polen = pole(SYS); | |
H1 = wn.^2./(-w.^2+2*E*wn*1i*w+wn.^2); | |
subplot(2,2,1); | |
semilogx(w,db(H1),[real(polen(1)) real(polen(1))],[-100 100],'r'); | |
% faseplot in functie van rad/s | |
% H2 voor resonantiefreq (rode cirkel) | |
subplot(2,2,2); | |
H2 = wn^2./(-real(polen(1))^2+2*E*wn*1i*real(polen(1))+wn^2); | |
semilogx(w,angle(H1),real(polen(1)),angle(H2),'ro'); | |
% ligging van de polen (kruisje) en nullen (cirkel) plotten | |
subplot(2,2,3); | |
plot(-imag(polen(1)),real(polen(1)),'xb',-imag(polen(2)),real(polen(2)),'xb'); | |
% limieten zetten anders zien we niet deftig wat er geplot word. | |
xlim([-15 5]); | |
ylim([-25 25]); | |
% Maak tenslotte ook de impulsresponsfunctie op basis van de FRF, en men plot deze. Laat dan | |
% de wn en de E varieren en observeer hoe de FRF en de polenligging verandert. | |
H1=real(ifft(H1,N)); | |
H1 = H1(1:1000); | |
subplot(2,2,4); | |
plot(w,H1); | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% Construeer nu een FRF op basis van de volgende polen en nullen: | |
% polen: p = -0.1+5j, -0.1-5j, 3 | |
% nullen: z = -2 | |
% Maak opnieuw een Bodeplot, de polen nullenligging en de | |
% impulsreponsfunctie. Varieer nu de ligging van de polen en observeer het | |
% resultaat. Wanneer heb je te maken met een onstabiel systeem? Hoe zie je | |
% dat de FRF(FrequencyReponsFunctie, aan de IRF (ImpulsResponsFunctie), | |
% en aan de polen-nullen ligging? | |
clear all;clf; | |
figure(1); | |
Z = -1; % nul op -2 | |
K = 1; % versterking = 1 => dus geen versterking | |
p = [-0.1+5*j,-0.1-5*j,-3]; | |
% bode plot | |
sys = zpk(Z, p, K); % ludiek manier om bode te maken | |
subplot(2,2,1); | |
bode(sys); | |
% ligging van de polen (kruisje) | |
subplot(2,2,3); | |
plot (real(Z), -imag(Z),'bo', real(p), -imag(p), 'xb'); | |
% limieten zetten anders zien we niet deftig wat er geplot word. | |
xlim([-10 10]); | |
ylim([-10 10]); | |
% weet niet of juist vanaf hier maar normaal wel bro. | |
% Maak tenslotte ook de impulsresponsfunctie op basis van de FRF, en plot deze. | |
w = 0.1:0.1:100; | |
s = j*w; | |
H = (s-Z)./((s- p(1)).*(s- p(2)).*(s - p(3))); | |
N = 1000; | |
h = 2*real(ifft(H,2*N)); | |
h = h(1:N); | |
subplot(2,2,2); | |
plot(h); | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% Maak een tweede-ordesysteem aan zoals in oef 1 met wn = 10 en E = 0.02. | |
% Je mag daarvoor commando tf gebruiken. Behalve het maken van een Bode | |
% plot omdat je daar nog interessante dingens kan mee doen. | |
% > Maak bv. de FRF expliciet uitgerekend op de zelfgekozen frequenties | |
% met behulp van "freqresp". Kies w tussen 0 en 100 Hz. met een | |
% frequentieresolutie van 10^-3 Hz. Plot deze op het bode diagram. | |
% > Maak nu een zelfgekozen signaal aan dat je laat inwerken op het | |
% systeem met behulp van "lsim". Kies bv. een sinusoïdaal signaal en | |
% varieer de frequentie. Kun je zo het bodediagram reconstrueren? | |
% > Kun je zo ook de impulsreponsiefunctie h(t) bepalen? | |
% > Gebruik dan deze impulsresponsiefunctie om H(w) uit te rekenen, en plot | |
% dit over de bodeplot. | |
clear all; | |
wn = 10; | |
E = 0.02; | |
% Eerste deel: | |
FreqRes = 0.01; | |
N = 10000; % sampling gekozen | |
Ts = 1/N/FreqRes; % opgelet! niet 1/Fs, maybe omdat Fs = N/FreqRes??? | |
tvec = [0:N-1]*Ts; | |
fvec = [0:N-1]/N/Ts; | |
% formule voor polen te verkijgen invullen | |
polen1 = -E * wn + 1j*wn*sqrt(1-E^2); | |
polen2 = -E * wn - 1j*wn*sqrt(1-E^2); | |
w = 2*pi*fvec; % vrijwillige keuze tussen 0 en 100. Maar w = 2*pi*fvec! | |
s = 1j * w; % omdat s = j*w (zie laplace) | |
H = wn^2 ./ (s-polen1) ./ (s-polen2); | |
subplot(2,2,1); | |
semilogx(w,db(H)); | |
% tweede deel | |
polen = [polen1, polen2]; | |
subplot(2,2,2); | |
plot(real(polen),imag(polen),'xr'); | |
xlim([-15 15]); | |
ylim([-15 15]); | |
% vierde deel | |
subplot(2,2,3); | |
semilogx(w,angle(H)); | |
% derde deel | |
h = 2*real(ifft(H,2*N)); | |
h = h(1:N); | |
subplot(2,2,4); | |
plot(tvec, h); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% Laad de matlabfile "trueFRF" in, en maak een bodeplot. Dit is de FRF van | |
% een metalen plaat, getest in labo omstandigheden. | |
clf; | |
clear all; | |
load('trueFRF.mat'); | |
subplot(2,2,1) | |
semilogx(fre,db(Hm(:,1))) | |
grid on; | |
subplot(2,2,2) | |
semilogx(fre,angle(Hm(:,1))) | |
grid on; | |
subplot(2,2,3) | |
semilogx(fre,db(Hm(:,2)),'r') | |
grid on; | |
subplot(2,2,4) | |
semilogx(fre,angle(Hm(:,2)),'r') | |
grid on; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment