https://courses.grainger.illinois.edu/ece220/sp2025/lectures/ywchen/ECE220_Lecture19_Chen.pdf