├ťbertragungsfunktion aus realen Signalen / Matlab / Octave ?

Hallo,
Markus Greim schrieb:


doch, das mache ich andauernd so (gesetzt das / eine Komponentenweise, Komplexe Division ist). Bei Sweep muss man aber ein FFT ├╝ber die Gesamte Aufnahme machen. Das kostet m├Ąchtig Speicher und CPU. Ferner wird man pro Frequenzkanal das SNR genau betrachten m├╝ssen. Nur da wo fft(Ei) signifikant Amplitude hat, kommt auch etwas vern├╝nftiges raus. Und da hat mna bei einem Sweep das Problem, dass nat├╝rlich jede Frequenz nur kurz dran ist und die meiste Zeit sich also nur Rauschen auf diesem Frequenzkanal sammelt. Ich nehme daf├╝r f├╝r diese Messart entweder MLS-Signale oder definierte k├╝mstliche Rauschsignale die durch ifft erzeugt werden.

Sweep ist nicht so der Br├╝ller. Wenn man den Sweep in der Frequenz quantisieren k├Ânnte, w├Ąre das besser. Also N diskrete Frequenzen, die allesamt ein Vielfaches eines geeignet zu w├Ąhlenden Messintervalls sind das einer Zweierpotenz an Samples entsprechen sollte. Dann kann man folgendes machen:
Generator Messstatus ------------ ----------------------- Settle Delay Frequenz 1 ----------------------- Sample f├╝r Frequenz 1 ------------------------------------- Settle Delay Frequenz 2 ----------------------- Sample f├╝r Frequenz 2 ------------------------------------- ...
Die Sampledauer muss immer ein vielfaches der Periodizit├Ąt der zu messenden Frequenz sein. Dann berechnet man f├╝r jede Frequenz einzeln fft(Ea)/fft(Ei) nimmt aber nur den Koeffizienten des Ergebnisses, der der aktuellen Anregungsfrequenz exakt entspricht. Damit hat man so eine Art Lock-In gemacht und erreicht selbst unter r├Ąudigen Bedingungen exzellente SNRs (z.B. >60dB mit einem 8-Bit ADC in st├Ârungsreicher Umgebung). Diese Qualit├Ąt hat man nicht, wenn man die Messmethode nicht mit dem Wissen anreichert, welche Frequenz gerade gemessen wird. Mathematisch gesehen kann man sich die FFTs nat├╝rlich sparen, wenn man nur einen Koeffizienten braucht und einfach eine PCA mit einem Quadratursignal der Anregungsfrequenz machen. Das ist extrem schnell, da O(n) in CPU und O(1) im Speicher.
Theoretisch bekommt man fast genausogute Ergebnisse, wenn man einen kontinuierlichen Sweep geschickt auswertet. Aber das ist /erheblich/ mehr Aufwand und birgt Risiken, wie beispielsweise Schatten hinter Polen mit hoher G├╝te.
Marcel
Add pictures here
Ôťľ
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
Marcel M├╝ller schrieb:

D.h. m├Âglicherweise bis in den Ural...
UP
Add pictures here
Ôťľ
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
Hallo Marcel,

genau so...

MLS ist mir neu. Hab gerade etwas danach gegoogelt Wie "h├Ârt" sich denn so ein MLS Signal an? Ist das ein spezielles rauschen ? Die Frage ist ob man ein mechanisches System damit anregen kann. Mein Aktor kann nur begrenzt Energie / Zeiteinheit umsetzen.

ok, das leuchtet ein, damit vermeidet man Fenster Effekte

hast du dazu irgendeinen Literaturtipp ? Eventuell im Zusammenhang mit Matlab / Octave ?

leuchtet ein
Gr├╝├če
Markus
Add pictures here
Ôťľ
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
Hallo,
Markus Greim schrieb:

ja. Es h├Ârt sich exakt wie wei├čes Rauschen an.

