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

Matlab FFT/iFFT wo ist der fehler?

 

steffen.k
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 23.07.11
Wohnort: Lübeck
Version: ---
     Beitrag Verfasst am: 23.07.2011, 21:37     Titel: Matlab FFT/iFFT wo ist der fehler?
  Antworten mit Zitat      
Hallo Zusammen,

ich habe ein Problem mit der Inversen-FFT bei Matlab. Ich habe Messdaten
die transformiere ich in den Frequenzbereich, dann manipuliere ich die
und wandele diese mit der iFFT zurück in den Zeitbereich. Irgendwas geht
aber schief Sad Wie man im Bild erkennen kann ist das nur noch wildes
irgendwas...

Hat jemand eine Idee?

Vielen Dank
Gruß Steffen

DisplayUSBData2.m
 Beschreibung:
Das Skript

Download
 Dateiname:  DisplayUSBData2.m
 Dateigröße:  1.96 KB
 Heruntergeladen:  804 mal
IFFT.jpg
 Beschreibung:
Das komische Ergebnis

Download
 Dateiname:  IFFT.jpg
 Dateigröße:  42.71 KB
 Heruntergeladen:  978 mal
Output.txt
 Beschreibung:
Die Messdaten als Binar-File

Download
 Dateiname:  Output.txt
 Dateigröße:  118.91 KB
 Heruntergeladen:  673 mal
Messdaten.jpg
 Beschreibung:
Die Messdaten im Zeitbereicht vor der Bearbeitung

Download
 Dateiname:  Messdaten.jpg
 Dateigröße:  41.31 KB
 Heruntergeladen:  948 mal
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 25.07.2011, 10:46     Titel:
  Antworten mit Zitat      
Hallo Steffen,

der Fehler liegt hier...

Code:

Y = ifftshift(SequenceSpectrum);
y = ifft(Y, Nfft); % Spektrum nicht nochmal shiften

% oder so:

Y = SequenceSpectrum;
y = ifft(fftshift(Y), Nfft);
 


Wenn du dein Amplitdenspektrum mit NFFT/2 skalierst, musst du das bei der ifft() rückgängig machen Wink

Code:
y = ifft(Y, Nfft) * (Nfft/2);


Allerdings ist die Skalierung auch nicht ganz korrekt. Der Gleichanteil des Spektrums und bei der Nyquistfreq. werden nur mit Nfft skaliert

Code:

SequenceSpectrum(1) = SequenceSpectrum(1) / Nfft
SequenceSpectrum(2:(Nfft/2)) = SequenceSpectrum(2:(Nfft/2)) / (Nfft/2)
SequenceSpectrum((Nfft/2)+1) = SequenceSpectrum((Nfft/2)+1) / Nfft
 


Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen
 
steffen.k
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 23.07.11
Wohnort: Lübeck
Version: ---
     Beitrag Verfasst am: 25.07.2011, 11:19     Titel:
  Antworten mit Zitat      
Super es geht! Vielen dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
steffen.k
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 23.07.11
Wohnort: Lübeck
Version: ---
     Beitrag Verfasst am: 25.07.2011, 13:57     Titel:
  Antworten mit Zitat      
DSP hat Folgendes geschrieben:

Code:

SequenceSpectrum(1) = SequenceSpectrum(1) / Nfft
SequenceSpectrum(2:(Nfft/2)) = SequenceSpectrum(2:(Nfft/2)) / (Nfft/2)
SequenceSpectrum((Nfft/2)+1) = SequenceSpectrum((Nfft/2)+1) / Nfft
 




Hallo DSP,

eine Frage habe ich nun doch müsste es nicht

Code:

Y(1) = Y(1) * Nfft;                                        % - fs/2
Y(Nfft) = Y(Nfft) * Nfft;                                  % + fs/2
Y((Nfft/2)+1) = Y((Nfft/2)+1) * Nfft;               % DC Part
Y(2:Nfft-1) = Y(2:Nfft-1) * (Nfft/2);                 % Rest
 


sein?
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 25.07.2011, 14:03     Titel:
  Antworten mit Zitat      
Sorry...das war alles Mist. Diese Skalierung gilt nur, wenn man lediglich das positive Frequenzspektrum verwendet, also von 0...fn [Hz]. Wenn man wie du, das Beidseitige nimmt, ist die Skalierung lediglich mit * (1/Nfft).
Ich benutze immer nur das positive Spektrum und aus Macht der Gewohnheit habe ich dann einfach diese Saklierung angegeben.
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 - 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.