WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

FFT OHNE fft() in Matlab was mache ich Falsch?

 

Noy

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.12.2011, 16:04     Titel: FFT OHNE fft() in Matlab was mache ich Falsch?
  Antworten mit Zitat      
Also für ein FH Projekt muss ich von einem Array mit abgetasteten Werten das Spektrum erstellen. Wobei wir aber nicht die fft() Funktion von Matlab verwenden dürfen. Mit einer selbst geschriebenen DFT funktioniert es schon aber es ist halt relativ langsam daher versuche ich gerade es mit einer FFT zu bewerkstelligen. Aber irgendwie klappt da was nicht. Das Spektrum schaut zwar ganz gut aus aber die Frequenzen und die Werte stimmen nicht.

AbtWe() sind die Abtastwerte.
o ist die Anzahl meiner Abtastwerte.(400 insgesamt) Anzahl sind das gleiche.



Code:

 for n=1:(o-1)
    Z(n) = AbtWe(n);
     X(n) = 1i*AbtWe(n+1);
 end
 
 for p=1:o
     U=0;
     R=0;
     T=0;
     for e=1:399
        U=U+Z(e)*exp(((e-1)*-1i*pi*p)/Anzahl);
         R=R+Z(e)*exp(((e-1)*-1i*pi*p)/Anzahl);
      end
      U=U+Z(400)*exp(((399)*-1i*pi*p)/Anzahl);
      T=(R+(Z(400)*exp(((399)*-1i*pi*p)/Anzahl)))*exp((-1i*pi*p)/Anzahl);
   Y(p)=U+T;
 end
 


Hier das sind vorherige Versuche die aber alle nicht so wirklich klappen wollten.:

Code:

% %--------------------------------------------------------FFT Vorbereitung
% % % % % for n=1:2:o
% % % % %    Z(n) = AbtWe(n);
% % % % % end
% % % % % for n=2:2:o
% % % % %     Z(n)=1i*AbtWe(n);
% % % % % end

%-------------------------------------------------------FUNZT
% % for p=1:o
% %     U=0;
% %     O=0;
% %     R=0;
% %     S=0;
% %     T=0;
% %     h=0;
% %    
% %     for e=1:2:399
% %         U=U+Z(e)*exp((h*2*-1i*pi*p)/Anzahl);
% %         R=R+Z(e+1)*exp((2*h*-1i*pi*p)/Anzahl);
% %         T=R*exp((-1i*pi*p)/Anzahl);
% %         U=U+Z(2*e+1)*exp((e*2*-1i*pi*p)/k);
% %         O=U+Z(1)*exp((0*2*-1i*pi*p)/k);
% %         R=R+Z(2*e+2)*exp((2*e+*-1i*pi*p)/k);
% %         S=R+Z(2)*exp((2*0*-1i*pi*p)/k);
% %         T=S*exp((2*-1i*pi*p)/Anzahl);
% %         h=h+1;
% %     end
% %   Y(p)=U+T;
% % end
%:::::..::::::::::::::::::::::::::::

% % % % for p=1:o
% % % %     U=0;
% % % %     O=0;
% % % %     R=0;
% % % %     S=0;
% % % %     T=0;
% % % %     h=0;
% % % %     for e=1:2:399
% % % %         U=U+Z(e)*exp((h*2*-1i*pi*p)/Anzahl);
% % % %         R=R+Z(e+1)*exp((2*h*-1i*pi*p)/Anzahl);
% % % %        
% % % %         %U=U+Z(2*e+1)*exp((e*2*-1i*pi*p)/k);
% % % %         %O=U+Z(1)*exp((0*2*-1i*pi*p)/k);
% % % %         %R=R+Z(2*e+2)*exp((2*e+*-1i*pi*p)/k);
% % % %         %S=R+Z(2)*exp((2*0*-1i*pi*p)/k);
% % % %         %T=S*exp((2*-1i*pi*p)/Anzahl);
% % % %         h=h+1;
% % % %     end
% % % %     T=R*exp((-1i*pi*p)/Anzahl);
% % % %   Y(p)=U+T;
% % % % end


%----------------------------------------------------------------------FFT F
% % % % % F=zeros(o,1);
% % % % % for m=1:o
% % % % %     F(m)=m*Delta_F;
% % % % % end
 



Vielleicht findet Ihr ja den Fehler.


Nur fals jemand ganz schlau sein will:

WIE GESAGT WIR DÜRFEN KEINE FFT() FUNKTION BENUTZEN!!!


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.12.2011, 17:46     Titel: Re: FFT OHNE fft() in Matlab was mache ich Falsch?
  Antworten mit Zitat      
Hallo Noy,

Das Programm ist in Matlab sehr ineffizient geschrieben. Aber das läßt sich verbessern, wenn es erstmal die richtigen Ergebnisse liefert.

Wozu kopierst Du X? Und wieso ist dies 1i*AbtWe(n+1)? Damit enthält doch Z und X die gleichen Elemente (bis auf eines und den imaginären Faktor).
Zudem kommt X später gar nicht mehr vor, oder?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Noy

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.12.2011, 19:07     Titel:
  Antworten mit Zitat      
Oi,
hab da einen Fehler gemacht, es müsste so heißen:
Code:

 for n=1:2:(Anzahl-1)
    Z(n) = AbtWe(n);
     X(n) = 1i*AbtWe(n+1);
 end
 
 for p=1:Anzahl
     U=0;
     R=0;
     T=0;
     for e=1:(Anzahl-1)
        U=U+Z(e)*exp(((e-1)*-1i*pi*p)/Anzahl);
         R=R+X(e)*exp(((e-1)*-1i*pi*p)/Anzahl);
      end
      U=U+Z(400)*exp(((399)*-1i*pi*p)/Anzahl);
      T=(R+(X(400)*exp(((399)*-1i*pi*p)/Anzahl)))*exp((-1i*pi*p)/Anzahl);
   Y(p)=U+T;
 end


So müsste es passen. X und Z enthalten nicht die gleichen werte. Z enthält alle ungeraden Werte der Abtastwerte und X alle geraden mit i multipliziert.

Die Formeln hab ich von hier :

http://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation

unter Formelle Beschreibung.
Die FFT ist ja nur deshalb so schnell weil die Abtastwerte aufgeteilt werden man also nur noch Anzahl/2 hat die verrechnet werden müssen. Oder?

Weiter unten die Versuche sind noch so gehalten das nur ein Array beschrieben wird wobei dann jeder 2. Wert Imaginär ist. Das funktioniert soweit auch. Nur dann läuft irgendwas schief. Ich denke meine for-Schleifen End Werte von p stimmen nicht ganz.Weiß nicht ob p bis Anzahl oder Anzahl-1 oder Anzahl/2 oder (Anzahl/2)-1 laufen muss.
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 22.12.2011, 00:09     Titel:
  Antworten mit Zitat      
Ich empfehle dir mal folgendes Skript inkl. Programmcode:

http://www.dspguide.com/ch12/3.htm

Ist zwar eine andere Programmiersprache...wer aber z.B. C kann, versteht die Zeilen auch.
Private Nachricht senden Benutzer-Profile anzeigen
 
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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 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.