Die Frage ist, welche Variable dem Signal folgt. Wenn es die Beschleunigung ist, geht das nat├╝rlich. Bei Geschwindigkeit oder gar Ort ist es Unsinn. MLS-Signale sind halt einfach zu erzeugen, haben einen Crest-Faktor von 1 und damit eine bei gegebener Maximalamplitude optimale Energiedichte. Mehr nicht. Wenn man Ortskurve eines mechanischen Systems aufpr├Ągen m├Âchte, tut man im allgemeinen sowieso gut daran, kein wei├čes Rauschen zu verwenden, sondern Rosa Rauschen oder ├Ąhnliches.
In anderen F├Ąllen nehme ich gerne periodisches Rauschen. Also im einfachsten Fall ein st├╝ck Rauschen immer wiederholen. Bei Wei├čem Rauschen funktioniert das einfach so, und man bekommt statt einem kontinuierlichen Spektrum eben ein diskretes. Im allgemeinen Fall f├Ąhrt man mit folgender Generatorfunktion f├╝r bandbreitenbegrenztes Rauschen gut:
Ei(t) = ifft( if (f element ]fmin, fmax]) then (f^kappa * exp(2*pi*i*random()) else 0 )
Das Ergebnis normalisiert man dann einfach auf ein f├╝r die Anwendung sinnvolles Eimax.
kappa=0 und fmin=0 und fmax=fNyquist gibt wei├čes Rauschen ohne Bandbreitenlimit. kappa=-1 gibt Rosa Rauschen. fmin muss dann nat├╝rlich sinvoll gesetzt werden.
Je nach Anwendungsfall kann man kappa variieren. Sinvolle Werte liegen typischerweise zwischen -1,5 und 0,5 in 0,5er Schritten.
Solange man keine systembedingte Integration oder Differentiation in der zu messenden ├ťbertragungsfunktion hat und man eine lineare Frequenzskala im Ergebnis haben will, tut man gut daran, kappa auf 0 zu lassen. F├╝r eine logarithmische Frequenzskala setzt man kappa um eins herab. Dann muss man allerdings in der Auswertung auch benachbarte Frequenzkan├Ąle im Ergebnis der FFTs zusammenfassen, so dass man effektiv Frequenzkan├Ąle ├Ąhnlicher logarithmischer Breite bekommt. Die Zusammenfassung muss sinnvollerweise durch Mittelwertbildung im Endergebnis fft(Ea)/fft(Ei) und in Amplitude und Gruppenlaufzeit erfolgen. Im Endergebnis deshalb, weil die Phasen benachbarter Kan├Ąle im Anregungssignal zuf├Ąllig, also unkorreliert sind. ├ťber die Gruppenlaufzeit deshalb, weil die Phase der ├ťbertragungsfunktion ├╝blicherweise schnell ver├Ąnderlich sein kann, wenn man es mit Latenzen zu tun hat. Die Ermittlung der Gruppenlaufzeit erfordert alledings ein Phase-Unrolling. Wenn die Frequenzst├╝tzpunkte dicht genug liegen, kann man einfach die in Polarkoordinaten (Ammplitude, Phase) k├╝rzere Entfernung nehmen. Gr├Â├čere Latenzen sollte man zuvor per Multiplikation mit exp(2*pi*i*f*linearshift) kompensieren. Theoretisch kann man linearshift per Least-Square-FIT bestimmen, aber das ist wegen der Zahlreichen lokalen Minima ziemlich instabil. Schneller geht es mit der Hand und typischerweise ist es sowieso eine Konstante des Messaufbaus. Genau stimmen muss der Wert ohnehin nicht, da es keinen unmittelbaren Einfluss auf das Ergebnis gibt.

Ja, die Fenstereffekte werden genau dann vermieden, wenn das Anregungssignal in einer festen (aber unbekannten) Phasenbeziehung zu den aufgenommenen Ei- und Ea-Signalen steht und die FFTs f├╝r Testsignalgenerierung und Analyse gleich lang sind. Dazu m├╝ssen die Sampleratengeneratoren der Ein- und Ausg├Ąnge aus demselben Quarz synchronisiert werden. Das Kriterium erf├╝llen gl├╝cklicherweise die allermeisten Messkarten und selbst billigste Soundkarten. Ich w├╝re Ei auch immer nochmal mit aufzeichen und ausschlie├člich dieses Signal zur Auswertung verwenden. Damit sind jegliche Latenz- und Dreckeffekte der Messkarten und auch des Aktors weitestgehend kompensiert (typisch -50dB), und man ist nur noch sensitiv auf die Differenzen zwischen den beiden (hoffentlich baugleichen) Aufnehmern.

