|
|
Manuelle Programmierung Schnelle Fourier-Transformation FFT |
|
tobi249 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 25.05.2022, 08:53
Titel: Manuelle Programmierung Schnelle Fourier-Transformation FFT
|
|
|
|
|
Guten Morgen,
ich möchte in Matlab die Schnelle Fourier-Transformation (FFT) einer 3x3-Matrix berechnen, und zwar manuell ohne den fft-Befehl. Dies funktioniert auch, ist jedoch bereits für eine 3x3-Matrix sehr aufwendig, weil ich bislang 3 for-Schleifen untereinander brauche. Ich möchte, dass der Code später für eine größere Matrixdimension erweitert werden kann (bspw. 50x50), daher hier meine Frage, wie ich den folgenden Code weiter automatisieren kann:
y = [1 2 3; 4 5 6; 7 8 9]; % Meine Ausgangsmatrix
Z = reshape(y,numel(y),1); % Spaltenvektor aus y erstellen
N = length(y);
for k=1:3
Z(k)=0;
for n=1:3
Z(k)=Z(k)+y(n)*exp(-1i*2*pi*(k-1)*(n-1)/N);
end
end
for k=4:6
Z(k)=0;
for n=4:6
Z(k)=Z(k)+y(n)*exp(-1i*2*pi*(k-1)*(n-1)/N);
end
end
for k=7:9
Z(k)=0;
for n=7:9
Z(k)=Z(k)+y(n)*exp(-1i*2*pi*(k-1)*(n-1)/N);
end
end
Z = reshape(Z,3,3); % Die Ergebnisse aus den 3 for-Schleifen untereinander wieder in eine 3x3-Matrix schreiben
Dieser Code funktioniert zwar (geprüft mit fft(y) für unterschiedliche Ausgangsmatrizen), ist aber zu aufwendig, um ihn auf bspw. 50x50 zu erweitern. Weiß jemand einen Rat?
Vielen Dank!
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 25.05.2022, 13:58
Titel:
|
|
Hallo,
warum programmierst du fft denn überhaupt nach?
Was sicher hilft, ist Vektorisierung und Summierung mit
sum
. Das ist allerdings eher mühsam, wenn der Code schon mit for-Schleifen geschrieben wurde. Einfacher ist es, das von Anfang an "richtig" zu machen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
tobi249 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 30.05.2022, 10:52
Titel: Manuelle Programmierung Schnelle Fourier-Transformation FFT
|
|
Guten Tag,
vielen Dank für die Antwort. Ich programmiere die FFT nach, weil sie der erste Schritt in einer Kette von weiteren Programmierungen ist. Diese muss ich im Anschluss auch noch erstellen. Es wäre gut zu verstehen, wie ich solche mathematischen Formeln in Matlab manuell eingeben kann, da die weiteren Schritte nicht mit internen Matlab-Befehlen durchgeführt werden können.
Viele Grüße
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 30.05.2022, 16:41
Titel:
|
|
Hallo,
ich würde dennoch nur das programmieren, was es noch nicht gibt, also hier die "weiteren Programmierungen". Du hast ja den FFT-Teil schon mal hinbekommen. Wichtig wäre eben, (geschachtelte) for-Schleifen nach Möglichkeit zu vermeiden.
Wenn du da sagst, welche Formeln du implementieren möchtest, kann ich gerne versuchen dabei zu helfen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
tobi249 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 02.06.2022, 10:33
Titel: Manuelle Programmierung Schnelle Fourier-Transformation FFT
|
|
Hallo,
die folgenden Schritte müssen in Matlab implementiert werden:
1) FFT einer NxN großen Matrix
2) Formel 2, siehe Anhang
3) Am Schluss muss die Formel 3 aus dem Bild im Anhang implementiert werden. Diese ist für mich so kompliziert, dass ich dies erst mit der manuellen Implementierung der FFT üben wollte, was ich ja leicht mit dem internen Matlab-Befehl kontrollieren kann.
Vielen Dank und Gruß
Beschreibung: |
|
Download |
Dateiname: |
Formel 2.png |
Dateigröße: |
1.79 KB |
Heruntergeladen: |
185 mal |
Beschreibung: |
|
Download |
Dateiname: |
Formel 3.png |
Dateigröße: |
15.09 KB |
Heruntergeladen: |
188 mal |
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 02.06.2022, 20:51
Titel:
|
|
Hallo,
in Formel 2 gibt es nun nicht sooo viel zu implementieren. Da finde ich in erster Linie die Notation gewöhnungsbedürftig.
Bei Formel 3 wird man über eine for-Schleife über p und q wohl nicht herumkommen. Wenn du S~ und phi als MxN-Matrizen gegeben hast, kannst du die Terme unter der Doppelsumme recht leicht berechnen, wenn du
k = (0:M-1)'
(das transponieren ist wichtig) und
l = (0:N-1)
setzt. Den Rest erledigt dann quasi "implicit expansion".
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
|
|
|
tobi249 |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.06.2022, 10:34
Titel:
|
|
Ich werde es einmal so ausprobieren, vielen Dank!
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|