Contenuto principale

Frequency Response to Steering Angle Input

R2026b

This example shows how to use the vehicle dynamics swept-sine steering reference application to analyze the dynamic steering response to steering inputs. Specifically, you can examine the vehicle frequency response and lateral acceleration when you run the maneuver with different sinusoidal wave steering amplitudes.

The swept-sine steering maneuver tests the vehicle frequency response to steering inputs. In the test, the driver:

  • Accelerates until the vehicle hits a target velocity.

  • Commands a sinusoidal steering wheel input.

  • Linearly increases the frequency of the sinusoidal wave.

For more information about the reference application, see Swept-Sine Steering Maneuver.

vdynblksSweptSineSteeringStart;

Run a Swept-Sine Steering Maneuver

1. Open the Swept Sine Reference Generator block. By default, the maneuver is set with these parameters:

  • Longitudinal velocity setpoint — 30 mph

  • Steering amplitude — 90 deg

  • Final frequency — 0.7 Hz

2. In the Visualization subsystem, open the 3D Engine block. By default, the 3D Engine parameter is set to Disabled. Simulating models in the 3D visualization environment requires Simulink® 3D Animation™. For the 3D visualization engine platform requirements and hardware recommendations, see the Unreal Engine Simulation Environment Requirements and Limitations.

3. Run the maneuver with the default settings. As the simulation runs, view the vehicle information.

mdl = 'SSSReferenceApplication';
sim(mdl);
### Searching for referenced models in model 'SSSReferenceApplication'.
### Total of 3 models to build.
### Starting serial model build.
### Starting model reference simulation target build for: Driveline
### Successfully updated the model reference simulation target for: Driveline
### Starting model reference simulation target build for: PassVeh14DOF
### Successfully updated the model reference simulation target for: PassVeh14DOF
### Starting model reference simulation target build for: SiMappedEngineV
### Successfully updated the model reference simulation target for: SiMappedEngineV

Build Summary

Model reference simulation targets:

Model            Build Reason                                        Status                        Build Duration
=================================================================================================================
Driveline        Target (Driveline_msf.mexw64) did not exist.        Code generated and compiled.  0h 0m 34.955s
PassVeh14DOF     Target (PassVeh14DOF_msf.mexw64) did not exist.     Code generated and compiled.  0h 2m 35.138s
SiMappedEngineV  Target (SiMappedEngineV_msf.mexw64) did not exist.  Code generated and compiled.  0h 0m 19.873s

3 of 3 models built (0 models already up to date)
Build duration: 0h 3m 55.016s

  • In the Vehicle Position window, view the vehicle longitudinal distance as a function of the lateral distance. The yellow line is the yaw rate. The blue line is the steering angle.

  • In the Visualization subsystem, open the Yaw Rate and Steer Scope block to display the yaw rate and steering angle versus time.

Sweep Steering

Run the reference application with three different sinusoidal wave steering amplitudes.

1. In the swept-sine steering reference application model SSSReferenceApplication, open the Swept Sine Reference Generator block. The Steering amplitude block parameter sets the amplitude. By default, the amplitude is 90 deg.

2. Enable signal logging for the velocity, lane, and ISO signals. You can use the Simulink® editor or, alternatively, these MATLAB® commands. Save the model.

  • Enable signal logging for the Swept Sine Reference Generator output port signal.

ph=get_param([mdl '/Swept Sine Reference Generator'],'PortHandles');
set_param(ph.Outport(1),'DataLogging','on');
  • Enable signal logging for the Passenger Vehicle block output port signal.

ph=get_param([mdl '/Passenger Vehicle'],'PortHandles');
set_param(ph.Outport(1),'DataLogging','on');
  • In the Visualization subsystem, enable signal logging for the ISO block.

set_param([mdl '/Visualization/ISO 15037-1:2006'],'Measurement','Enable');

3. Set up a steering amplitude vector, amp, that you want to investigate. For example, at the command line, type:

amp = [60, 90, 120];
numExperiments = length(amp);

4. Create an array of simulation inputs that set the Swept Sine Reference Generator block parameter Steering amplitude, steerAmp equal to amp.

for idx = numExperiments:-1:1
    in(idx) = Simulink.SimulationInput(mdl);
    in(idx) = in(idx).setBlockParameter([mdl '/Swept Sine Reference Generator'],...
        'steerAmp',num2str(amp(idx)));
end

5. Save the model and run the simulations. If available, use parallel computing.

