Abstract
This paper introduces a novel gait parameterization method that models gait kinematics as a continuous function of gait cycle phase, walking speed, and ground slope. Kinematic data was recorded from seven able-bodied subjects walking on a treadmill at twenty-seven combinations of walking speed and ground slope. Convex optimization was used to determine the parameters of a function of three variables that fits this experimental data. This function may be able to provide desired trajectories to a virtual constraint controller over a continuum of gait phases and ambulation modes. This could allow for a single, non-switching controller to control a prosthetic leg for a variety of tasks, avoiding many of the problems associated with the ubiquitous use of finite state machines in prosthesis control.
I. Introduction
Biped locomotion is an incredibly complicated hybrid dynamic activity, requiring the synchronization of links while providing propulsion, shock absorption, stance stability, and energy conservation across continuously varying ambulation modes or environments. Due to this complexity, analysis of the continuous human gait cycle is traditionally split into different ambulation modes, herein referred to as tasks, and the gait cycles within tasks are further split into distinct periods called phases [1].
Task and gait cycle discretization is also a common practice in the design of controllers for powered prosthetic legs. Most control algorithms will first define a finite number of tasks (e.g., level ground walking, ramp ascent on a specific slope, ramp descent on a specific slope, walking at specific slow, normal, or fast speeds, etc.) and use a finite state machine (FSM) to switch between these tasks using intent recognition [2]–[4]. Each task is further subdivided into periods analogous to those in conventional gait analysis, resulting in a large number of independent tuning parameters [5]–[7]. There are techniques to mitigate the time needed to tune this number of personalized parameters [8], but the FSM method is fundamentally constrained to a discrete set of tasks and gait cycle periods, not the full continuum of possible human locomotion.
Virtual constraints are an effective technique for the elimination of finite state machines in the field of bipedal robots. A virtual constraint is any constraint on the state space of a system that is enforced through feedback control alone [9]. Virtual constraints help to synchronize the movement of each link of a robot to a phase variable. A phase variable is a mechanical signal that grows monotonically with time in the absence of perturbation. By using virtual constraints, biped robots can successfully ambulate in the presence of terrain variation and velocity perturbations, all with one, non-switching controller [10].
Gregg et al. [11] have experimentally demonstrated that using virtual constraints to unify the stance period of gait allows transfemoral amputees to walk at a variety of cadences with just one controller for stance. Recent work has shown that it is possible to robustly parameterize an entire gait cycle with a single phase variable [12], which has been used in the virtual constraint controller of a powered knee-ankle prosthetic leg to achieve steady-state stable gaits in simulation and experiments [13], [14]. However, this controller is designed for one desired joint trajectory at a time and would require the use of a FSM to switch between tasks. For an ankle prosthesis using a lead screw actuator, [15] demonstrates a mapping from percent gait and stride length to desired lead screw position. As stride length is related to forward speed, this mapping could be said to unify the gait cycle across speeds alone. Leroux et al. [16] analyzed human gait kinematics at five inclines and two speeds but did not suggest a continuous parameterization for use in control.
The objective of this research is to unify the gait cycle across a range of tasks, specifically walking speeds and inclines. To do so, we will propose a method for the continuous parameterization of human joint kinematics as a function of a phase variable and a task variable. In the context of this paper, a task variable is defined as a multidimensional numeric description of ambulation mode. We will then show an example that suggests that given a sufficient set of kinematic data over a range of tasks we are able to construct a set of gait basis functions. Linear combinations of these gait basis functions accurately describe the training data and can be used to predict kinematics for untrained tasks. This kinematic function could then be implemented into a virtual constraint controller, allowing for robust ambulation across a continuum of gait phases and tasks.
Section II-A and II-B outline the procedure for acquiring and post-processing the kinematic data. Section II-C describes the process of fitting experimental data with gait parameterization functions. Section II-D outlines a procedure to determine the goodness-of-fit of this function to both the data it was trained on and data withheld from the training process. Section II-E gives a similar algorithm for evaluating an ideal FSM, which will be used as a measure of comparison. Section III fits a gait parameterization function to our experimental data and compares the effectiveness of this function to predict gait kinematics to that of a FSM. Section IV-A and IV-B discuss some interpretations of this method of gait parameterization and how the process can be built upon with convex optimization. Finally, Section IV-C concludes the paper and outlines future work.
II. Methods
A. Experimental Protocol
The experimental protocol was approved by the Institutional Review Board at the University of Texas at Dallas. All subjects provided written informed consent and self-reported the ability to walk over uneven ground and avoid obstacles with ease. Our subject pool consisted of 7 able-bodied subjects (4 female) with a mean age of 22 years (σ = 2.7 years), mean height of 167 cm (σ = 6.7 cm), and mean weight of 61 kg (σ = 7.7 kg).
Subjects walked for several trials of one minute intervals on an instrumented Bertec treadmill while a 10-camera Vicon motion capture system recorded their lower body kinematics at 100 Hz. During each trial, the subject walked at a constant speed of either 0.8 m/s, 1.0 m/s, or 1.2 m/s (respectively slow, normal, and fast) and a constant ground slope ranging from −10 degrees to +10 degrees at 2.5 degree increments. These inclines were selected to exceed the range of inclines of [16]. The order of all trials was randomized and breaks were taken as needed to prevent fatigue. Each subject walked at every combination of these three speeds and nine inclines, giving a total of 27 trials. For the purpose of this paper, each trial is defined as a separate task and given a unique identifier, θj with j = 1, 2, ..., 27.
B. Data Processing
To synchronize between strides, the time axis of each stride's kinematic trajectory is normalized from 0 to 1 (i.e., 0%-100% gait) and interpolated to contain L = 1001 data points. The normalized time axis can then be interpreted as a discrete phase variable 0 ≤ ϕi < 1 where i = 1, 2, ..., L, and .
Human gait has natural variability, so joint angle data is treated as a random variable. The expected value of a measured joint angle for a specific subject at discrete phase variable value ϕi and task variable value θj is defined as . The across subject mean at a particular ϕi and θj value will be referred to as . The standard error between subject means is referred to as .
C. Gait Parameterization
We will now outline how to parameterize a continuous function q(ϕ, θ), where q is the angular position of a joint as a function of phase variable ϕ and task variable θ. The phase variable ϕ is cyclic and bounded (0 ≤ ϕ < 1), where ϕ = 0 represents the start of a gait cycle, and ϕ = 1 denotes the end of that gait cycle and the start of the next. The task variable θ is a vector where each element is a numeric description of ambulation mode. Dimensions of the vector θ could include walking speed, ground slope, stair grade, etc., but in this paper we only consider the first two categories. Our experiments covered 27 combinations of three speeds and nine inclines, resulting in 27 vector values of θj.
We begin by modeling q(ϕ, θ) as a scalar, separable function of ϕ and θ:
| (1) |
The index k runs from 1, 2, ..., N and denotes the number of and functions used. The gait basis functions, bk(ϕ), map from ϕ to joint kinematics, and will be determined with convex optimization. The task coefficient functions, ck(θ), determine the coefficients of the linear combination of gait basis functions for a given task. We explicitly define these coefficient functions before determining the basis functions to ensure intuitive relationships with task. Every ck(θ) must be continuous on θ in order to make q(ϕ, θ) continuous on θ. They also must be linearly independent on the discretized domain of θj with j = 1, 2, ..., M, the tasks used to fit (1) to experimental data. Selecting a large value of N usually decreases the fitting error in this step, but runs the risk of overfitting the data. The author's experience has shown that N ≈ 7 works well for both the knee and ankle joint, and that polynomials of order ≤ 3 work well for ck(θ).
The next objective is to select functions bk(ϕ) such that (1) will approximately fit the experimental data. To do so, we will optimize across bk(ϕi) such that
| (2) |
To incorporate the natural variability of human gait, we will scale the error in degrees, , by dividing it by the standard error, SE(xϕi, θj). This will cause our optimization process to fit bk(ϕi)ck(θj) more closely to for values of ϕi and θj where the standard error is small. Finding the optimal values of bk(ϕi) for this objective is easily solved with a linear optimization program (LP). First define the matrices:
| (3) |
which will be used in the LP. Note that the matrix C needs to be full rank, which creates the previously mentioned constraint that the functions ck(θ) must be linearly independent functions on the domain of θj with j = 1, 2, ..., M. To find an optimal solution for (2), solve the LP:
| (4) |
The solution of (4) gives optimal ρ = ρ* and B = B*. To calculate discrete values of the joint angular position, as in (2), we define as the element in the kth column and ith row of B* and define the discrete form of (1):
| (5) |
The final step in defining (1) is to fit a continuous function through each vector of discrete values for i = 1, 2, ..., L to form the continuous functions bk(ϕ). As each bk(ϕ) is periodic and real valued, Fourier Interpolation as in [13] should fit the data closely with few coefficients.
D. Evaluating the Parameterization
To evaluate how well (5) can predict untrained tasks, we define the training tasks (or training data) as θj with j = 1, 2, ..., M, and the validation tasks (or validation data) as θj with j = M + 1, M + 2, ..., P. For this paper, ten tasks were selected for training (M = 10) and seventeen for validation (P = 27). The tasks were selected such that one validation tasks lies between each training task, as can be seen in Table I. The validation tasks will be used exclusively to measure how closely (5) can predict untrained tasks and were not used in the fitting process (4). The error between the predicted kinematic value, q(ϕi, θj), and the real value found via experiments, , for task θj is defined as:
| (6) |
where q(ϕi, θj) is calculated as in (5). Taking the maximum over i gives the value of the largest error encountered in a gait cycle. This evaluation is repeated for all θj, giving an error value gj for each task. For j = 1, 2, ...M, gj is a measure of how well the training data is fit by (5), and will not exceed ρ* by definition. For j = M + 1, M + 2, ..., P, gj is a measure of how well we can predict untrained tasks.
TABLE I.
Tasks selected for training (denoted by ‘X’)
| Incline (deg) | −10 | −7.5 | −5 | −2.5 | 0 | 2.5 | 5 | 7.5 | 10 | |
|---|---|---|---|---|---|---|---|---|---|---|
| Speed (m/s) | 0.8 | X | X | X | X | X | ||||
| 1 | ||||||||||
| 1.2 | X | X | X | X | X | |||||
E. Comparison to Ideal Finite State Machine
The benefit of the proposed parameterization is demonstrated by comparing each gj from (6) to the performance of a comparable ideal FSM for untrained tasks. We will define such a FSM as one that has been defined with states corresponding to the same set of training data as the gait parameterization method. When provided with an input task, θj, the ideal FSM returns a kinematic trajectory of training data ( with i = 1, 2, ..., L) that would most closely match the untrained trajectory for θj. The amount of error this method would yield for untrained task θj with j = M + 1, ..., P is:
| (7) |
where gj is the error, which will be compared directly to the values of gj of the parameterization method. Taking the maximum over i gives the largest error encountered over a gait cycle, while taking the minimum over j′ returns the training data trajectory that best fits the untrained task θj. Although it may not be possible to achieve this FSM in real time, it is a useful standard of comparison, as it represents the minimum possible error with the FSM approach.
III. Results
A. Parameterizing Experimental Data
In this section, we will parameterize hip, knee, and ankle kinematics and evaluate the ability of the proposed parameterization to predict untrained task kinematics. Percent gait acts as the phase variable of (1), and θ was selected to reflect the two parameters tested in our experiments:
| (8) |
where t and ti are continuous and discrete time, respectively, from the beginning of a gait cycle, and T is the total time of a gait cycle. The term v is walking speed in m/s, while α is the ground slope in degrees. Their discrete counterparts, vj and αj, are the speed and ground slope of discrete task θj.
For each joint parameterization, polynomial functions of θ are chosen for ck(θ) for simplicity and continuity. The authors’ experience has shown that changes in gait due to difference in ground slope are more complex than changes due to difference in speed, so ck(θ) contains higher order polynomials of α than v in the following definitions:
| (9) |
These are all scalar valued, continuous on θ, and linearly independent functions on the training tasks θj with j = 1, 2, ..., 10, satisfying all conditions for ck(θ). Note that while the same functions ck(θ) are used for the hip, knee, and ankle joint in this example, this is not required. The choice of N = 7 provides a good compromise of fitting experimental data accurately without overfitting, and during previous testing it was found that a matrix of rank 7 could satisfactorily approximate the experimental data for all tasks. To ensure a simple mapping from gait speed and ground slope to desired trajectories, polynomial functions with rank ≤ 3 were selected for all ck(θ). This simplicity is an important design criterion, as in practice the gait coefficient functions will need to be reevaluated for every change in task. Each ck(θ) contains only one term, so it is not necessary to scale these functions with a constant. Solving (4) determines the scale of the corresponding gait basis function for each task coefficient function.
Equation (4) is solved to determine B* and ρ*, yielding:
| (10) |
This means that given from B*, (5) is always within 0.258, 0.325, or 0.242 standard errors of the training data X̄ for the hip, knee, and ankle kinematics, respectively. See the trained tasks in Table II.
TABLE II.
Comparison of Techniques
| Trained | Untrained | ||||||
|---|---|---|---|---|---|---|---|
| ḡ | max(g) | σ(g) | ḡ | max(g) | σ(g) | ||
| Hip | q(ϕi, θj) | 0.237 | 0.258 | 0.054 | 0.333 | 0.696 | 0.182 |
| FSM | 0 | 0 | 0 | 0.568 | 0.906 | 0.184 | |
| Knee | q(ϕi, θj) | 0.306 | 0.325 | 0.045 | 0.485 | 1.286 | 0.338 |
| FSM | 0 | 0 | 0 | 1.077 | 3.961 | 0.830 | |
| Ankle | q(ϕi, θj) | 0.223 | 0.242 | 0.040 | 0.358 | 0.676 | 0.132 |
| FSM | 0 | 0 | 0 | 0.765 | 1.335 | 0.285 | |
B. Evaluating the Parameterization of Experimental Data
Next, we compare the error in our prediction of all tasks, trained and untrained, to the errors that would result from the use of an ideal FSM. Table II shows the mean, max, and standard deviation of the error value gj for both the parameterization method (6) and the FSM (7). The FSM has zero error on trained tasks (j=1,2,...,10) by definition, unlike the parameterization method, which has some minor amount of error after the fitting process because it is a low-rank representation of the training data (see Section IV-A). The power of the parameterization method arises in its ability to predict untrained data (j=11,12,...,27). Table II shows that the function q(ϕi, θj) has about half of the mean and maximum error of the FSM method for the knee and ankle for untrained tasks and around 60% less error for the hip. A one-tailed t-test affirms that the parameterization method has statistically lower error on untrained data for the hip, knee, and ankle with p-levels of 3.54e-4, 0.0052 and 3.68e-6, respectively. See Fig. 1 and Fig. 2 for a comparison between the parameterization's predictions of kinematics at 1.0 m/s (plotted as a continuous surface across phase and ground slope) and untrained kinematic data at 1.0 m/s (plotted as red trajectories over phase at constant ground slopes). The gait parameterization function is simultaneously predicting accurate gait kinematics for an untrained speed, and four untrained ground slopes (−7.5 deg, −2.5 deg, 2.5 deg, and 7.5 deg) in these figures, see Table I.
Fig. 1.
A surface plot of (5) that has been fit to knee kinematics. In both figures, the speed dimension has been suppressed to a constant, 1.0 m/s and the trajectories shown in red are untrained.
Fig. 2.
A surface plot of (5) that has been fit to ankle kinematics.
IV. Discussion and Conclusion
A. Significance
Virtual constraints are a powerful technique for creating robust position based prosthesis controllers, but they require that desired trajectories are known for all tasks the prosthesis will perform. The parameterization technique detailed in this paper could allow a virtual constraint controller to calculate a desired kinematic trajectory on a continuum of tasks. For example, (1) could act as the tracking reference in a PD or feedback linearization control framework as in [9, (6.3)]. A portion of this task continuum can be viewed in Fig. 1 and Fig. 2. The results of Table II indicate that only a small subset of tasks need to be used for training the parameterization, and tasks in between can be interpolated with higher accuracy than using fixed states in a FSM.
The continuous gait parameterization method also facilitates an intuitive approach for analyzing how gait kinematics change in response to task changes. The contribution of bk(ϕ) to the kinematic output q(ϕ, θ) is proportional to ck(θ). Observations of the functions bk(ϕ) can highlight trends in gait kinematics. Take for example the plot of b1(ϕ) for the ankle in Fig. 3. This gait basis function scales with task coefficient function c1(θ) = v, and shows that as speed increases, ankle kinematics exhibit additional dorsiflexion and plantar flexion directly before and after toe-off, respectively (around 60% gait [17]). Gait basis function b2(ϕ), shown in Fig. 3, scales with c2(θ) = α and adds additional dorsiflexion at heel strike and additional plantar flexion during toe-off in proportion to ground slope. Confirmation of this trend for a discrete set of tasks is shown in [16, Fig. 2]. The relative complexity of bk(ϕ) in comparison to ck(θ) helps to motivate the decision that ck(θ) is specified by the researcher and bk(ϕ) is solved for, instead of vice versa.
Fig. 3.
For the ankle joint, b1(ϕ) is shown as a solid line with scale on the left, and b2(ϕ) is shown as a dashed line with the scale on the right. Note that the magnitude of b2(ϕ) is much smaller than b1(ϕ), but it is multiplied by c2(θ), which generally had a larger magnitude than c1(θ).
Another interesting interpretation comes from the selection of the functions ck(θ). In (4) it can be seen that if N < L, M (as it was in this paper), then BC is a low rank approximation of the matrix X̄. When the functions ck(θ) are selected to be linearly independent on θj with j = 1, 2, ..., M, these functions form a set of basis vectors, the rows of C, for the data-set. The optimal solution of (4), B*, gives the coordinates of the data in the basis C that best fit the higher rank matrix X̄. This rank reduction captures a majority of the information in the data-set while simplifying it.
B. Additional Constraints
Adding additional convex constraints to (4) can enforce many properties on the final formula (1) which may be desirable in certain applications. Separate bounds can be placed on each element of the term X̄ – BC, which may be useful if some locations are particularly sensitive to error. Due to the use of polynomial expressions for ck(ϕ), it is possible to bound the gradient and higher derivatives of (1) [18]. Moreover, a convex optimization technique called basis pursuit could replace the need for the researcher to explicitly select the functions ck(θ). From a predefined dictionary of functions (sometimes called an over-complete basis), basis pursuit utilizes ℓ1-norm regularization to pick a sparse representation.
C. Conclusion
This work introduced a novel gait parameterization method that models gait kinematics as a continuous function of phase and task variable. This parameterization was accurately fit to experimental data with convex optimization. Moreover, it has shown promising results in its ability to accurately predict kinematics for untrained tasks. This flexible framework could enforce additional constraints such as lower error in important regions or a bounded derivative.
The next step for this research is to embed the function (1) as the desired joint angular trajectory in a virtual constraint controller. A prosthesis with this controller could continuously update its kinematic trajectory based upon measurements of its phase and task. Real-time algorithms may be needed to estimate the variables ϕ and θ, but the parameterization method can easily be retrained for new input variables that correspond to sensor measurements. Our hope is that this parameterization method will allow researchers to create task-invariant virtual constraint controllers for a variety of powered prosthetic devices.
Acknowledgments
The authors would like to thank S. Bihari and R. Macaluso for their significant contributions to the experimental protocol and data collection.
This work was supported by the Eunice Kennedy Shriver National Institute of Child Health & Human Development of the National Institutes of Health under Award Number DP2HD080349. The content is solely the responsibility of the authors and does not necessarily represent the official views of the NIH. Dario J. Villarreal holds a Graduate Fellowship from the National Council of Science and Technology (CONACYT) from Mexico. Robert D. Gregg, IV, Ph.D., holds a Career Award at the Scientific Interface from the Burroughs Wellcome Fund.
Contributor Information
Kyle R. Embry, Department of Mechanical Engineering, University of Texas at Dallas, Richardson, TX 75080, USA.
Dario J. Villarreal, Department of Bioengineering, University of Texas at Dallas, Richardson, TX 75080, USA.
Robert D. Gregg, Departments of Bioengineering and Mechanical Engineering, University of Texas at Dallas, Richardson, TX 75080, USA.
References
- 1.Perry J, Burnfield J, Cabico L. Gait Analysis: Normal and Pathological Function. 2nd ed. Slack; Thorofare, NJ: 2010. [Google Scholar]
- 2.Young AJ, Simon AM, Fey NP, Hargrove LJ. Intent recognition in a powered lower limb prosthesis using time history information. Ann. Biomed. Engineering. 2014;42(3):631–641. doi: 10.1007/s10439-013-0909-0. [DOI] [PubMed] [Google Scholar]
- 3.Jiménez-Fabián R, Verlinden O. Review of control algorithms for robotic ankle systems in lower-limb orthoses, prostheses, and exoskeletons. Med. Eng. Phys. 2012;34(4):397–408. doi: 10.1016/j.medengphy.2011.11.018. [DOI] [PubMed] [Google Scholar]
- 4.Tucker MR, Olivier J, Pagel A, Bleuler H, Bouri M, Lambercy O, del R Millán J, Riener R, Vallery H, Gassert R. Control strategies for active lower extremity prosthetics and orthotics: a review. J. Neuroeng. Rehabil. 2015;12(1):1. doi: 10.1186/1743-0003-12-1. [DOI] [PMC free article] [PubMed] [Google Scholar]
- 5.Simon AM, Ingraham KA, Fey NP, Finucane SB, Lipschutz RD, Young AJ, Hargrove LJ. Configuring a powered knee and ankle prosthesis for transfemoral amputees within five specific ambulation modes. PloS one. 2014;9(6):e99387. doi: 10.1371/journal.pone.0099387. [DOI] [PMC free article] [PubMed] [Google Scholar]
- 6.Eilenberg MF, Geyer H, Herr H. Control of a powered ankle–foot prosthesis based on a neuromuscular model. IEEE T. Neural. Sys. Reh. 2010;18(2):164–173. doi: 10.1109/TNSRE.2009.2039620. [DOI] [PubMed] [Google Scholar]
- 7.Shultz AH, Lawson BE, Goldfarb M. Running with a powered knee and ankle prosthesis. IEEE T. Neur. Sys. Reh. 2015;23(3):403–412. doi: 10.1109/TNSRE.2014.2336597. [DOI] [PubMed] [Google Scholar]
- 8.Simon AM, Fey NP, Finucane SB, Lipschutz RD, Hargrove LJ. Strategies to reduce the configuration time for a powered knee and ankle prosthesis across multiple ambulation modes; IEEE Int. Conf. Rehab. Robotics; Seattle, WA. 2013. [DOI] [PubMed] [Google Scholar]
- 9.Westervelt ER, Grizzle JW, Chevallereau C, Choi JH, Morris B. Feedback Control of Dynamic Bipedal Robot Locomotion. CRC Press; New York, NY: 2007. [Google Scholar]
- 10.Griffin B, Grizzle J. Nonholonomic virtual constraints for dynamic walking. IEEE Decis. Contr. P. 2015 [Google Scholar]
- 11.Gregg RD, Lenzi T, Hargrove LJ, Sensinger JW. Virtual constraint control of a powered prosthetic leg: From simulation to experiments with transfemoral amputees. IEEE T. Robot. 2014;30(6):1455–1471. doi: 10.1109/TRO.2014.2361937. [DOI] [PMC free article] [PubMed] [Google Scholar]
- 12.Villarreal DJ, Poonawala H, Gregg RD. A robust parameterization of human gait paterns across phase-shifting perturbations. IEEE T. Neur. Sys. Reh. 2016 doi: 10.1109/TNSRE.2016.2569019. in press. [DOI] [PMC free article] [PubMed] [Google Scholar]
- 13.Quintero D, Martin AE, Gregg RD. Unifying the gait cycle in the control of a powered prosthetic leg. IEEE Int Conf Rehabil Robot. IEEE. 2015:289–294. doi: 10.1109/ICORR.2015.7281214. [DOI] [PMC free article] [PubMed] [Google Scholar]
- 14.Quintero D, Villarreal DJ, Gregg RD. Preliminary experiments with a unified controller for a powered knee-ankle prosthetic leg across walking speeds. IEEE Int. Conf. Intelligent Robot Systems. 2016 doi: 10.1109/IROS.2016.7759798. submission. [DOI] [PMC free article] [PubMed] [Google Scholar]
- 15.Holgate MA, Sugar TG, Böhler AW. A novel control algorithm for wearable robotics using phase plane invariants. IEEE Int. Conf. Robot. IEEE. 2009:3845–3850. [Google Scholar]
- 16.Leroux A, Fung J, Barbeau H. Postural adaptation to walking on inclined surfaces: I. normal strategies. Gait & posture. 2002;15(1):64–74. doi: 10.1016/s0966-6362(01)00181-3. [DOI] [PubMed] [Google Scholar]
- 17.Winter DA. Biomechanics and motor control of human gait: normal, elderly and pathological. 1991 [Google Scholar]
- 18.Boyd SP, Vandenberghe L. Convex Optimization. Cambridge University Press; New York, NY: 2004. [Google Scholar]



