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

Funktionsamplitude aus FFT ermitteln

 

Hiller

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2008, 12:01     Titel: Funktionsamplitude aus FFT ermitteln
  Antworten mit Zitat      
Hallo, ich habe ein kleines problem mit matlab.
Ich habe eine stark verrauschte Sinusfunktion von der eine fft gemacht werden soll. Das klappt auch alles perfekt, allerdings möchte ich aus der FFT die Amplitude der Sinusschwingung ermitteln.
Also wenn der Sinus z.B. eine Amplitude von 2 hat sollte die FFT auch einen Peak von 2 ausgeben. Die ausgegebenen Werte sind immer deutich höher.
Wie kann man das machen?

Vielen dank im vorraus.

MfG
Andreas


nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 24.02.2008, 23:29     Titel:
  Antworten mit Zitat      
Hi,

aus der Hilfe zu
Code:
:
Code:
clear all;
clc;

Fs = 1000;                    % Sampling frequency
T = 1/Fs;                     % Sample time
L = 1000;                     % Length of signal
t = (0:L-1)*T;                % Time vector
% Sum of a 50 Hz sinusoid and a 120 Hz sinusoid
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
y = x + 2*randn(size(t));     % Sinusoids plus noise
plot(Fs*t(1:50),y(1:50))
title('Signal Corrupted with Zero-Mean Random Noise')
xlabel('time (milliseconds)')

NFFT = 2^nextpow2(L); % Next power of 2 from length of y
Y = fft(y,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2);

% Plot single-sided amplitude spectrum.
plot(f,2*abs(Y(1:NFFT/2)))
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')

Also dividiere die FFT durch die Signal-Länge. ( Y=fft(y,NFFT)/L )
Kommt aber glaube ich auch drauf an, ob, und wenn ja, wie Du
das Signal fensterst.

Siehe vielleicht auch hier:
http://www.mathworks.de/matlabcentr.....reader/view_thread/152811

Edit:
Ein Stückchen Code wie Du es konkret machst wären sicherlich
nicht schädlich.
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Hiller

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2008, 11:15     Titel:
  Antworten mit Zitat      
Hallo und erstmal vielen dank. Ich habe noch ein paar fragen.

1. Woher kommt die abweichung? Auch in dem Programm das du geschickt hast kommt nicht die exakte Amplitude raus. Gibt es eine möglichkeit das zu korrigieren?

2. Was bewirkt die zeile

Code:
NFFT = 2^nextpow2(L);


3. Einfach nur durch die Länge des Signals zu teilen klappt bei mir nicht, ich muss nur 2*N teilen. Ist in meinem fall die Variable N die richtige? Oder habe ich dort einen Denkfehler?


Jetzt noch ein teil von meinem Code:

Code:


fs=125*10^6;             % Abtastfrequenz 10MHz
fg=fs/2.5;              % Grenzfrequenz
N=1024;                % Anzahl der Abtastwerte

% Simulation eines Sinussignal im Zeitbereich
Ts=1/fs;                % Abtastzeit TP (8ns)
t=0:Ts:(N-1)*Ts;       % Zeitfenster für die Abstastung
f1=10*10^6;               % Frequenz von Signal 1
phase1=pi;

sinus1=0.6*sin(2*pi*f1.*t+phase1);


spektrum1= fft(sinus1)*2/N;

dF=fs/(N-1);
f=0:dF:fs/2;
figure(3)
semilogx(f,abs(spektrum1(1:N/2)))
plot(f,abs(spektrum1(1:N/2)))
title('Frequenzspektrum des Referenzsignals')
ylabel(' U(f)')
xlabel('Frequenz in Hz')
grid

 
 
Hiller

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.03.2008, 21:44     Titel:
  Antworten mit Zitat      
Die Abweichung konnte ich mit einer geeigneten Fensterung minimieren, das Programm läuft jetzt perfekt. Vielen Dank für die hilfe!

Nur den Befehl nextpow2 verstehe ich nicht, was bewirkt der?
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2008, 11:02     Titel:
  Antworten mit Zitat      
Der Befehl läßt Matlab die nächste Zahl, die eine 2er Potenz ist zu deiner Signallänge finden.
Beim FFT Befehl gibst du diese dann mit an. Dadurch erweitert er dein Signal auf diese Länge. FFT funktioniert bei Signallängen von 2er Potenzen am schnellsten. (salopp gesagt)
 
Xenontwo
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 05.11.07
Wohnort: Böblingen
Version: ---
     Beitrag Verfasst am: 07.04.2008, 13:27     Titel:
  Antworten mit Zitat      
Hallo!
Hab auch nochmal ne Frage, passt hier eventuell rein:
Ich versteh beim Programmieren den Zusammenhang zwischen der Blocklänge und der FFT Länge nicht ganz.
Ich habe z.B. 1,2 Mio Werte, die mit einer fs=32768 Hz abgetastet wurde. Jetzt möchte ich aus diesen Werten eine FFT bilden. Was für eine Blocklänge nehme ich da? Nehme ich da einfach die Anzahl der Werte? Bin total verwirrt... danke!
P.S. Hab mir auch schon die Beispiele angeschaut, aber ich versteh diesen Grundsätzlichen zusammenhang nicht!
Private Nachricht senden Benutzer-Profile anzeigen
 
steffi
Forum-Century

Forum-Century



Beiträge: 149
Anmeldedatum: 07.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.04.2008, 15:50     Titel:
  Antworten mit Zitat      
Hast du dir das Beispiel von Nils in der "Skripte Ecke" schon angeschaut? Damit solltest du einige Zeit "rumspielen". Also die Blocklänge variieren, Ergebnis anschauen usw. Dann kann ich dir noch

Code:


empfehlen. Da kannst du ein Sinussignal, das du dir selbst generierst einlesen und verschiedene Algorithmen mit unterschiedlichen Blocklängen anwenden und dir das Ergebnis sofort als plot anschauen. Wenn du die fft verstehen willst musst du schon bissel Zeit investieren. Mit Messwerten ist es leider nicht so einfach, wie in der Vorlesung mit Sinus mit überlagertem Rauschen Rolling Eyes

Viel Glück!
_________________

Wenn ich bei der Arbeit mit Computern eins gelernt habe dann das ich einem Computer nur soweit traue wie ich ihn werfen kann.
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.