Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Mastermind
unregistriert
Doch wie kann ich nun genau am geschicktesten die Wellenlänge bestimmen?
mfg F-Wölkchen
Das ist mir durchaus klar. Doch ich kann mir unter Furier Trafo nichts vorstellen. Man kann wohl mit ihr das Frequenzspektrum bestimmen... doch wie das genau funktionieren soll... zu hoch für mich.Zitat
Fourier Trafo?! Wurde doch jetzt schon x mal gesagt.
Das ist mir durchaus klar. Doch ich kann mir unter Furier Trafo nichts vorstellen. Man kann wohl mit ihr das Frequenzspektrum bestimmen... doch wie das genau funktionieren soll... zu hoch für mich.Zitat
Fourier Trafo?! Wurde doch jetzt schon x mal gesagt.
Das ist mir durchaus klar. Doch ich kann mir unter Furier Trafo nichts vorstellen. Man kann wohl mit ihr das Frequenzspektrum bestimmen... doch wie das genau funktionieren soll... zu hoch für mich.Zitat
Fourier Trafo?! Wurde doch jetzt schon x mal gesagt.
Naja, also ich würds mit der FFT rechnen aber wenn dir das zu hoch ist kannst du dir auch was andres überlegen. Beispielweise könntest du die Daten eben wie beschrieben mit Median und anschließendem Mittelwert filtern und dann über finite Differenzen die "Ableitung" davon bilden. Dann suchst du dir die Nullstellen dieser Ableitung und bekommst somit die Positionen deiner Extremwerte und daraus die Wellenlänge...
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
L = length(y); N = 10; bla = zeros(1,L); for i = 1:L bla(i) = median(y(min(max((i-N):(i+N),1), L))); end bli = zeros(1,L); for i = 1:L bli(i) = mean(bla(min(max((i-N):(i+N),1), L))); end figure; subplot(2,1,1); hold on; plot(y,'g'); plot(bli,'b'); legend('original', 'median + mean'); subplot(2,1,2); f = abs(fft(y-mean(y))); plot(f(1:(length(f)/2+1))); axis([0 length(f)/2+1 0 1.2 * max(f)]); |
Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von »dot« (27.02.2011, 17:07)
Das ist mir durchaus klar. Doch ich kann mir unter Furier Trafo nichts vorstellen. Man kann wohl mit ihr das Frequenzspektrum bestimmen... doch wie das genau funktionieren soll... zu hoch für mich.Zitat
Fourier Trafo?! Wurde doch jetzt schon x mal gesagt.
Naja, also ich würds mit der FFT rechnen aber wenn dir das zu hoch ist kannst du dir auch was andres überlegen. Beispielweise könntest du die Daten eben wie beschrieben mit Median und anschließendem Mittelwert filtern und dann über finite Differenzen die "Ableitung" davon bilden. Dann suchst du dir die Nullstellen dieser Ableitung und bekommst somit die Positionen deiner Extremwerte und daraus die Wellenlänge...
Könntest du denn den Code zufäälig teilen? Vielleicht kann ich ihn ja nachvollziehen...
(Ich werde natürlich nicht wie Guttenberg das einfach übernehmen ).
Das mit der FFT zu machen wäre natürlich in meiner Facharbeit ein Knüller.
mfg F-Wölkchen
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »xardias« (27.02.2011, 17:19)
Ok. Soweit verstanden.Zitat
Zur Erklärung der Fouriertransformation. Man kann theoretisch jede Funktion als überlagerung vieler Wellen verschiedener Frequenz darstellen. Hast du eine perfekte Sinusfunktion der Frequenz f wirst du in der FFT nur einen Punkt vorfinden. Überlagerst du 2 Sinusfunktionen hast du 2 Punkte in der FFT usw. D.h. die FFT zeigt dir welche Frequenzen welchen Anteil an deiner Funktion haben. Das Maximum der FT ist dann bei der Wellenlänge/Frequenz die den größten Anteil an deiner Funktion hat und damit auch die Wellenlänge die du suchst.
Das OpenCV das hat ist natürlich genial. Doch ich bekomme es nicht zum laufen. Soweit ich verstanden habe verlangt die Funktion zwei Parameter. Einmal eine Matrix als Input und einmal als Output.Zitat
Werbeanzeige