Calculate Five-Cycle Electric Vehicle Range Adjustment Factor
This example shows how to calculate the five-cycle electric vehicle (EV) range adjustment factor using the SAE J1634 [1] method. This factor helps determine the miles per gallon equivalent (MPGe) displayed on the Monroney sticker, providing a more realistic estimate of MPGe than the default adjustment factor of 0.7.

To calculate the adjustment factor, use data from the five-cycle and two-cycle fuel economy (FE) tests. The two-cycle FE test provides fuel economy data based on standardized city and highway driving cycles, while the five-cycle FE test captures more realistic real world driving cycles, conditions, and styles.
To calculate the five-cycle FE, use data from these tests:
Federal test procedure (FTP-75)
Highway fuel economy test (HWFET)
US06
SC03
Cold FTP
To calculate the combined two-cycle FE, use data from one of these tests:
Single cycle test (SCT)
Multi-cycle test (MCT)
Short multi-cycle test (SMCT)
Short multi-cycle test with steady-state speed segments (SMCT+)
You can obtain the required data from either a virtual vehicle model or a dynamometer. Physical testing requires extensive procedures outlined in SAE J1634. In contrast, you can perform simulation-based calculations without many of the detailed testing requirements specified in the standard. For more information on collecting simulation data using a virtual vehicle model, see Simulate Five-Cycle Energy Consumption Tests Using Virtual Vehicle Model.
After running the tests and preparing the input data, you are ready to calculate the adjustment factor.
In this example, follow these steps to calculate the adjustment factor:
Set up the five-cycle and two-cycle energy consumption tables.
Set the recharge allocation factor.
Calculate the energy per mile.
Calculate the adjustment factor with and without thermal conditioning.
Set Up Energy Consumption Tables
Set up the five-cycle and two-cycle energy consumption tables.
Five-Cycle Energy Consumption Table
Enter these parameter values for the five-cycle energy consumption table:
Test data keys
Test names
Bag names
Time ranges
Variable names
Number of rows
testDataKey5 =["FTP75"; "FTP75"; "FTP75"; "HWFET"; "US06"; "US06"; "SC03";"FTP75";"FTP75";"FTP75"]; testNames5 =
[ "FTP"; "FTP"; "FTP"; "HFEDS"; "US06"; "US06"; "SC03";"20F FTP";"20F FTP"; "20F FTP CD"]; bagNames5 =
["1"; "2"; "3"; "1"; "City"; "Highway"; "1";"1";"3";"All"]; timeRanges5 =
{[0, 505], [505, 1374], [1969, inf], [], [0, 131; 496, 600], [131, 496], [],[0,505],[1969, inf],[0 inf]}; varNames5 =
["Test", "Bag", "whDC/mile","mile/kWhDC","mile/kWhAC"]; numRows5 = length(testDataKey5);
Create the table.
cycleEnrgyTbl5 = table(testNames5, bagNames5, zeros(numRows5,1), zeros(numRows5,1),zeros(numRows5,1),VariableNames=varNames5);
Two-Cycle Energy Consumption Table
Enter these parameter values for the two-cycle energy consumption table:
Test data keys
Test names
Bag names
Time ranges
Variable names
Number of rows
testDataKey2 =["FTP75"; "HWFET"]; testNames2 =
["CD UDDS";"CD HFEDS"]; bagNames2 =
[" "; " "]; timeRanges2 =
{[0, inf], [0, inf]}; varNames2 =
["Test", "Bag", "whDC/mile","mile/kWhDC","mile/kWhAC"]; numRows2 = length(testDataKey2);
Create the table.
cycleEnrgyTbl2 = table(testNames2, bagNames2, zeros(numRows2,1),zeros(numRows2,1),zeros(numRows2,1),VariableNames=varNames2);
Set Recharge Allocation Factor
Enter values for the recharge allocation factor (RAF). The RAF is the ratio of the full depletion AC recharge energy and the full depletion DC discharge energy. The values in this example are from the SAE J1634 documentation.
RAF75F =1.15; RAF20F =
1.25;
Calculate Energy Per Mile
You can calculate the energy per mile using simulation data or dynamometer data. When the check box is selected, the example uses the simulation data stored to the CycleSimData.mat file. When the check box is not selected, the example uses dynamometer data provided in the J1634 documentation.
iftrue useSimulationData=true; else useSimulationData=false; end
Simulation Data
Calculate the five-cycle and two-cycle energy per mile values using the simulation data saved to the file CycleSimData.mat. This data was generated using an EV-configured virtual vehicle model. The 20F FTP drive cycle was not simulated when generating the test dataset for this example. As a result, the values for Bags 1, 3, and all charge-depleting (CD) bags are placeholders taken from the FTP75 cycle. See Simulate Five-Cycle Energy Consumption Tests Using Virtual Vehicle Model.
if useSimulationData unzip("CycleSimData.zip") simData = load("CycleSimData.mat"); simData = simData.simData; for i = 1:(numRows5-3) cycleData5 = simData(testDataKey5(i)); enrgyPerDist5 = getEvPwrPerDist(cycleData5.VehSpd, cycleData5.BattPwr, timeRanges5{i}); cycleEnrgyTbl5.("whDC/mile")(i) = enrgyPerDist5; cycleEnrgyTbl5.("mile/kWhDC")(i) = 1000/enrgyPerDist5; cycleEnrgyTbl5.("mile/kWhAC")(i) = 1000/enrgyPerDist5/RAF75F; end for i = (numRows5-2):numRows5 cycleData5 = simData(testDataKey5(i)); enrgyPerDist5 = getEvPwrPerDist(cycleData5.VehSpd, cycleData5.BattPwr, timeRanges5{i}); cycleEnrgyTbl5.("whDC/mile")(i) = enrgyPerDist5; cycleEnrgyTbl5.("mile/kWhDC")(i) = 1000/enrgyPerDist5; cycleEnrgyTbl5.("mile/kWhAC")(i) = 1000/enrgyPerDist5/RAF20F; end disp(cycleEnrgyTbl5) for i = 1:numRows2 cycleData2 = simData(testDataKey2(i)); enrgyPerDist2 = getEvPwrPerDist(cycleData2.VehSpd, cycleData2.BattPwr, timeRanges2{i}); cycleEnrgyTbl2.("whDC/mile")(i) = enrgyPerDist2; cycleEnrgyTbl2.("mile/kWhDC")(i) = 1000/enrgyPerDist2; cycleEnrgyTbl2.("mile/kWhAC")(i) = 1000/enrgyPerDist2/RAF75F; end disp(cycleEnrgyTbl2) end
Test Bag whDC/mile mile/kWhDC mile/kWhAC
____________ _________ _________ __________ __________
"FTP" "1" 220.11 4.5432 3.9506
"FTP" "2" 208.23 4.8024 4.176
"FTP" "3" 224 4.4644 3.8821
"HFEDS" "1" 211.9 4.7192 4.1037
"US06" "City" 354.03 2.8246 2.4562
"US06" "Highway" 284.22 3.5184 3.0594
"SC03" "1" 221.34 4.5179 3.9286
"20F FTP" "1" 220.11 4.5432 3.6346
"20F FTP" "3" 224 4.4644 3.5715
"20F FTP CD" "All" 217.21 4.6038 3.683
Test Bag whDC/mile mile/kWhDC mile/kWhAC
__________ ___ _________ __________ __________
"CD UDDS" " " 217.21 4.6038 4.0033
"CD HFEDS" " " 211.9 4.7192 4.1037
Dynamometer Data
When simulation data is not available, calculate the five-cycle and two-cycle energy per mile using test or energy consumption dynamometer data. Enter values for the five-cycle and two-cycle energy consumption tables. The values in this example are provided from the J1634 documentation.
if ~useSimulationData cycleEnrgyTbl5{1,3}=216.3; %FTP Bag 1 cycleEnrgyTbl5{2,3}=
204.6; %FTP Bag 2 cycleEnrgyTbl5{3,3}=
210.2; %FTP Bag 3 cycleEnrgyTbl5{4,3}=
188.6; %HFEDS Bag 1 cycleEnrgyTbl5{5,3}=
315.8; %US06 City cycleEnrgyTbl5{6,3}=
219.7; %US06 Highway cycleEnrgyTbl5{7,3}=
312.5; %SC03 Bag 1 cycleEnrgyTbl5{8,3}=
438.7; %20F FTP Bag 1 cycleEnrgyTbl5{9,3}=
426.5; %20F FTP Bag 2 cycleEnrgyTbl5{10,3}=
406.1; %20F FTP CD All for i = 1:7 cycleEnrgyTbl5.("mile/kWhDC")(i) = 1000/cycleEnrgyTbl5.("whDC/mile")(i); cycleEnrgyTbl5.("mile/kWhAC")(i) = 1000/cycleEnrgyTbl5.("whDC/mile")(i)/RAF75F; end for i = 8:10 cycleEnrgyTbl5.("mile/kWhDC")(i) = 1000/cycleEnrgyTbl5.("whDC/mile")(i); cycleEnrgyTbl5.("mile/kWhAC")(i) = 1000/cycleEnrgyTbl5.("whDC/mile")(i)/RAF20F; end cycleEnrgyTbl2{1,3}=
212.3458; %CD UDDS cycleEnrgyTbl2{2,3}=
186.633; %CD HFEDS for i = 1:2 cycleEnrgyTbl2.("mile/kWhDC")(i) = 1000/cycleEnrgyTbl2.("whDC/mile")(i); cycleEnrgyTbl2.("mile/kWhAC")(i) = 1000/cycleEnrgyTbl2.("whDC/mile")(i)/RAF75F; end disp(cycleEnrgyTbl5) disp(cycleEnrgyTbl2) end
Calculate Adjustment Factor
The calculateFE helper function uses methods from SAE J1634 Appendix B to calculate the adjustment factor. You will calculate two adjustment factor values. One using DC energy consumption when there is no thermal conditioning, and one using AC energy consumption when thermal conditioning is present.
calculateFE(cycleEnrgyTbl5, cycleEnrgyTbl2)
CityFE HighwayFE Combined5CycleFE Combined2CycleFE AdjFactor
______ _________ ________________ ________________ _________
No Thermal Conditioning 4.0408 3.3946 3.722 4.655 0.79957
Thermal Conditioning 3.4624 2.9519 3.2124 4.0478 0.79361
type calculateFE.mfunction calculateFE(cycleEnrgyTbl5, cycleEnrgyTbl2)
% Extract values from cycleEnrgyTbl5
Bag1FTP_nTC = cycleEnrgyTbl5{1,4}; Bag2FTP_nTC = cycleEnrgyTbl5{2,4};
Bag3FTP_nTC = cycleEnrgyTbl5{3,4}; HFEDS_nTC = cycleEnrgyTbl5{4,4};
US06City_nTC = cycleEnrgyTbl5{5,4}; US06Highway_nTC = cycleEnrgyTbl5{6,4};
SC03_nTC = cycleEnrgyTbl5{7,4}; Bag120FColdFTP_nTC = cycleEnrgyTbl5{8,4};
Bag320FColdFTP_nTC = cycleEnrgyTbl5{9,4}; CD20FColdFTP_nTC = cycleEnrgyTbl5{10,4};
Bag1FTP_wTC = cycleEnrgyTbl5{1,5}; Bag2FTP_wTC = cycleEnrgyTbl5{2,5};
Bag3FTP_wTC = cycleEnrgyTbl5{3,5}; HFEDS_wTC = cycleEnrgyTbl5{4,5};
US06City_wTC = cycleEnrgyTbl5{5,5}; US06Highway_wTC = cycleEnrgyTbl5{6,5};
SC03_wTC = cycleEnrgyTbl5{7,5}; Bag120FColdFTP_wTC = cycleEnrgyTbl5{8,5};
Bag320FColdFTP_wTC = cycleEnrgyTbl5{9,5}; CD20FColdFTP_wTC = cycleEnrgyTbl5{10,5};
% City FE Calculation
RunningFC_nTC = 0.82*(0.48/Bag2FTP_nTC + 0.41/Bag3FTP_nTC + 0.11/US06City_nTC) + ...
0.18*(1/CD20FColdFTP_nTC) + 0.133*1.083*(1/SC03_nTC - (0.61/Bag3FTP_nTC + 0.39/Bag2FTP_nTC));
StartFuelFTP_nTC = 3.6*(1/Bag1FTP_nTC - 1/Bag3FTP_nTC);
StartFuel20FColdFTP_nTC = 3.6*(1/Bag120FColdFTP_nTC - 1/Bag320FColdFTP_nTC);
StartFC_nTC = 0.33*((0.76*StartFuelFTP_nTC + 0.24*StartFuel20FColdFTP_nTC)/4.1);
CityFE_nTC = 0.92/(StartFC_nTC + RunningFC_nTC);
RunningFC_wTC = 0.82*(0.48/Bag2FTP_wTC + 0.41/Bag3FTP_wTC + 0.11/US06City_wTC) + ...
0.18*(1/CD20FColdFTP_wTC) + 0.133*1.083*(1/SC03_wTC - (0.61/Bag3FTP_wTC + 0.39/Bag2FTP_wTC));
StartFuelFTP_wTC = 3.6*(1/Bag1FTP_wTC - 1/Bag3FTP_wTC);
StartFuel20FColdFTP_wTC = 3.6*(1/Bag120FColdFTP_wTC - 1/Bag320FColdFTP_wTC);
StartFC_wTC = 0.33*((0.76*StartFuelFTP_wTC + 0.24*StartFuel20FColdFTP_wTC)/4.1);
CityFE_wTC = 0.92/(StartFC_wTC + RunningFC_wTC);
% Highway FE Calculation
RunningFC_nTC = 1.007*(0.79/US06Highway_nTC + 0.21/HFEDS_nTC) + ...
0.133*0.377*(1/SC03_nTC - (0.61/Bag3FTP_nTC + 0.39/Bag2FTP_nTC));
StartFC_nTC = 0.33*((0.76*StartFuelFTP_nTC + 0.24*StartFuel20FColdFTP_nTC)/60);
HighwayFE_nTC = 0.92/(StartFC_nTC + RunningFC_nTC);
RunningFC_wTC = 1.007*(0.79/US06Highway_wTC + 0.21/HFEDS_wTC) + ...
0.133*0.377*(1/SC03_wTC - (0.61/Bag3FTP_wTC + 0.39/Bag2FTP_wTC));
StartFC_wTC = 0.33*((0.76*StartFuelFTP_wTC + 0.24*StartFuel20FColdFTP_wTC)/60);
HighwayFE_wTC = 0.92/(StartFC_wTC + RunningFC_wTC);
% Combined 5-cycle FE
Combined5CycleFE_nTC = 1/(0.55/CityFE_nTC + 0.45/HighwayFE_nTC);
Combined5CycleFE_wTC = 1/(0.55/CityFE_wTC + 0.45/HighwayFE_wTC);
% Combined 2-cycle CD results
CityFE_nTC_2cycle = cycleEnrgyTbl2{1,4}; HighwayFE_nTC_2cycle = cycleEnrgyTbl2{2,4};
CityFE_wTC_2cycle = cycleEnrgyTbl2{1,5}; HighwayFE_wTC_2cycle = cycleEnrgyTbl2{2,5};
% Combined 2-cycle CD test DC Discharge FE
Combined2CycleFE_nTC = 1/(0.55/CityFE_nTC_2cycle + 0.45/HighwayFE_nTC_2cycle);
Combined2CycleFE_wTC = 1/(0.55/CityFE_wTC_2cycle + 0.45/HighwayFE_wTC_2cycle);
% Adjustment Factors
AdjFactor_nTC = Combined5CycleFE_nTC / Combined2CycleFE_nTC;
AdjFactor_wTC = Combined5CycleFE_wTC / Combined2CycleFE_wTC;
% Create and display results table
VariableNames = {'CityFE', 'HighwayFE', 'Combined5CycleFE', 'Combined2CycleFE', 'AdjFactor'};
NoTC = [CityFE_nTC, HighwayFE_nTC, Combined5CycleFE_nTC, Combined2CycleFE_nTC, AdjFactor_nTC];
WithTC = [CityFE_wTC, HighwayFE_wTC, Combined5CycleFE_wTC, Combined2CycleFE_wTC, AdjFactor_wTC];
ResultsTable = array2table([NoTC; WithTC], ...
'VariableNames', VariableNames, ...
'RowNames', {'No Thermal Conditioning', 'Thermal Conditioning'});
disp(ResultsTable);
end
References
[1] SAE J1634. "Battery Electric Vehicle Energy Consumption and Range Test Procedure". Warrendale, PA: SAE International, revised April 2021, issued May 1993. https://doi.org/10.4271/J1634_202104.
See Also
Simulate Five-Cycle Energy Consumption Tests Using Virtual Vehicle Model
























