x1 = filter(ones(1,window)/window,1,x); % no filter, --> raw data
y1 = filter(ones(1,window)/window,1,y);
% figure; % subplot(1,2,1); hold all; grid on % plot(x); plot(x1) % subplot(1,2,2); hold all; grid on % plot(y); plot(y1)
u =x1;
y =y1;
dt = 1/fs;
N = length(u);
U = fft(u);
Y = fft(y);
H1 = U .* Y ./ U.^2; % the H1 transfer function estimate
MagData = (abs(H1));
PhaseData = rad2deg(angle(H1));
n = length(x1);
c = fft(x1)/n;
amp = 2*abs(c);
amp(1) = amp(1)/2;
m = floor(N2/2);
% Ermittelt die letzte Frequenz mit mind. 10% Maximalamplitude!
frequenz=linspace(0,(m-1)*fs/n,m);
f_end=max(frequenz);
for i=1:m
i=m+1-i;
if amp(i)>0.1*max(amp)
f_end=frequenz(i);
break end end
for i=1:N2
if FreqData(i)>f_end
MagData=MagData(1:i);
PhaseData=PhaseData(1:i);
FreqData=FreqData(1:i);
N2=i;
break end end
low_lim=0.2; %Nicht größer als 0.2Hz setzen! Sonst fehlen natürlich die Gain_0_2Hz Werte!
for p2=1:N2-1 if FreqData(p2)<=low_lim && FreqData(p2+1)>low_lim
break end end
%[~,p2]=find(FreqData<0.1+0.05 & FreqData>0.1-0.05);
%Umrechnung und abschneiden von ersten Werten (Sonst
%extreme Skalierung!)
MagData = MagData(p2(1):N2);
FreqData = FreqData(p2(1):N2);
PhaseData = PhaseData(p2(1):N2);
N2 = N2-p2(1);
figure subplot(1,2,1); holdall; grid on
h = plot(FreqData(1:N2),MagData(1:N2),'linewidth',2); holdall axis([low_lim maxlim -infinf]);
smooingdata =smoothdata(MagData, 'movmedian');
h = plot(FreqData(1:N2),smooingdata(1:N2),'linewidth',2);
xlabel('Frequenz [Hz]'); ylabel('Magnitude [deg]') subplot(1,2,2); holdall; grid on
h=plot(FreqData(1:N2),PhaseData(1:N2),'linewidth',2); holdall axis([low_lim maxlim -infinf]);
smooingdata =smoothdata(PhaseData, 'movmedian');
h=plot(FreqData(1:N2),smooingdata(1:N2),'linewidth',2);
xlabel('Frequenz [Hz]'); ylabel('Phase [deg]')
leider sind die Ergebnisse nicht identisch.
Fragen:
wo liegt der Fehler in der Anwedung von tfestimate ?
Wieso startet die phase bei einem positiven Wert und nicht bei 0?
n = length(x1);
c = fft(x1)/n;
amp = 2*abs(c);
amp(1) = amp(1)/2;
m = floor(N2/2);
% Ermittelt die letzte Frequenz mit mind. 10% Maximalamplitude!
frequenz=linspace(0,(m-1)*fs/n,m);
f_end=max(frequenz);
for i=1:m
i=m+1-i;
if amp(i)>0.1*max(amp)
f_end=frequenz(i);
break end end
for i=1:N2
if FreqData(i)>f_end
MagData=MagData(1:i);
PhaseData=PhaseData(1:i);
FreqData=FreqData(1:i);
N2=i;
break end end
low_lim=0.2; %Nicht größer als 0.2Hz setzen! Sonst fehlen natürlich die Gain_0_2Hz Werte!
for p2=1:N2-1 if FreqData(p2)<=low_lim && FreqData(p2+1)>low_lim
break end end
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.