- Mitglied seit
- 06.10.2001
- Beiträge
- 598
- Reaktionen
- 0
Hi,
stehe grade leider irgendwie aufm Schlauch!
folgendes Szenario:
I ist die Einheitsmatrix
F die DFT-Matrix: 1/wurzel(N)*exp(-2*pi*k*i/N) mit k,i = 0,...,N-1
nun sei I eine 4x4 Einheitsmatrix;
und für F sei N = 1200;
D ist das Kroneckerprodukt von I und F
Soweit alles klar? Hoffe das geht ohne Latex-Code
jetzt hab ich 4 mal ein z, z1, z2, z3, z4 (im Beispiel-Code ist es a1 bis a4)
diese z haben verschiedene Werte!
z1 bis z4 ist ein Spaltenvektor mit der Länge 1200, also N
y seien nun die hintereinandergereihten z
y ist also ein Spaltenvektor mit der Länge 4800
Jetzt wird folgendes ausgerechnet:
ŷ=D*y
Meine eigentliche Frage ist:
Kann ich diese Prozedur vereinfachen, schneller machen in Matlab?
Meine Idee ist, von den 4 z jeweils die FFT zu berechnen und aus den 4 FFT-Vektoren dann den ŷ zu erstellen, also einfach die Vektoren wieder hintereinanderreihen.
Habe mal mit Matlab einfach die Differenz der beiden Varianten gebildet (ohne Betrag, ist das richtig?). Es kommt nicht 0 raus, allerdings 10^(-14) als Vorfaktor der Werte, also nahe 0. Eventuell Nummerische Fehler von Matlab? Oder hab ich einfach nur "Glück" dass es fast 0 ist?
Hier mal ein Beispiel im Matlab-Code:
a1=rand(100,1)*20;
a2=rand(100,1)*550;
a3=rand(100,1)*5;
a4=rand(100,1)*14;
kron(sparse(eye(4)),fft(eye(100).*1/sqrt(100)))*[a1' a2' a3' a4']'
-
1/sqrt(100)*[fft(a1); fft(a2); fft(a3); fft(a4);]
Hab das mal bewusst so auseinander geschrieben (mit dem Minus). Sparse benutzt nur die Werte die nicht 0 sind, gibt schonmal sehr viel an Rechengeschwindigkeit.
Hoffe das ist so verständlich ausgedrückt, falls nicht werde ich wohl mal für alles Formeln in Latex erstellen müssen
stehe grade leider irgendwie aufm Schlauch!
folgendes Szenario:
I ist die Einheitsmatrix
F die DFT-Matrix: 1/wurzel(N)*exp(-2*pi*k*i/N) mit k,i = 0,...,N-1
nun sei I eine 4x4 Einheitsmatrix;
und für F sei N = 1200;
D ist das Kroneckerprodukt von I und F
Soweit alles klar? Hoffe das geht ohne Latex-Code
jetzt hab ich 4 mal ein z, z1, z2, z3, z4 (im Beispiel-Code ist es a1 bis a4)
diese z haben verschiedene Werte!
z1 bis z4 ist ein Spaltenvektor mit der Länge 1200, also N
y seien nun die hintereinandergereihten z
y ist also ein Spaltenvektor mit der Länge 4800
Jetzt wird folgendes ausgerechnet:
ŷ=D*y
Meine eigentliche Frage ist:
Kann ich diese Prozedur vereinfachen, schneller machen in Matlab?
Meine Idee ist, von den 4 z jeweils die FFT zu berechnen und aus den 4 FFT-Vektoren dann den ŷ zu erstellen, also einfach die Vektoren wieder hintereinanderreihen.
Habe mal mit Matlab einfach die Differenz der beiden Varianten gebildet (ohne Betrag, ist das richtig?). Es kommt nicht 0 raus, allerdings 10^(-14) als Vorfaktor der Werte, also nahe 0. Eventuell Nummerische Fehler von Matlab? Oder hab ich einfach nur "Glück" dass es fast 0 ist?
Hier mal ein Beispiel im Matlab-Code:
a1=rand(100,1)*20;
a2=rand(100,1)*550;
a3=rand(100,1)*5;
a4=rand(100,1)*14;
kron(sparse(eye(4)),fft(eye(100).*1/sqrt(100)))*[a1' a2' a3' a4']'
-
1/sqrt(100)*[fft(a1); fft(a2); fft(a3); fft(a4);]
Hab das mal bewusst so auseinander geschrieben (mit dem Minus). Sparse benutzt nur die Werte die nicht 0 sind, gibt schonmal sehr viel an Rechengeschwindigkeit.
Hoffe das ist so verständlich ausgedrückt, falls nicht werde ich wohl mal für alles Formeln in Latex erstellen müssen
