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 und Tiefpassfilter Verständnisfrage

 

Hardtacker

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.01.2015, 08:16     Titel: FFT und Tiefpassfilter Verständnisfrage
  Antworten mit Zitat      
Guten Morgen zusammen,

ich hätte folgende Frage an euch:

Und zwar muss ich für die Arbeit ein Beschleunigungssignal auswerten.

Da das Signal mit bis zu 1000 HZ abgefragt werden kann (Beschleunigungssensor) ist das Signal leicht verrauscht.

Für meine Analyse muss ich daher das Signal glätten.

Ich habe es schon mit einem Filter Gauss Filter versucht, jedoch erhalte ich dann einen Zeitversatz. Auch mit dem Befehl "same" habe ich einen leichten Verstaz, der aber einen erheblichen Einfluss auf meine Auswertung hat ( jede 0.1s zählt)

Daher wollte ich gerne eine FFT vom Signal vornehmen und dann über einen Tiefpassfilter das Signal glätten.

Mit Hilfe des Forums habe ich mir folgende FFT erstellt:

Code:

t=time;
x=beschleunigung;


L = length(x);                      %Länge des Vektors
Fs = L/(max(t)-min(t)) ;  %Abtastrate bestimmen
T = 1/Fs;                          
t = (0:L-1)*T;  
y = x;

NFFT = 2^nextpow2(L);
Y = fft(y, NFFT);
% Berechnung des Amplitudengangs aus dem komplexen Frequenzvektor H:
amplY = abs(Y);

% Darstellung des interessierenden Frequenzbereichs des
% Amplitudengangs (0...fn) und
% daran angepasste Amplitudenskalierung (Normierung auf N/2):
amplitudengang = [amplY(1)/NFFT amplY(2:NFFT/2)/(NFFT/2) amplY(NFFT/2 + 1)/NFFT]; % DC-Bin auf N normieren!

f = Fs/2*linspace(0,1,NFFT/2+1);

[maxY, index] = max(amplitudengang);
maxY_Frequenz =  f(index); % Maximum von Y bei der Frequenz
 
figure
plot(f,amplitudengang)
xlim([0,2])
title ('Amplituden','FontSize',16)
legend ('Frequenzspektrum','Location','SouthEast')
title('Frequnenzuntersuchung mittels FFT','FontSize',16)
xlabel('Frequenz [Hz]')
ylabel('|Y(f)|')
 


Dann erhalte ich folgendes Bild (Siehe Anhang)

Stimmt dieser Weg bis hier?
Nach meinem Verständis benötige ich nun einen Tiefpass der die Frequenz bis 0.4HZ filtert richtig?


Wie baue ich mir nun einen guten Filter? Hier benötige ich eure Hilfe.

Meine Vorstellung wäre, dass der Anwender später die FFT über seine Messung laufen lässt und dann ggf über Settings die Grenzfrequenz vorgeben kann, um den optimalen Tiefpassfilter zu haben.

Denn es muss nicht sein, dass ein Filter für alle Messungen ausreicht.

Danke für eure Hilfe.

Gruß,

Hardtacker

FFT.png
 Beschreibung:

Download
 Dateiname:  FFT.png
 Dateigröße:  10.3 KB
 Heruntergeladen:  694 mal


Frank
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 14.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.02.2015, 18:08     Titel:
  Antworten mit Zitat      
Hallo,

um den zeitlichen Versatz von Tiefpassfiltern aus dem weg zu gehen, hilft die Funktion
Code:
..

Ich habe mal hier einen alten Code der dir vtl. weiterhilft.

einfach die Funktion
Code:
durch
Code:
ersetzen und dann siehts du schon den Unterschied.

Code:
load Messung3
Zeit  = rec038.X(1,1).Data(1:end)';
M_ist = [rec038.Y(1,4).Data(1:end)'];
w_ist = [rec038.Y(1,3).Data(1:end)'./60*2*pi];





%Tiefpassfilterung
% [b a]Koeffizienten der Übertragungsfunktion
% f_tp ist die Grenzfrequenz
% fs die Abtastfrequ., Butterworthfilter
% w_ist ist das Signal

index=0;
f=0;
for i =1:1:7;
fs = 1000;
index=index+1;
f_tp=i;
[b a] = butter(5,f_tp/(0.5*fs),'low');
wist_f = filter(b,a,w_ist);
    T=0.001;
    wd=((wist_f(2:end)-wist_f(1:end-1))/T);
    wd2=((wist_f(2:end)-wist_f(1:end-1))/T).^2;
   
 %Differentialgleichung
 % J*wd+mu*wist_f-M_ist=0;
 %daraus folgt Fehlerquadratsumme und Ableitungen nach J und mu
 
 %f=sum(J*wd+b*wist_f-M_ist).^2
    %mit den beiden Ableitungen nach J und b
    % 0=2*sum(J*wd2+mu*wist_f.*wd-M_ist.*wd)
    % 0=2*sum(J*wd.*wist_f+mu*wist_f.^2-M_ist*wist_f)
   
 % Ausklammern von J und mu führt auf A*[J,mu]+y=0
 % Lösung des Gleichungssystems

 
 A=[sum(wd2) , sum(wist_f(1:end-1).*wd);
     sum(wist_f(1:end-1).*wd),  sum(wist_f(1:end-1).^2) ];
 

  y=[sum(-M_ist(1:end-1).*wd);
     sum(-M_ist(1:end-1).*w_ist(1:end-1))];
 
  x =-2*inv(A)*y ;  
  mu_speicher(index)=x(2);
  J_speicher(index)=x(1);
  zellenname(index)= {''};
  plot (wist_f)  ;
  axis ([0  max(Zeit)*1000  0 max(w_ist)])
  hold on


end

f=figure(f+1)
plot(w_ist,'r')
title  'Gefilterte (blau) Ungefilterte (rot) Winkelgeschwindigkeit'
xlabel 'Zeit in Millisekunden'
ylabel 'Winkelgeschwindigkeit in rad/sek'
f = figure(f+1);
dat = [linspace(1,index,index);J_speicher;mu_speicher];
cnames =cellfun(@(x) x(1:end),zellenname,'uniformoutput',false)
rnames = {'Grenzfrequenz in Hz' 'J in [kg*m^2] ',' mu in [kg*m^2/s] '};
t = uitable('Parent',f,'Data',dat,'ColumnName',cnames,...
            'RowName',rnames,'Position',[10 10 720 90]);
 


die mat dazu ist im Anhang.
Gruß Frank

Messung3.zip
 Beschreibung:

Download
 Dateiname:  Messung3.zip
 Dateigröße:  1.5 MB
 Heruntergeladen:  680 mal
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.