Verfasst am: 01.08.2013, 21:48
Titel: fit auf rechtecksfunktion
Hallo zusammen,
ich habe Messwerte, welche eine Rechteckspannung beschreiben, allerdings gestört durch rauschen. Jetzt möchte ich einen fit durch die Messwerte machen um auf Amplitude, Frequenz und Mittelwert zu kommen.
Ich mach jetzt schon ewig mit dem Curve Fitting Tool rum, aber komm nicht weiter. Mein Gedanke war auf eine Custom Equation mit
Ich hab dazu eben das Curve Fitting Tool benutzt und mir jetzt das m-File generieren lassen. Allerdings kenn ich mich nicht sooo gut mit Matlab aus, dass ich das auf anhieb versteh, was da rauskommt. Ich habe es jetzt aber mal angehängt:
Code:
function createFit(x,y)
%CREATEFIT Create plot of data sets and fits
% CREATEFIT(X,Y) % Creates a plot, similar to the plot in the main Curve Fitting Tool, % using the data that you provide as input. You can % use this function with the same data you used with CFTOOL % or with different data. You may want to edit the function to % customize the code and this help message.
%
% Number of data sets: 1 % Number of fits: 1
% Data from data set "y vs. x": % X = x: % Y = y: % Unweighted
% Auto-generated by MATLAB on 03-Aug-2013 11:11:14
% Set up figure to receive data sets and fits
f_ = clf;
figure(f_);
set(f_,'Units','Pixels','Position',[658269688485]);
% Line handles and text for the legend.
legh_ = [];
legt_ = {};
% Limits of the x-axis.
xlim_ = [Inf -Inf];
% Axes for the plot.
ax_ = axes;
set(ax_,'Units','normalized','OuterPosition',[0011]);
set(ax_,'Box','on');
axes(ax_);
hold on;
% --- Plot data that was originally in data set "y vs. x"
x = x(:);
y = y(:);
h_ = line(x,y,'Parent',ax_,'Color',[0.33333300.666667],...
'LineStyle','none', 'LineWidth',1,...
'Marker','.', 'MarkerSize',12);
xlim_(1) = min(xlim_(1),min(x));
xlim_(2) = max(xlim_(2),max(x));
legh_(end+1) = h_;
legt_{end+1} = 'y vs. x';
% --- Create fit "fit 1"
fo_ = fitoptions('method','NonlinearLeastSquares','Algorithm','Levenberg-Marquardt','DiffMinChange',1.0000000000000001e-009,'MaxFunEvals',6000,'MaxIter',4000);
ok_ = isfinite(x) & isfinite(y);
if ~all( ok_ ) warning( 'GenerateMFile:IgnoringNansAndInfs',...
'Ignoring NaNs and Infs in data.' );
end
st_ = [0.0415668659959108620.171488366689778520.153088665619058980.30667010942829687];
set(fo_,'Startpoint',st_);
ft_ = fittype('a*sign(sin(b*x+c))+d',...
'dependent',{'y'},'independent',{'x'},...
'coefficients',{'a', 'b', 'c', 'd'});
% Fit this model using new data
cf_ = fit(x(ok_),y(ok_),ft_,fo_);
% Alternatively uncomment the following lines to use coefficients from the % original fit. You can use this choice to plot the original fit against new % data. % cv_ = { -0.13255162167351081, 0.17148836668977852, 0.15308866561905898, 0.13255162175885007}; % cf_ = cfit(ft_,cv_{:});
% Plot this fit
h_ = plot(cf_,'fit',0.95);
set(h_(1),'Color',[100],...
'LineStyle','-', 'LineWidth',2,...
'Marker','none', 'MarkerSize',6);
% Turn off legend created by plot method. legend off;
% Store line handle and fit name for legend.
legh_(end+1) = h_(1);
legt_{end+1} = 'fit 1';
% --- Finished fitting and plotting data. Clean up. hold off;
% Display legend
leginfo_ = {'Orientation', 'vertical', 'Location', 'NorthEast'};
h_ = legend(ax_,legh_,legt_,leginfo_{:});
set(h_,'Interpreter','none');
% Remove labels from x- and y-axes. xlabel(ax_,'');
ylabel(ax_,'');
Je nachdem, wie die tatsächlichen Signale aussehen, muss man das vielleicht noch etwas anpassen.
Grüße,
Harald
Einstellungen und Berechtigungen
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.