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 - Fragen zu Synthax und zur Frequenzauflösung

 

matz86

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2011, 09:38     Titel: Matlab FFT - Fragen zu Synthax und zur Frequenzauflösung
  Antworten mit Zitat      
Hallo,

in der Matlab Hilfe ist ja ein Beispiel zur Anwendung der Funktion fft dargestellt.
Ich habe mir mit Matlab eine Sinusschwingung generiert, wobei ich 64 Abtastwerte aufgezeichnet habe. Im Grund genommen habe ich also folgendes gerechnet: Y = fft(y,64)/64
Nun interessiert mich wie der komplexe Vektor Y bei Y = fft(y,NFFT)/L;
aufgebaut ist?
Das erste Element ist der Gleichanteil, also sozusagen eine Konstante. Nun habe ich noch 63 weitere komplexe Werte im Vektor Y.
Anhand der Matlab Hilfe werden für das konkrete Beispiel die ersten 33 Werte des Vektors (bzw. die Beträge) als Amplitude geplottet:
Code:

f = Fs/2*linspace(0,1,NFFT/2+1);
% Plot single-sided amplitude spectrum.
plot(f,2*abs(Y(1:NFFT/2+1)))
 

Doch warum die ersten 33? Also warum steht in der Formel NFFT/2+1 und nicht NFFT/2?
Und was ist mit den restlichen 31 Werten des Vektors Y? Welche Informationen sind dort enthalten?

Außerdem verwundet mich, wie ich auch die zugehörigen Frequenzen komme, also f = Fs/2*linspace(0,1,NFFT/2+1);.
Dass dort ebenfalls NFFT/2+1 steht ist logisch, allein schon dass beide Vektoren fürs plotten gleich lang sind. Aber was würde passieren, wenn ich in beiden Formeln NFFT/2 anstatt NFFT/2+1 verwenden würde? Ich habe es getestet und die Peaks waren etwas verschoben in Bezug auf das andere Beispiel.
Auf was ich hier hinaus will: Welche Begründung gibt es, die Frequenzabstufung gleichmäßig in NFFT/2+1 Schritten von 0 bis Fs/2 laufen zu lassen (und nicht in NFFT/2 Schritten)? Vllt ist dieser Sachverhalt lediglich Matlab spezifisch?

Gruß
Matz


Ajax
Forum-Century

Forum-Century


Beiträge: 176
Anmeldedatum: 09.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2011, 09:56     Titel:
  Antworten mit Zitat      
Hallo,

bei der Fourier Transformation werden sowohl positive als auch negative Frequenzen berechnet (einfach aufgrund der Formel). Diese Frequenzen sind symmetrisch zur y-Achse. Damit enthalten die negativen Frequenzen an sich keine zusätzliche Information. Da sie in den meisten Anwendungen "physikalisch keinen Sinn ergeben", werden sie bei einer Darstellung häufig weggelassen. Zusätzlich zu den positiven und den negativen Frequenzen gibt es natürlich auch noch den Wert bei 0 - also den Offset. Hat das Signal eine Länge von 64, dann werden zusätzlich zu den 32 Frequenzwerten auch noch der Offset abgespeichert. Daher kommt die NFFT/2 + 1. Der hintere Teil des Vektors entspricht den negativen Werten.
Noch als Zusatz: für einen plot beider Frequenzen eignet sich die fftshift() Funktion, welche die negativen Frequenzen "an die richtige Stelle" schiebt.

mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
matz86

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2011, 10:04     Titel:
  Antworten mit Zitat      
Hallo Ajax,

das erscheint mir logisch. Jedoch geht die Geschichte ja nicht ganz auf. Wenn ich gleich viele positive und negative Werte habe UND einen Wert bei 0, müssten ja 65 Werte vorhanden sein. Wenn 33 Werte genutzt werden, werden der Wert bei 0 sowie 32 positive Frequenzen verwendet. Es verbleiben nun aber nur noch 31 nagative Frequenzen.

Gruß
Matz
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 01.07.2011, 10:42     Titel:
  Antworten mit Zitat      
Auf diese Rückfrage habe ich schon gewartet Wink. Ich hatte damit am Anfang auch so meine Probleme.

Evtl. wird es dir hiermit deutlicher:

Code:

Fy = fft(data,N)/N
Fy_pos0 = Fy(1:((N/2)+1)) ; % Gleichanteil und Werte der positive Freq.
Fy_neg  = Fy((N/2+1):N) ; % Werte der negativen Freq.

Fy_ges = [Fy_neg Fy_pos0] ;     % Gesamtes Spektrum für plot


Nehmen wir mal an das Signal hat 1000 Werte, dann ist

