Analyze multimodal sleep-study signals and identify apnea and hypoxia events in a course project.
My role
Python developer · team of three
Tools & methods
Python · NumPy · SciPy · Matplotlib · Git
Result
The tool passed all course test cases. This was an educational project, not a clinically deployed diagnostic system.
My Contribution
I developed the blood-pressure analysis module, turning pressure readings and timestamps into summary statistics and flagged gaps between beats. Working with two teammates, I helped build a Python workflow for reviewing ECG, blood pressure, respiration, and oxygen saturation signals.
From CSV to Report
Prepare the Signals
The team pipeline used NumPy to load CSV files, separate timestamp and signal columns, and flatten them into analysis arrays. Header-based signal selection supported files with different available channels. Users could select a time window, with the same slice applied across signals to preserve alignment.
Detect Peaks and Events
My blood-pressure module identified local pressure maxima above a threshold, found the minimum pressure between successive peaks, and calculated average systolic and diastolic pressures. It also tracked unusually long intervals between peaks to flag possible missing beats.
In the shared analyzer, SciPy’s find_peaks supported ECG, blood-pressure, and respiration analysis. The course logic flagged breathing gaps of at least ten seconds and oxygen-saturation readings below the project’s threshold. These were rule-based flags for the supplied datasets.
Check and Communicate Results
I compared calculated pressure extrema and detected peaks against plotted signals, then adjusted the peak and gap conditions when the results did not match the visual data. My module included JSON output for three supplied test runs.
The broader application used Matplotlib for signal plots, Tkinter for file selection, and FPDF for a report combining plots and summary metrics. We used Git to coordinate changes across the team.