simulation von übertragungssystemen
-
hallo
im moment arbeite ich an einer software zu simulation von übertragungssystemen. ich habe eine eingangsfunktion y(t) und ein übertragungssystem h(w). nur transformiere ich h(w) mittels ift in den zeitbereich und erhalte die impulsantwort h(t). nun berechne ich mittels diskreter konvolution h(t)*y(t) und erhalte thoretisch damit den ausgang meines zu simulierenden systems.
nun habe ich für die ersten versuche das oben beschriebenen in matlab programmiert, wobei ich die matlab funktionen (ifft und conv) genutzt habe. als test system habe ich einen einfachen tiefpass 1. ordnung und als eingangsfunktion einen rechteck. leider funktioniert die berechnung nicht richtig. wenn ich die simulation mit der von pspice vergleiche macht meine simulation einen fehler. das ausgangssignal stimmt nicht.mein matlab programm:
T=0.0001 N=2^11 f=logspace(0,10,N); sys=1./(j*2*pi*f*T + 1); %sytem h(w) figure(1) semilogx(f,20*log(abs(sys))); hifft=ifft(sys); %pulsanswer h(t) t=linspace(0,10,N); %y(t) a=zeros(1,N/4); b=ones(1,N/4); y=[a b a b]; figure(2) plot(t,y) out=conv(y,hifft); %discrete convolution tout=linspace(0,20,2*N-1); figure(3) plot(tout,out) xlim([0,10])
ich vermute das der fehler bei der beschreibung von h(w) passiert da ich hier ja nur N werte verwende.
vieleich hat jemand matlab und kann mir einen tip geben oder einen guten link.besten dank
tobias
-
Hi,
habe nur mal kurz reingeschaut, vielleicht liege ich also ganz falsch, aber hast du dir mal h(t) angesehen. Sieht nicht wie die Sprungantwort eines P-T1-Gliedes aus, oder? Könnte da der Fehler liegen? Muß man fft, ifft evtl. noch mehr Parameter übergeben? Ist aber nur ein "Schuß ins Blaue"
-
hallo fubar
ich glaube da bist du auf dem richtigen weg. was ich mittlerweile herausgefunden habe ist damit ich die sprungantwort h(t) bekomme muss ich das system um die konjugiert komplexen frequenzen erweitern. nur so liefert mir die ifft das komplexe richtige ergebniss.
das resultat sieht schon viel versprechender aus aber immer noch nicht richtig.f=logspace(0,10,N); %hier system definieren sys_p=H; %possitive frequenzen f=logspace(1,10,N); %hier system definieren sys_n=conj(H) %negative frequenzen sys=[sys_p fliplr(sys_n)]; %vektor zusammenbauen
ich kann mir vorstellen das der fehler nun noch in der abtastung liegt. bin aber noch nicht wirklich weitergekommen.
gruss tobias
-
Vielleicht hilft noch folgender Tip aus der Matlab-Hilfe:
X=fft([x zeros(1,length(y)-1)]) Y=fft([y zeros(1,length(x)-1)]) dann muß conv(x,y) gleich ifft(X.*Y) sein ...
Vielleicht kannst du so die Ergebnisse weiter überprüfen.
-
Mit ifft ist das totaler Quark und nur eine Annäherung, da du ja noch mit der Fensterfunktion faltest.
Das geht viel, viel einfacher. Aus der Laplace-Übertragungsfunktion erst einmal die Differentialgleichung ableiten. Dann die Differentialoperatoren diskretisieren. Dann nur noch auflösen nach dem Ausgang und fertig ist der rekursive Simulationsalgorithmus
-
hallo minimee
das was du geschrieben hast habe ich schon programmiert und das funktioniert auch wunderbar, war für mich auch relativ einfach zu programmieren.
nur wollte ich eben ein bisschen
tiefer in das gebiet der digitalen signalverarbeitung sehen.
aber du hast schon recht es ist nur eine annäherung, demzufolge würde ich sagen das dass ergebniss annäherungsweise stimmt (jetzt mit den konjugiert komplexen werten).gruss tobias
-
hallo
ich habe ein problem mit meiner simulation. ich versuche das im moment zu lösen wie minimee gesagt hat. als einfaches test bsp. habe ich ein rc glied, auf den eingang U0 gebe ich einen sprung.der ausgang ist U
ich habe die dgl aufgelöst: U=(U0-U)/R*dt/C nun habe ich dt diskreteisiert.
mein algoritmus schaut jetzt so aus:while t<tmax
U0=1; //eingang
U=U+(U0-U)/R*dt/C
t=t+dt
loopdas ganze habe dann noch mit runga kutta verbessern wollen. aber leider bekomme ich nicht einmal von obigem algoritmus die korekte gleichung. also die e-funktion stimmt schon aber nicht die zeitkonstante tau=R*C.
vieleicht kennt jemand eine gute seite wo eben auch ein praktische bsp. der obigen art beschrieben wird. die dgl kann dann ruhig auch höherer ordnung sein.
besten dank
tobias
-
Deine Gleichung kommt mir komisch vor.
Ich habe das mal eben selber gemacht und komme auf folgende:U(t)=(U0+U(t-dt)*R*C/dt)/(1+R*C/dt)
probiers mal damit.
-
nein die gleichung stimmt!
es funktioniert jetzt auch. sowohl mit dem euler als auch mit runge kutta verfahren. ich habe lediglich einen fehler programmiert den ich die ganze zeit nicht gesehen habe.
aber besten dank
tobias