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 die x-te in Matlab

 

Muki_84

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2010, 15:05     Titel: FFT die x-te in Matlab
  Antworten mit Zitat      
Hallo zusammen,

ich weiß das das Thema schon oft besprochen wurde.
Habe auch das Forum durch geschaut und einige gute Beispiele für die FFT in Matlab gefunden.

Muss aber ehrlich zugeben, dass ich die Vorgehensweise nicht verstehe.

Mein Ziel ist es mit einem GUI beliebige Signale auswählen/erstellen zu können und mir anschließend die FFT, vom Signal anzeigen zu lassen.

Anbei mein bisheriger Code: Würde das soweit passen?
Die Signalerstellung ( erstmal nur Sinus) ist von mir. Die Berechnung der FFT ist aus den Beispielen hier im Forum zusammen kopiert.

Und dazu habe ich ein Paar fragen. Aber erstmal der Code:
************************************************************
function signal
% Erzeugung eines beliebigen Signals mit:
f=1; % Frequenz des vorhandenen Signales
T=1/f; % Bestimmung der Periodenzeitdauer
o=(0.01/f); % Bestimmung der Schrittweite für beliebige
% Frequenzen
k= 0Surprised:T; % Erstellung des x-Vektors (Zeitachse)
a=1; % Amplitude
z=[]; % freier Vektor, der das Signal darstellen soll
v=1; % Laufindex
for t=0Surprised:T
z(v)=(a*(sin(2*pi*f*t)));
v=(v+1);
end
figure(1)
plot(k,z,'-r');
grid on;
ylabel('Amplitude');
xlabel('Zeitachse T');
title('Signalverlauf');
hold on;

% Beginnen der FFT
fa = f/2; % Abtastfrequenz
N = 1024; % Abtastpunkte


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

% Plot single-sided amplitude spectrum.
figure(2)
grid on;
plot(f,2*abs(Y(1:NFFT/2+1)));
title('Single-Sided Amplitude Spectrum of y(t)');
xlabel('Frequency (Hz)');
ylabel('|Y(f)|');
end
******************************************************
Fragen kommen im 2 Post


Muki_84

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2010, 15:13     Titel:
  Antworten mit Zitat      
Entschuldigt bitte, die Surprised sollen ein o sein.


Mir ist bewusst, das die Abtastfreuqenz groß genug sein muss. Mit f/2 hat man genau das Minimun, um keine Abtastfehler zu bekommen.

Die Anzahl der Abtastpunkte ist mir auch bekannt. Aber wie entscheide ich über die Größe? Gibt es dort Richtwerte?

Die weiteren 3 Schritte verstehe ich leider absolut nicht.

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

Wozu die max. Power?
Warum teile ich bei fft noch mal durch N?
was macht man mit linspace bei der fft?

Wäre sehr dankbar wenn mir jemand die Aufbereitung der Signale mit FFT in Matlab erklären könnte oder mir Links posten könnte.

Möchte endlich das Thema verstehen.

Danke im voraus.

Gruß,
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.12.2010, 15:35     Titel:
  Antworten mit Zitat      
Hallo Muki_84,

Zitat:
Entschuldigt bitte, die :o sollen ein o sein.

Dann verwende bitte die Code-Umgebung, die solche Gags abfängt:
[ c o d e ] .... [ / c o d e ] (ohne Leerzeichen).
Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Muki_84

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2010, 15:58     Titel:
  Antworten mit Zitat      
So hier noch mal der Code:
Code:
function signal
% Erzeugung eines beliebigen Signals mit:
f=1;                         % Frequenz des vorhandenen Signales
T=1/f;                       % Bestimmung der Periodenzeitdauer
q=(0.01/f);                  % Bestimmung der Schrittweite für beliebige
                             % Frequenzen
k= 0:q:T;                    % Erstellung des x-Vektors (Zeitachse)
a=1;                         % Amplitude
z=[];                        % freier Vektor, der das Signal darstellen soll
v=1;                         % Laufindex
for t=0:q:T
    z(v)=(a*(sin(2*pi*f*t)));
    v=(v+1);
end
figure(1)
plot(k,z,'-r');
grid on;
ylabel('Amplitude');
xlabel('Zeitachse T');
title('Signalverlauf');
hold on;

% Beginnen der FFT
fa = f/2;                   % Abtastfrequenz, Nyquist
N  = 1024;                  % Abtastpunkte


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

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.12.2010, 17:59     Titel:
  Antworten mit Zitat      
Hallo zusammen,

habe mich am WE nochmal mit der FFT & Matlab auseinander gesetzt.

Mittlerweile bin ich soweit, das ich ein Sinussignal(50Hz) erzeuge und per FFT(100Hz Abtastfrequenz) einen Impuls bei 50HZ bekomme.

Das sollte soweit stimmen oder? Aber müsste ich nicht bei n*50Hz weitere Impulse bekommen? Vielfache der Grundfrequenz?

Oder hat das damit zu tun, das ich nur fs/2 betrachte damit kein Aliasing auftritt?

Meine weitere Frage ist, wenn ich zum Sinus Signal was addiere, müsste sich dann der Peak nicht verschieben? Bzw müssten sich andere Peaks bilden, wegen Oberfrequenzen?

Hier mein Code

Code:
function signal
% Erzeugung eines beliebigen Signals mit:
f0 = 50;       % Frequenz vom Signal
fs = 2*f0;     % Sampling Frequenz
T0 = 1/f0;     % Periodendauer
Ts = 1/fs;     % Sampling Time
N= 1024;       % Länge des abgetastem Signal
A = 1;         % Amplitude
t= (0:N-1);    % Zeitvektor für FFT
t0= 0:(0.01/f0):T0;
y = A*sin(2*pi*f0*t0);  % würde das gerne hinzuaddieren +0.7*tan(2*pi*1000*t0);
hold on;
figure(1);
plot(t0,y,'-r');

%FFT
NFFT = 2^nextpow2(N);   % nächst höhere 2er Potenz finden
                        % Hier egal da 1024 = 2^10 ist = N
yfft = fft(y,NFFT);
yfft1 = fft(y,NFFT)/N;

f= fs/2*linspace(1,1,NFFT/2+1); % Frequenz x-Achse erzeugen
                                % fs/2 damit kein Aliasing auftritt
                                % daher auch NFFT/2, beginnt aber bei 1
                                % daher Nfft/2 +1

figure(2);
plot(f,2*abs(yfft(1:NFFT/2+1)),'m-');
%axis([-100 100 0 200]);
figure(3);
plot(f,2*abs(yfft1(1:NFFT/2+1)),'b-');
%axis([-100 100 0 2])




end


Würde mich über ein Feedback freuen. Passt der Code soweit?

Gruß, Muki
 
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.