Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

Buchempfehlung erbeten

Studierende:
weitere Angebote

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Manuelle Programmierung Schnelle Fourier-Transformation FFT

 

tobi249

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2022, 09:53     Titel: Manuelle Programmierung Schnelle Fourier-Transformation FFT
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 23.991
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.05.2022, 14:58     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
tobi249

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2022, 11:52     Titel: Manuelle Programmierung Schnelle Fourier-Transformation FFT
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 23.991
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.05.2022, 17:41     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
tobi249

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2022, 11:33     Titel: Manuelle Programmierung Schnelle Fourier-Transformation FFT
  Antworten mit Zitat      
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ß

Formel 2.png
 Beschreibung:

Download
 Dateiname:  Formel 2.png
 Dateigröße:  1.79 KB
 Heruntergeladen:  15 mal
Formel 3.png
 Beschreibung:

Download
 Dateiname:  Formel 3.png
 Dateigröße:  15.09 KB
 Heruntergeladen:  21 mal
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 23.991
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.06.2022, 21:51     Titel:
  Antworten mit Zitat      
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
tobi249

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2022, 11:34     Titel:
  Antworten mit Zitat      
Ich werde es einmal so ausprobieren, vielen Dank!
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2022 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.