Verfasst am: 19.01.2015, 08:16
Titel: FFT und Tiefpassfilter Verständnisfrage
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!
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.
%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
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',[101072090]);
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
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.