Source: https://users.cs.northwestern.edu/~agupta/_projects/embedded_systems/FinalReport.pdf