Fy_pos0 = 501 Werte lang und Fy_neg = 500 Werte lang. Der zusätzliche Wert kommt dadurch zustande, dass der Wert bei fs/2 doppelt verwendet wird. Das Spektrum ist damit beim Gleichanteil f = 0 Hz spiegelsymmetrisch und hat dann auf jeder Seite 500 Werte Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
matz86

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2011, 11:35     Titel:
  Antworten mit Zitat      
Super, danke!

DSP, vielleicht kannst du mir auch noch schnell bei einer anderen Frage, die darauf aufbaut, weiterhelfen:
Ist nun die FFT-Länge NFFT länger als die Anzahl L der abgetasteten Werte, so wird das Signal mit Nullen aufgefüllt. Dadurch werden keine neuen Informationen geschaffen, aber das Spektrum wird sozusagen interpoliert.
Was ist neben der längeren Rechenzeit ein Nachteil davon? Ich habe gelesen, dass durch Zero Padding Nebenkeulen (Nebenmaxima) entstehen können, welche eigentlich nicht im Frequenzsignal enthalten sind. Ist dies der einzige Nachteil?
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 01.07.2011, 13:15     Titel:
  Antworten mit Zitat      
matz86 hat Folgendes geschrieben:

Ist nun die FFT-Länge NFFT länger als die Anzahl L der abgetasteten Werte, so wird das Signal mit Nullen aufgefüllt.


Das ist richtig! Bsp. Nfft = 1024 und L = 1000...denn werden 24 Nullen automatisch bei fft(data[L], Nfft) angehängt.


matz86 hat Folgendes geschrieben:
Dadurch werden keine neuen Informationen geschaffen, aber das Spektrum wird sozusagen interpoliert.
Was ist neben der längeren Rechenzeit ein Nachteil davon? Ich habe gelesen, dass durch Zero Padding Nebenkeulen (Nebenmaxima) entstehen können, welche eigentlich nicht im Frequenzsignal enthalten sind. Ist dies der einzige Nachteil?


Zero padding führt man durch, um die Freq.Auflösung df = fs/Nfft des Spektrums zu erhöhen. Durch die höhere Anzahl an Messwerten, wird df kleiner und dadurch liegen die diskreten Spektrallinien näher aneinander. Sind die Frequenzen meines Signals Vielfache der Auflösung df=fs/L, so ergibt sich kein Leakage Effekt. Durch das Zero-padding ändert sich ja das df=fs/Nfft, wodurch es sein kann, dass es dann kein Vielfaches der Signalfreq. ist. Hier entsteht dann der Leakage Effekt...Auftreten von Nebenmaxima.
Private Nachricht senden Benutzer-Profile anzeigen
 
Ajax
Forum-Century

Forum-Century


Beiträge: 176
Anmeldedatum: 09.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2011, 13:43     Titel:
  Antworten mit Zitat      
Kleine Zusatzbemerkung: Zero-Padding wird meines Wissens ebenfalls verwendet, um die Länge des Signals auf eine 2er-Potenz zu bringen. Dies ist Notwendig um den schnellen Fast Fourier-Transformations-Algorithmus anwenden zu können.
mfg
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: 03.07.2011, 17:10     Titel:
  Antworten mit Zitat      
Das ist vollkommen richtig...an diesen simplen Grund habe ich gar nicht gedacht. Ich bin es einfach gewohnt meine Daten in deiner passenden 2er Potenz Länge zu haben Wink
Private Nachricht senden Benutzer-Profile anzeigen
Verschoben: 04.07.2011, 09:53 Uhr von _Peter_
Von Script-Ecke nach Programmierung
 
matz86

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2011, 10:20     Titel:
  Antworten mit Zitat      
Vielen Dank für eure Antworten!
 
ifranz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.08.2013, 19:02     Titel: FFT in Matlab
  Antworten mit Zitat      
Hallo,

ich habe da noch ein paar Verständnisprobleme...
Nachdem ich die FFT von einem Vektor mit einer geraden Anzahl an Werten gemacht habe, bekomme ich durch Umformung einen Vektor mit N+1 Werten.
Ich habe nun zusätzlich einen Vektor mit der gleichen Größe (auch fouriertransformiert), der mit dem Ersten multipliziert werden soll. Am Schluss soll das Produkt der beiden Vektoren aufsummiert werden.
Habe ich dann jetzt aber nicht insgesamt meinen Betrachtungsbereich vergrößert? Ich habe ja eigentlich keine N+1 Werte gegeben. Kann man das ganze irgendwie wieder zurücktransformieren?

Grüße
ifranz
 
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.