Nein, sorry. Ich habe mir sowohl das Verfahren als auch die Software selber zusammengepuzzelt. Die Auswertung mache ich einfach mit zwei kleinen C-Programmen. Eines liefert das Testsignal an stdout, was ich dann per Pipe an das PCM-Sounddevice schicke. Das andere bekommt Ea und Ei von PCM-Device (Line-In, Stereo) an stdin und f├╝hrt die notwendigen Berechnungen durch, schreibt nach jedem FFT-Zyklus (bei mir zwischen 65536 und 262144 Samples) ein Ergebnisfile mit der ├ťbertragungsfunktion und gibt ├╝ber stdout das Visualisierungskommando an gnuplot. Optional mittle ich ├╝ber alle bisher gemessenen Perioden. Die Mittelung findet allerdings auf den rohen Samples statt, da alle Nutzsignalanteile notwendigerweise periodisch sind.
Im (stufenweisen) Sweepmodus synchronisiere ich einmal am Anfang mit einem Testsignal mit Phasensprung und z├Ąhle ab da in beiden Programmen parallel die Samples um die verschiedenen Frequenzschritte hinter sich zu bringen. Die Messung kann dann bis zu einer Dreiviertelstunde alleine laufen. Sweep ist hochpr├Ązise aber langsam. Mit Rauschen hat man meist schon nach einigen Sekunden die ersten brauchbaren Ergebnisse. H├╝ten sollte man sich vor der Rauschmessung, wenn man mit Nichtlinearit├Ąten rechnet oder ohnehin Probleme mit dem SNR hat.
Ich mache auf die Weise unter anderem auch Audiomessungen von Lautsprechern. Im Sweepmodus kann man problemlos im Garten mit ordentlicher Ger├Ąuschkulisse messen - upfire und schr├Ąg neben der Hausecke versteht sich, damit nichts zur├╝ck kommt. Die Ergebnisse passen exakt ├╝ber die Messkurven professioneller Labors mit schalltoten R├Ąumen und sind meist sogar weniger verrauscht und reicher an St├╝tzpunkten. Aber genausogut kann man auf die Tour andere Netzwerkanalysen (Zweipol und Vierpol) machen oder ein pr├Ązises LCR-Meter (bei moderaten Frequenzen) basteln. Mit einem DSO kann man auch in gehobene Frequenzbereiche vordringen. Manche davon beherrschen sogar die notwendigen Auswertungsschritte FFT Amplitude, FFT Phase, Amplitudenquotient und Phasendifferenz on the fly. Allerdings ist es nicht trivial, ein synchrones Testsignal zu bekommen, das selbst professionelle DSOs meines Wissens den Wandlertakt nicht rausr├╝cken.
Marcel
Add pictures here
Ôťľ
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
Hallo Marcel,

dass w├Ąre mal einen Versuch wert..

soweit verstanden...
Die

Latenzen hab ich eher nicht (denk ich ;-)) Die Ermittlung der Gruppenlaufzeit erfordert alledings ein

gut
Danke f├╝r die vielen Tipps. Es scheint tats├Ąchlich nichts "von der Stange" zu geben. Eigentlich unverst├Ąndlich. Das sollte ja eigentlich eine elementare Ingenieursaufgabe sein, Das man da 60 Jahre nach Shannon noch bei Adam und Eva anfangen mus ist ziemlich frustrierend..
Gr├╝├če
Markus
Add pictures here
Ôťľ
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
Hallo Markus,
Markus Greim schrieb:

als Alternative zu den anderen Vorschl├Ągen h├Ątte ich hier noch einen, der mir bei dem Thema Echokompensation aufgefallen ist, das mir gerade wieder ├╝ber den Weg gelaufen ist. Dabei geht es um Freisprechen z.B. beim Telefon, um eine R├╝ckkopplung des ankommenden Signals zu verhindern. Dazu wird ein adaptives Filter ben├Âtigt, das die ├ťbertragungsfunktion des unerw├╝nschten Pfades m├Âglichst exakt nachbildet und die R├╝ckkopplung unterdr├╝ckt:
http://en.wikipedia.org/wiki/Least_mean_squares_filter
Was dort als adaptives Filter bezeichnet wird, ist mir in Form eines FIR-Filters bekannt, dessen Koeffizienten durch eine Rekursion, eben die least mean square-Methode, berechnet wird. Wenn man ein lineares System ohne interference betrachtet, so ist diese Rekursion recht einfach durchzuf├╝hren.
Damit sich die Koeffizienten richtig einstellen, mu├č wohl das Eingangssignal x(n) alle Spektralanteile enthalten denke ich, also k├Ąme ein Sinussweep in Frage. Gemessen w├╝rde y(n) werden, und zwar _zeitgleich_ zu x(n). Wie gut und schnell das konvergiert und ob es daf├╝r brauchbar ist, kann ich allerdings nicht sagen.
Mal angenommen, es konvergiert gut, dann ist ein Koeffizientensatz des (m├Âglichst langen) FIR-Filters bekannt, der ja nichts weiter als die diskrete Impulsantwort des unbekannten Systems darstellt. Eigentlich m├╝├čte IMHO die Fouriertransformierte der FIR-Koeffizienten dann die komplexe ├ťbertragungsfunktion sein. Die Aufl├Âsung im Frequenzbereich entspr├Ąche dann der (aus Symmetriegr├╝nden halben?) L├Ąnge des FIR-Filters.
Ob das Verfahren so brauchbar ist, k├Ânnte man in Matlab oder jeder beliebigen Programmiersprache testen, vielleicht erstmal an einem ganz einfachen bekannten System. Man erzeugt einfach den Datensatz f├╝r x(n), y(n), der der Messung entspr├Ąche und l├Ą├čt damit die Rekursion durchlaufen, evtl. mehrmals. Wenn das Fehlersignal e(n)=0 wird, sieht es gut aus, denn dann mu├č das Filter ja stimmen. So sieht der Koeffizientenupdate aus:
e(k)^2=[y(k)-ye(k)]^2 Definition des Fehlerquadrats
x(k)=gemessenes Eingangssignal zum Zeitpunkt k y(k)= gemessenes Ausganggsignal des unbekannten Systems ye(k)=Ausgangssignal des adaptiven Filters e(k)=y(k)-ye(k)= Fehlersignal
FIR Koeffizientenupdate: Ci(k+1)=Ci(k)+u(k)*e(k)*x(k-i) 0<=u(k)<=2
Mit u(k) wird die R├╝ckkopplung der Rekursion eingestellt, w├Ąre experimentell zu ermitteln. Den Index i mu├č ich nachschauen, wo der anf├Ąngt und wie das FIR-Filter damit definiert ist.
mfg. Winfried
Add pictures here
Ôťľ
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
Hallo Winfried,

