Periodendauer von Rauschen
-
Guten Morgen!
Ich lese Daten über eine Schnittstelle auf den PC ein. Es handelt sich hier um Messwerte aus einer Spule, die das Umgebungsrauschen aufzeichnet. Diese Messung ist sehr hochfrequent und bei einer Aufzeichnungsdauer von einer Minute kommen 5 GB Messdaten zusammen.
Meine Aufgabe ist es jetzt, einen Bandfilter digital zu coden. Problematisch dabei ist, dass ich die Periodendauer des aufgezeichneten Signals nicht kenne.
Gibt es eine Methode, wie man aus Rauschwerten die Periodendauer bestimmen kann? Bzw. ist das überhaupt möglich?
PS: Meine erste Überlegung war, das gesammte Signal, also die gesamten 60 Sekunden. Als eine Periode zu definieren
danke im Voraus
-
wenn das echtes rauschen ist, dann ist es total zufällig und es gibt keine periode. 'ne periode gibts nur bei gleichförmigen schwingungen. wenn du für irgendwas (filtern etc.) eine zeit brauchst, dann musste die willkürlich festlegen ...
-
Mach doch mal ne FFT und schau Dir das Spektrum an. Vielleicht siehste gewisse Peaks und kannst das Filter dann entsprechend designen.
-
ich bin gerade dabei eine fft zu machen!
schaue mir gerade fftw an. ist sehr gut dokumentiert, dennoch werd ich nicht danz schlau daraus. viel zu kompliziert. hat jemand vielleicht eine einfachere lösung für mich?
-
Wo liegt das Problem mit fftw?
-
also. da es sich in meinem Fall um "ganz normale" spannungswerte handelt. hab ich mir mal das Beispiel: "2.3 One-Dimensional DFTs of Real Data" angesehen. Aus diesem und anderen hab ich mir dann folgenden code zusammenkopiert
double *in; fftw_complex *out; fftw_plan p; int N = 10; in = (double*) fftw_malloc(sizeof(double) * N); out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N); p = fftw_plan_dft_r2c_1d(N, in, out, FFTW_FORWARD); fftw_execute(p); /* repeat as needed */ fftw_destroy_plan(p); fftw_free(in); fftw_free(out);
mein problem dabei: Ich weiß nicht, wie ich nun meine Messwerte übergebe.
-
in muß auf die messwerte zeigen.
edit: bißchen genauer
Du hast doch deine messdaten vorliegen, vielleicht als array oder so.
Den in-Zeiger läßte auf den Anfang des Bereichs zeigen wo die messwerte liegen.N dürfte die Anzahl der messwerte sein. Die mußte halt entsprechend setzen. In out steht dann das Ergebnis der FFT.
-
das hier hat jetzt nix mehr mit Mathematik zu tun, sondern nur mit meiner Unfähigkeit C++ zu programmiren:
Ich habe nichts anderes versucht, als die Berechnung der FFT mit einem Button zu steuren.
void optionDialog::on_optionButton_clicked() { double toCompute[10]; double *in; fftw_complex *out; fftw_plan p; int N = 10; in = &toCompute[0]; for (int i = 0; i<10; i++) { toCompute[i] = i; } in = (double*) fftw_malloc(sizeof(double) * N); out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N); p = fftw_plan_dft_r2c_1d(N, in, out, FFTW_FORWARD); fftw_execute(p); /* repeat as needed */ fftw_destroy_plan(p); fftw_free(in); fftw_free(out);
Mein compiler gibt mir einen Linkererror aus:
linking ../bin/emu (g++) /home/pfu/save04042007/projekt/EMU/src/optionDialog.cpp:63: undefined reference to `fftw_malloc' /home/pfu/save04042007/projekt/EMU/src/optionDialog.cpp:64: undefined reference to `fftw_malloc' /home/pfu/save04042007/projekt/EMU/src/optionDialog.cpp:65: undefined reference to `fftw_plan_dft_r2c_1d' /home/pfu/save04042007/projekt/EMU/src/optionDialog.cpp:66: undefined reference to `fftw_execute' /home/pfu/save04042007/projekt/EMU/src/optionDialog.cpp:67: undefined reference to `fftw_destroy_plan' /home/pfu/save04042007/projekt/EMU/src/optionDialog.cpp:68: undefined reference to `fftw_free' /home/pfu/save04042007/projekt/EMU/src/optionDialog.cpp:68: undefined reference to `fftw_free' *** Exited with status: 2 ***
-
Du mußt die fftw-Library mitlinken. Gegebenenfalls mußte die vorher auch noch erstellen. Wie das geht sollte eigentlich in der Doku zu finden sein. Dein Programm kommt mir immer noch merkwürdig vor. Du setzt zwar in auf einen gewissen Speicherbereich und füllst dann da Werte ein, aber kurz bevor du die fft aufrufst setzte in doch noch auf nen frischen Speicherbereich um?
edit: wenn Du mir sagst auf welcher Plattform du arbeitest kann ich dich geeignet verschieben.
-
hallo!
ich hab die FFTW cpmpiliert, aber wie linke ich nun sie zu meinem Projekt unter Linux?
-
ich hab in meinem .pro file folgenden code dazugeschrieben:
LIBS += -lfftw3 -lm
bekomme aber noch immer den gleichen linker fehler