From 5cac3876cd482683cd42c2fc1a27858ce580af00 Mon Sep 17 00:00:00 2001 From: stwilliams333 Date: Wed, 14 Jun 2023 16:45:15 -0500 Subject: [PATCH] Excitation cost allowable error and error center from xml --- .../CostTerms/calcMuscleExcitationPenaltyCost.m | 6 ++++-- src/MuscleTendonPersonalization/Optimization/calcMtpCost.m | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/MuscleTendonPersonalization/Optimization/CostTerms/calcMuscleExcitationPenaltyCost.m b/src/MuscleTendonPersonalization/Optimization/CostTerms/calcMuscleExcitationPenaltyCost.m index 5de8a3e2f..505251aee 100644 --- a/src/MuscleTendonPersonalization/Optimization/CostTerms/calcMuscleExcitationPenaltyCost.m +++ b/src/MuscleTendonPersonalization/Optimization/CostTerms/calcMuscleExcitationPenaltyCost.m @@ -27,13 +27,15 @@ function cost = calcMuscleExcitationPenaltyCost(modeledValues, ... experimentalData, costTerm) +errorCenter = valueOrAlternate(costTerm, "errorCenter", 0.5); +maximumAllowableError = valueOrAlternate(costTerm, "maxAllowableError", 0.25); muscleExcitationsConstraint = modeledValues.muscleExcitationsNoTDelay(: , ... setdiff(1 : size(modeledValues.muscleExcitationsNoTDelay, 2), ... [experimentalData.synergyExtrapolation.missingEmgChannelGroups{:}]), ... experimentalData.numPaddingFrames + 1 : ... size(modeledValues.muscleExcitationsNoTDelay, 3) - ... experimentalData.numPaddingFrames); -cost = 120 * (muscleExcitationsConstraint - 0.5) .^ 8; +cost = 30 / maximumAllowableError * (muscleExcitationsConstraint - errorCenter) .^ 8; cost(isnan(cost))=0; -cost = sum([sqrt(0.1) .* cost ].^ 2, 'all'); +cost = sum((sqrt(0.1) .* cost).^ 2, 'all'); end \ No newline at end of file diff --git a/src/MuscleTendonPersonalization/Optimization/calcMtpCost.m b/src/MuscleTendonPersonalization/Optimization/calcMtpCost.m index a1783a618..7ec645d8d 100644 --- a/src/MuscleTendonPersonalization/Optimization/calcMtpCost.m +++ b/src/MuscleTendonPersonalization/Optimization/calcMtpCost.m @@ -76,7 +76,7 @@ synxModeledValues, modeledValues, experimentalData, costTerm); case "muscle_excitation_penalty" cost = calcMuscleExcitationPenaltyCost( ... - synxModeledValues, experimentalData);%, costTerm); + synxModeledValues, experimentalData, costTerm); otherwise throw(MException('', 'Cost term %s is not valid for MTP', ... costTerm.type))