ich denke das l├Ąuft so unter dem Oberbegriff Spektralsch├Ątzung.. Ich habe in den letzten Tagen noch etwas weiter recherchiert und bin auf eine sch├Âne Ver├Âffentlichung u. Software gesto├čen die auch aus diesem Eck (Sprach Spektrogramme etc) kommt:
Time Frequency Toolbox for use with Matlab
von Auger, Flandrin, Goncalves u. Lemoine CNRS Frankreich u. Rice Univ. USA, 1995-1999
Das Tutorial findet man unter: http://tftb.nongnu.org/tutorial.pdf
und die Software und Homepage unter: http://tftb.nongnu.org /
Das ganze l├Ąuft unter dem Oberbegriff: "Analysis of non stationary signals using time frequency distributions"
weitere Stichworte sind: Wigner-Ville disribution, Short time fft, continous wavelet transformation...
Ich kann noch nicht endg├╝ltig sagen ob ich mit diesen Werkzeugen mein Problem l├Âsen kann, es schaut aber bis jetzt sehr gut aus. Unabh├Ąngig davon ist das Tutorial unbedingt lesens- und und die Software (die auch unter Octave l├Ąuft) ausprobierenswert!
Danke soweit f. die vielen Anregungen.
Gr├╝├če
Markus Greim
Add pictures here
Ôťľ
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload
Hallo Markus,
Markus Greim schrieb: [.....]

der Index i m├╝├čte IMHO bei 0 anfangen und bis zum letzten FIR-Koeffizienten gehen. Mir ist noch eingefallen, da├č das FIR-Filter ja eine Laufzeit hat, die im unbekannten System nicht vorhanden sein mu├č, wenn es keine Strecke mit ausschlie├člichem Echo ist. Dazu m├╝├čte man wohl eine Laufzeit als Ausgleich zum FIR in die Strecke legen. Diese bekannte Laufzeit kann man dann hinterher wieder rausrechnen.
Bei uns wurde diese Echokompensation mal in der Praxis getestet, dabei konvergierte es bei Rauschen gut und bei Sprache weniger gut. Dabei ging es aber wirklich nur um Echos, ob das Ganze auch bei beliebigen Frequenzg├Ąngen konvergiert, kann ich nicht sagen, w├Ąre zu testen. Von der Plausibilit├Ąt her scheint mir der Laufzeitausgleich zwingend zu sein, da FIR-Filter immer laufzeitbehaftet sind im Vergleich zu IIR-Filtern. Der Vorteil dieses Verfahrens, wenn es funktioniert, w├Ąre die extreme Einfachheit.

Ich habe es mir mal runtergeladen, vielen Dank. Mit der Thematik Wavelet habe ich mich noch nicht besch├Ąftigt, sieht sehr theoretisch aus. Eigentlich m├╝├čten die Leute aus der Theorie der Regelungstechnik was dazu wissen, denn das m├╝├čte ja deren Job sein, also die Erkennung eines Systems.

Viel Erfolg! Vielleicht spiele ich auch mal damit herum, wenn ich Lust und Zeit habe.
mfg. Winfried
Add pictures here
Ôťľ
<% if( /^image/.test(type) ){ %>
<% } %>
<%-name%>
Add image file
Upload

Polytechforum.com is a website by engineers for engineers. It is not affiliated with any of manufacturers or vendors discussed here. All logos and trade names are the property of their respective owners.