Seite 1 von 1

Fourieranalyse zur Betrachtung des Frequenzbereichs

Verfasst: So Jul 29, 2018 10:43 pm
von Marge
Guten Abend zusammen,

ich habe einige Daten, von denen ich den Frequenzbereich ermitteln möchte. Die folgende Funktion habe ich dafür gefunden, der Code funktioniert soweit auch.

Code: Alles auswählen

d <- c(-0.538, -0.785, -1.123, -1.062, -1.031, -0.877, -0.846, -0.846, -0.877,-0.692,-0.508,-0.508,-0.538,-0.569,-0.538,-0.508,-0.600,-0.754,
-0.815,-0.877,-1.000,-1.062,-1.092,-1.123,-1.123,-1.369,-1.585,-1.154,-1.000,-1.062,-1.031,-1.092,-0.969,-0.938,-1.000,-0.938,-0.877,-0.723,
-0.538,-0.385,-0.415,-0.415,-0.600,-0.446,-0.477,-0.600,-0.785,-0.877,-1.000,-1.215,-1.369,-1.369,-1.369,-1.277,-1.862,-1.400,-0.938,-0.662,
-0.815,-1.215,-1.062,-1.062,-0.846,-0.846,-0.908,-0.723,-0.508,-0.385,-0.477,-0.508,-0.508,-0.477,-0.508,-0.569,-0.754,-0.969,-1.092,-1.092)

e <- c(0.344,0.313,0.313,0.219,0.063,0.000,-0.031,-0.094,-0.063,0.000,0.031,0.156,0.094,0.156,0.125,0.156,0.313,0.719,0.500,0.438,0.156, 0.125,0.031,-0.031,0.156,0.469,0.469,0.344,0.219,0.094,0.125,0.281,0.219,0.219,0.344,0.281,0.281,0.219,0.031,0.063,0.188,0.313,0.375,0.313,
0.219,0.063,0.094,0.219,0.406,0.594,0.500,0.313,0.344,0.281,0.219,0.281,0.281,0.281,0.250,0.063,0.063,0.000,-0.031,0.000,0.000,0.094,0.094,
0.125,0.219,0.313,0.344,0.563,0.500,0.094,-0.125,0.125,0.594,0.219)

res <- sqrt(d^2 + e^2)

xraw.spec <- spec.pgram(res, taper = 0)
plot(xraw.spec, log = "no")
Allerdings frage ich mich, ob das der richtige Ansatz ist und wenn ja, was genau mir die Plots zeigen. Brauche ich überhaupt beide Plots oder reicht der erste? Und was bedeutet der senkrechte blaue Strich am rechten Rand des ersten Plots - der Mittelwert?

Vielen Dank vorab für die Hilfe
Marge

Re: Fourieranalyse zur Betrachtung des Frequenzbereichs

Verfasst: Do Aug 02, 2018 1:45 pm
von jogo
Hallo Marge,

Dein Code läuft soweit, aber bei mir erzeugt er nur einen Plot, welcher keinen blauen Strich enthält.

Gruß, Jörg

Re: Fourieranalyse zur Betrachtung des Frequenzbereichs

Verfasst: Fr Aug 03, 2018 9:15 am
von bigben
Hallo Jörg,

nein, der Code erzeugt zwei Plots hintereinander.

Code: Alles auswählen

xraw.spec <- spec.pgram(res, taper = 0)
erzeugt einen Plot in dem am rechten Bildrand in Blau irgendwie ein Intervall und ein Punkt in dem Intervall markiert wird. Ich denke, das ist gemeint.

LG,
Bernhard

Re: Fourieranalyse zur Betrachtung des Frequenzbereichs

Verfasst: Fr Aug 03, 2018 9:21 am
von jogo
Hallo Bernhard,

ah ja, jetzt sehe ich es auch. Es (das Erscheinen des blauen Strichs) betrifft den ersten Plot.
Da hilft vielleicht nur ein Abtauchen in den Quelltext der plot-Funktion.

Gruß, Jörg

Re: Fourieranalyse zur Betrachtung des Frequenzbereichs

Verfasst: Fr Aug 03, 2018 11:54 am
von bigben
jogo hat geschrieben:
Fr Aug 03, 2018 9:21 am
Da hilft vielleicht nur ein Abtauchen in den Quelltext der plot-Funktion.
Dann oute ich mich mal als zu blöd dafür. In der Funktion heißt es

Code: Alles auswählen

    spg.out <- list(freq = freq, spec = spec, coh = coh, phase = phase, 
        kernel = kernel, df = df, bandwidth = bandwidth, n.used = N, 
        [...]) # Auslassung von bigben
    class(spg.out) <- "spec"
    if (plot) {
        plot(spg.out, ...)
spg.out ist eine Liste, der die Klasse "spec" zugewiesen wird. Müsste der Aufruf von plot(spg.out) dann nicht zu einer Funktion plot.spec() oder so ähnlich führen? Ich erinnere mich, dass ich das mit den Klassen und den generishcen Funktionen mal genauer gewusst habe, aber irgendwie ist das alles wieder weg.

LG,
Bernhard

Re: Fourieranalyse zur Betrachtung des Frequenzbereichs

Verfasst: Fr Aug 03, 2018 3:54 pm
von jogo
Hallo Bernhard,
bigben hat geschrieben:
Fr Aug 03, 2018 11:54 am
jogo hat geschrieben:
Fr Aug 03, 2018 9:21 am
Da hilft vielleicht nur ein Abtauchen in den Quelltext der plot-Funktion.
Dann oute ich mich mal als zu blöd dafür. In der Funktion heißt es

Code: Alles auswählen

    spg.out <- list(freq = freq, spec = spec, coh = coh, phase = phase, 
        kernel = kernel, df = df, bandwidth = bandwidth, n.used = N, 
        [...]) # Auslassung von bigben
    class(spg.out) <- "spec"
    if (plot) {
        plot(spg.out, ...)
spg.out ist eine Liste, der die Klasse "spec" zugewiesen wird. Müsste der Aufruf von plot(spg.out) dann nicht zu einer Funktion plot.spec() oder so ähnlich führen?
richtig, und so wird es auch gemacht, siehe:

Code: Alles auswählen

method(plot)
Das Problem ist "nur", dass plot.spec() eine unsichtbare Funktion ist (dafür steht das Sternchen als Kennzeichen).
siehe auch

Code: Alles auswählen

P <- methods(plot)
str(P) ## bzw.:
unclass(P)
Ich erinnere mich, dass ich das mit den Klassen und den generischen Funktionen mal genauer gewusst habe, aber irgendwie ist das alles wieder weg.
war schon richtig, aber hier hilft nur:
https://stackoverflow.com/questions/192 ... a-function

Gruß, Jörg
p.s.:
Tolle Lektüre: https://stackoverflow.com/questions/tagged/r?sort=votes

Re: Fourieranalyse zur Betrachtung des Frequenzbereichs

Verfasst: Fr Aug 03, 2018 4:09 pm
von bigben
Super, jogo, dann hatte ich ein wenig richtig im Kopf und den Rest aber nicht mehr. Es ist alsop überhaupt nicht banal, in diesem Code nachzusehen. Manchmal denke ich, wir bräuchten eine Qualitätsoffensive für help-pages in R. Wenn eine Funktion was blaues malt, dann sollte auch in der Help-Page stehen, was das ist, und wie man das wegmacht. Außerdem sollten alle Packages ohne Vignette abgewertet werden. Na gut,

Vielen Danke für die Erklärung.
LG,
Bernhard