Forum: Digitale Signalverarbeitung / DSP / Machine Learning Faltung im Zeitbereich vs Multiplikation im Frequenzbereich: Faktorfehler


von Frank Roggel (Gast)


Lesenswert?

Hallo zusammen,

man nehme ein Signal mit den folgenden 4 Werten:
1 ; 0 ; 0 ; 0

Das komplexe Spektrum dieses Signals sieht so aus:
1/4 ; 1/4 ; 1/4 ; 1/4


Wenn ich dieses Signal in der Zeitebene mit sich selbst falte, kommt 
folgendes raus:
1 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0

Das komplexe Spektrum des Ergebnis sieht so aus:
1/7 ; 1/7 ; 1/7 ; 1/7 ; 1/7 ; 1/7 ; 1/7

So weit, so gut.

Was ich jetzt nicht verstehe:
Es heißt, die Faltung im Zeitbereich entspricht der Multiplikation im 
Frequenzbereich.
Wenn ich aber die beiden Spektren multipliziere (also die 
korrespondierenden Werte der beiden Spektren multipliziere), kommt 
folgendes Spektrum raus:
1/16 ; 1/16 ; 1/16 ; 1/16

Das Signal im Zeitbereich sieht dann aus:
1/4 ; 0 ; 0 ;0

Es ist also um den Faktor 4 (Anzahl der Samples) zu klein.

Wo kommt dieser Faktor her?

von Meety (Gast)


Lesenswert?

Frank Roggel schrieb:
> 1/4 ; 1/4 ; 1/4 ; 1/4

Wieso?

von Reinhard M. (Gast)


Lesenswert?

Hab gerade Octave offen.
Und dieses Tool sagt was anderes:
1
>> % Zeitbereich
2
>> S = [ 1 0 0 0];
3
>> C = conv(S,S)  % Faltung
4
C =
5
6
   1   0   0   0   0   0   0
7
8
>> % Frequenzbereich
9
>> F = fft(S)
10
F =
11
12
   1   1   1   1
13
14
>> D = F .* F   % Multiplikation
15
D =
16
17
   1   1   1   1
18
19
>> Y = ifft(D)
20
Y =
21
22
   1   0   0   0

von Frank Roggel (Gast)


Lesenswert?

Wie ich auf 1/4 komme:
1
x[i] =  c0 * cos(2*PI*f0*i/N) + s0 * sin(2*PI*f0*i/N) 
2
     +  c1 * cos(2*PI*f1*i/N) + s1 * sin(2*PI*f1*i/N) 
3
     +  c2 * cos(2*PI*f2*i/N) + s2 * sin(2*PI*f2*i/N) 
4
     +  c3 * cos(2*PI*f3*i/N) + s3 * sin(2*PI*f3*i/N)  
5
6
7
x[0] =  c0 * cos(2*PI*f0*0/N) + s0 * sin(2*PI*f0*0/N) 
8
     +  c1 * cos(2*PI*f1*0/N) + s1 * sin(2*PI*f1*0/N) 
9
     +  c2 * cos(2*PI*f2*0/N) + s2 * sin(2*PI*f2*0/N) 
10
     +  c3 * cos(2*PI*f3*0/N) + s3 * sin(2*PI*f3*0/N) 
11
12
     = 1/4 * 1                +      0
13
     + 1/4 * 1                +      0
14
     + 1/4 * 1                +      0
15
     + 1/4 * 1                +      0
16
17
     = 1


Wenn ich für die c0 bis c1 jeweils 1 einsetze, komme ich auf x[0] = 4

von Jan K. (jan_k)


Lesenswert?

Ich verstehe deine Rechnung nicht.

Die diskrete Fouriertransformation lautet
x_n sei dabei der n-te Wert deines Eingangssignales (also x = 
[x0,x1,x2,x3]). Du möchtest X_0:

von Kai S. (kai1986)


Lesenswert?

Hallo,

bei den Vorfaktoren der Transformation treibt jeder Teilbereich was er 
gerade für besonders praktisch hält (Mathematik, Physik, E-Technik, 
Informatik). Die  meisten Softwarepakete haben dafür sogar extra Modi, 
die gewählt werden können, wobei der default Modi nicht einheitlich ist, 
sondern von der "Hauptnutzergruppe" der Software abhängt.
Die Zahlen passen da nur bei der mathematisch sauberen Transformation 
zusammen (die aber keiner außerhalb der Mathematik so verwendet, da sie 
oft nur Rechenleistung kostet und bei der Rücktransformation eh wieder 
verschwindet). Das "Geschlampe" an der Stelle wird gerne durch 
Normierung "weggemogelt".

Gruß Kai

von Jan K. (jan_k)


Lesenswert?

Dass bei der Normierung rumgeschlampt wird gebe ich dir gerne recht :) 
Aber das oben ist kein Fehler der Normierung (durch N oder durch sqrt(N) 
etc), sondern die Koeffizienten in den Summen sind schlicht falsch.
Das wird spätestens bei X_1 klar, das 0 ist und nach Rechnung des OP 
1/4. Das kann nicht durch einen Normierungsfehler (oder sagen wir durch 
eine andere Konvention) passieren.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.