save_system(mdl)
simout = parsim(in,'ShowSimulationManager','on');
[19-Jun-2026 22:16:28] Checking for availability of parallel pool...
[19-Jun-2026 22:16:28] Starting Simulink on parallel workers...
[19-Jun-2026 22:16:33] Loading project on parallel workers...
[19-Jun-2026 22:16:33] Configuring simulation cache folder on parallel workers...
[19-Jun-2026 22:16:33] Loading model on parallel workers...
[19-Jun-2026 22:17:30] Running simulations...
[19-Jun-2026 22:18:38] Completed 1 of 3 simulation runs
[19-Jun-2026 22:18:38] Received simulation output (size: 15.02 MB) for run 2 from parallel worker.
[19-Jun-2026 22:18:38] Completed 2 of 3 simulation runs
[19-Jun-2026 22:18:38] Received simulation output (size: 15.03 MB) for run 3 from parallel worker.
[19-Jun-2026 22:18:39] Completed 3 of 3 simulation runs
[19-Jun-2026 22:18:39] Received simulation output (size: 15.02 MB) for run 1 from parallel worker.
[19-Jun-2026 22:18:39] Cleaning up parallel workers...

Use Simulation Data Inspector to Analyze Results

Use the Simulation Data Inspector to examine the results. You can use the UI or, alternatively, command-line functions.

1. Open the Simulation Data Inspector. On the Simulink Toolstrip, on the Simulation tab, under Review Results, click Data Inspector.

  • In the Simulation Data Inspector, select Import.

  • In the Import dialog box, clear logsout. Select simout(1), simout(2), and simout(3). Select Import.

  • Use the Simulation Data Inspector to examine the results.

2. Alternatively, use these MATLAB commands to plot data for each run. For example, use these commands to plot the lateral position, steering wheel angle, and lateral acceleration. The results are similar to these plots, which show the results for each run.

for idx = 1:numExperiments
    simoutRun(idx)=Simulink.sdi.Run.create;
    simoutRun(idx).Name=['Amplitude = ', num2str(amp(idx))];
    add(simoutRun(idx),'vars',simout(idx));
end
sigcolor=[0 1 0;0 0 1;1 0 1];
for idx = 1:numExperiments
    ysignal(idx)=getSignalsByName(simoutRun(idx), 'Passenger Vehicle:1.Body.InertFrm.Cg.Disp.Y');
    ysignal(idx).LineColor =sigcolor((idx),:);
    ssignal(idx)=getSignalsByName(simoutRun(idx), 'SteerAngle');
    ssignal(idx).LineColor =sigcolor((idx),:);
    asignal(idx)=getSignalsByName(simoutRun(idx), 'ay');
    asignal(idx).LineColor =sigcolor((idx),:);
end
Simulink.sdi.view
Simulink.sdi.setSubPlotLayout(3,1);
for idx = 1:numExperiments
    plotOnSubPlot(ysignal(idx),1,1,true);
    plotOnSubPlot(ssignal(idx),2,1,true);
    plotOnSubPlot(asignal(idx),3,1,true);
end

The results are similar to these plots, which indicate that the greatest lateral acceleration occurs when the steering amplitude is 120 deg.

Further Analysis

Extract the lateral acceleration, steering angle, and vehicle trajectory from the simout object to compare steering response across amplitudes.

1. Extract the lateral acceleration and steering angle. Plot the data. The results are similar to this plot.

figure
for idx = 1:numExperiments
    log = get(simout(idx),'logsout');
    sa=log.get('SteerAngle').Values;
    ay=log.get('<ay>').Values;
    legend_labels{idx} = ['amplitude = ', num2str(amp(idx)), '^{\circ}'];
    plot(sa.Data,ay.Data)
    hold on
end
legend(legend_labels, 'Location', 'best');
title('Lateral Acceleration')
xlabel('Steering Angle [deg]')
ylabel('Acceleration [m/s^2]')
grid on

2. Extract the vehicle path. Plot the data. The results are similar to this plot.

figure
for idx = 1:numExperiments
    xValues = getSignalsByName(simoutRun(idx), 'Passenger Vehicle:1.Body.InertFrm.Cg.Disp.X').Values;
    yValues = getSignalsByName(simoutRun(idx), 'Passenger Vehicle:1.Body.InertFrm.Cg.Disp.Y').Values;
    x = xValues.Data;
    y = yValues.Data;
    legend_labels{idx} = ['amplitude = ', num2str(amp(idx)), '^{\circ}'];
    axis('equal')
    plot(y,x)
    hold on
end
legend(legend_labels, 'Location', 'best');
title('Vehicle Path')
xlabel('Y Position [m]')
ylabel('X Position [m]')
grid on

See Also

| |

Topics