40 lines
1.3 KiB

  1. function sample_data(t, x, Ts, A0, omega, filename)
  2. % SAMPLE_DATA - Resamples pendulum simulation data and exports to CSV
  3. %
  4. % Usage:
  5. % sample_pendulum_data(t, x, Ts, A0, omega, filename)
  6. %
  7. % Inputs:
  8. % t - time vector from ODE solver (e.g., from ode45)
  9. % x - state matrix [q(t), dq(t)]
  10. % Ts - sampling period (in seconds)
  11. % A0 - input amplitude for u(t) = A0 * sin(omega * t)
  12. % omega - input frequency (in rad/s)
  13. % filename - output CSV filename
  14. % Time vector for resampling
  15. t_sampled = t(1):Ts:t(end);
  16. % Resample q and dq using interpolation
  17. q_sampled = interp1(t, x(:,1), t_sampled);
  18. dq_sampled = interp1(t, x(:,2), t_sampled);
  19. % Estimate second derivative using central finite differences
  20. ddq_sampled = zeros(size(q_sampled));
  21. N = length(q_sampled);
  22. for k = 2:N-1
  23. ddq_sampled(k) = (q_sampled(k+1) - 2*q_sampled(k) + q_sampled(k-1)) / Ts^2;
  24. end
  25. % Evaluate input u(t)
  26. u_sampled = A0 * sin(omega * t_sampled);
  27. % Create table and export to CSV
  28. T = table(t_sampled', q_sampled', dq_sampled', ddq_sampled', u_sampled', ...
  29. 'VariableNames', {'t', 'q', 'dq', 'ddq', 'u'});
  30. writetable(T, filename);
  31. fprintf('Sampling data saved to file: %s\n', filename);
  32. end