Fourieranalyse eines Signals

#4243687
Lesenswert?

Hallo!

Ich habe ein Spannungssignal über einem Winkel vorliegen, welches sich 
2pi-periodisch wiederholt (signal_2pi.jpg) und habe davon 
Fourierkoeffizienten berechnet (fourier_signal_2pi.jpg), soweit so gut.

Nun möchte ich von diesem Signal nur ein Sechstel von 2pi betrachten 
(signal_2pi_6tel.jpg) und von diesem Teilstück ebenfalls die 
Fourierkoeff. berechnen. Ich hab das auch gemacht, aber es scheint etwas 
mit dem Spektrum nicht zu stimmen (fourier_signal_2pi_6tel.jpg).

Berechnet wurden die Fourierkoeffizienten folgendermaßen:

https://de.wikipedia.org/wiki/Fourierreihe#Darstellung_in_Sinus-Kosinus-Form

Fällt jemand ad hoc ein, was da nicht stimmen könnte?
#4243817
Lesenswert?

Es wird natürlich jeweils die selbe Funktion zur Berechnung des 
Spektrums verwendet, und zwar folgende (Matlab):
1
function [a0 ck] = fouriercoe(os, x_werte, y_werte)
2
    
3
    signal_period = max(x_werte)-min(x_werte);
4

5
    a0 = ...
6
            2/signal_period ...                      
7
            * trapz(    x_werte, ...              
8
                        y_werte); 
9
    
10
    ck = [];
11

12
    for k = 1:os
13
    ak = ...
14
            2/signal_period ...
15
            * trapz(    x_werte, ...              
16
                        y_werte ...
17
                        .* cos(k * x_werte));
18
    bk = ...
19
            2/signal_period ...
20
            * trapz(    x_werte, ...              
21
                        y_werte ...
22
                        .* sin(k * x_werte));
23

24
    ck = [ck (ak+1i*bk)];
25
    end    
26
end
Gast #4243917
Lesenswert?

@Frank: Daran liegts nicht. Hier wird eine Fourier Reihe von einem 
ungefähren Sinussignal über ziemlich genau die Periode des Sinus 
berechnet. Das ideale Spektrum müsste zumindest grob erkennbar sein. (So 
wie bei dem Spektrum mit der 2pi Periode). Hier ist es aber komplett 
anders. Ich denke, dass bei der Parameterübergabe etwas nicht stimmt.
#4244243
Lesenswert?

Der Grund, warum ich nicht die DFT von Matlab nehmen kann ist, dass 
Spannung und Winkel über der Zeit aufgenommen werden, dargestellt und 
verarbeitet wird das Signal aber über den Winkel, wodurch die Samples 
nicht mehr ganz äquidistant sind...

Hier der Funktionsaufruf mit einem Signal aus der Retorte (in echt sind 
das  Messdaten), da jedoch das gleiche rauskommt sollte es aber auch 
passen (bzw. halt irgendwas nicht passen):
1
x_werte = 0:(2*pi/6)/514:2*pi/6;
2
y_werte = sin(x_werte*6);
3
[ao ck] = fouriercoeffs(60,x_werte,y_werte);
#4244261
Lesenswert?

Hallo ihr Fourier Spezies, gibt es ein Programm wo man nur die 
Frequenzen eingibt und das Programm dann entsprechende Berechnungen 
durchführt, die dann in C-Code übernommen werden können?

Ich habe leider nur Fachoberschulreife und das übersteigt meine 
mathematischen Fähigkeiten. Leider kann mein Sohn mir auch nicht mehr 
helfen.

Es geht eigentlich nur darum, bestimmte Frequenzen heraus zu rechnen, 
also um digitale Filter (Gehörschutz).

Will hier auch nicht den Thread kapern und bin dann gleich wieder weg.

Danke!
#4244277
Lesenswert?

Dumdi D. schrieb:
> ist das das funktionierende oder das nicht funktionierende Signal. bei
> den wenigen Infomationwn tippe ich mal, das Du die falschen k Werte
> nimmst (durch N teilen?) und so den Peak verpasst.

Das nicht funktionierende, siehe x_werte, die ich nur bis 2*pi/6 laufen 
hab lassen.
Wie meinst du das genau, die k-Werte müssen doch ganzzahlig sein, oder?

Student schrieb:
> Seit wann ist Fourieranalyse denn bei nicht-äquidistanter Abtastung
> möglich?

http://de.mathworks.com/help/signal/examples/spectral-analysis-of-nonuniformly-sampled-signals.html
Gast #4244281
Lesenswert?

So H. schrieb:
> Der Grund, warum ich nicht die DFT von Matlab nehmen kann ist, dass
> Spannung und Winkel über der Zeit aufgenommen werden, dargestellt und
> verarbeitet wird das Signal aber über den Winkel, wodurch die Samples
> nicht mehr ganz äquidistant sind...

Du könntest dir Test halber mal äquidistante Punkte rechnen in damit die 
FFT füttern.

F. F. schrieb:
> Will hier auch nicht den Thread kapern und bin dann gleich wieder weg.

Dann mach es auch nicht ;-)
Mach einen anderen Artikel auf.
Nebenbei verbessere noch (im neuen Artikel) die Beschreibung.
Ich hab nicht kapiert was du willst.
#4244305
Lesenswert?

Frank schrieb:
> Du könntest dir Test halber mal äquidistante Punkte rechnen in damit die
> FFT füttern.

Anbei mein Testsignal, welches nicht funktioniert (eingangssignal.jpg) 
und daraus die berechneten Spektren, einmal mit der Funktion 
fouriercoeffs.m berechnet (spektrum_eigenbau_fourier.jpg) und einmal mit 
der Funktion fft() berechnet (spektrum_fft.jpg), sowie nachfolgend der 
Code:
1
x_werte = 0:(2*pi/6)/514:2*pi/6;
2
y_werte = sin(x_werte*6);
3

4
figure(1)
5
plot(x_werte,y_werte)
6
grid on;
7

8
n_fourier = length(y_werte)
9

10
[ao ck_cum] = fouriercoeffs(n_fourier,x_werte,y_werte);
11

12
figure(2)
13
plot(abs(ck_cum))
14
grid on;
15

16
NFFT=n_fourier;
17
figure(3)
18
y_fft = fft(y_werte);
19
plot(abs(y_fft(1:NFFT/2)*2/NFFT));
20
grid on

So richtig schlau werd ich daraus aber nicht wirklich...
Angehängte Dateien:
#4244381
Lesenswert?

Die Spektren wurden jeweils mit 514 Punkten berechnet.

Es sieht irgendwie so aus, als ob die Funktion fouriercoeffs.m mit 
Ausschnitten die kürzer sind als 2*pi nicht umgehen kann, vielfache von 
2*pi sind keine Problem, d.h. ich kann 100 2*pi-Perioden reinschicken, 
und das Spektrum ändert sich (wie erwartet) nicht, aber bei Bruchteilen 
von 2*pi ists vorbei.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren