Course: Statistical Signal Processing (5CTA0) · Eindhoven University of Technology (TU/e)
Weight: 30 % of the final grade (≈ 42 hours of work)
| File | What it's for |
|---|---|
project.ipynb |
The assignment and file to submit in the end (see Submission) |
python_tutorial.ipynb |
Python refresher (start here if new to Python) |
rubric_student.md |
How each task is graded |
check_my_notebook.py |
Self-check script to run before submitting (see Submission) |
requirements.txt |
Packages to install for this assignment (see Getting started) |
| Part | Topic | Key concepts | Points |
|---|---|---|---|
| 1 | Data loading & R-peak detection | Matched filter, NP detection (Ch 14) | 10 |
| 2 | HRV: time-domain, distribution fitting, spectral & time-frequency analysis | Random signals (Ch 3), LSE (Ch 9), Spectral estimation (Ch 11–13) | 35 |
| 3 | Multi-feature arrhythmia detection | Neyman-Pearson & Bayesian detection (Ch 14, Ch 10) | 25 |
| 4 | LV ejection fraction estimation | MLE, Fisher information, CRLB (Ch 6–7) | 30 |
| Bonus | Written clinical integration report | All parts | +5 |
| Bonus | Extra candidate features in arrhythmia detection (Task 3.1) | Neyman-Pearson detection (Ch 14) | +2.5 each (≤ 2 extra), +5 max |
Work entirely inside project.ipynb. Do not add, remove, or reorder cells — keep the answer-cell structure intact. (You only rename the file at submission time — see Submission.)
| Marker | Meaning |
|---|---|
| 📋 Task | Something you need to solve |
🧠 Your code here |
Write your code below this line in code cells |
| 🧠 Your solution | Replace this prompt with your written answer in markdown cells |
TODO |
An unanswered placeholder — replace it with your solution, or leave it if you don't know |
Every code task ships with a small TODO placeholder (for example
duration_h = pvc_burden = TODO). If you don't know a task, just leave it
untouched and move on — the notebook is built to still run top to bottom:
- unanswered quantities print as
—, and any figure that depends on them is skipped with a short note (the run does not crash); - leaving a task blank only costs that task's marks — it never affects the others;
- so you can always produce a valid, runnable submission, even if it's partial. Always check with
uv run python check_my_notebook.py project_group<groupnumber>.ipynbbefore submitting.
We use uv, a fast Python package and environment manager. It also installs Python for you, so it is the only tool you need, no separate Python or Miniconda install required.
Steps 2–4 below are all run in one terminal. Open it once in step 1 and reuse it for every command in steps 2–4.
We recommend working on this assignment in Visual Studio Code (VS Code). If you have not worked with an editor before:
-
Install VS Code from code.visualstudio.com, and add the Python and Jupyter extensions (from the Extensions panel on the left).
-
Download this assignment repository to your computer. If you are comfortable with Git, you can instead clone it.
git clone https://github.com/tue-bmd/5cta0-project-student.git
-
Open VS Code and open the assignment folder (File → Open Folder…) so your editor is looking at the correct files.
-
Open a terminal inside VS Code: Terminal → New Terminal. It opens in the assignment folder automatically — use this same terminal for every command in steps 2–4 below.
Not using VS Code? Open your OS's own terminal instead (PowerShell on Windows, Terminal on macOS/Linux), then
cdinto the assignment folder. Every command below works identically either way.
cd 5cta0-project-studentIn the terminal from step 1, run the command for your platform. Click the arrow (▶) to expand it.
Windows
In a PowerShell terminal (in VS Code or search for it in the Start menu) run:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"macOS / Linux
In your Terminal run:
curl -LsSf https://astral.sh/uv/install.sh | shAfter it finishes, close and reopen the terminal (in VS Code: close the terminal panel, then Terminal → New Terminal again), then check the install worked:
uv --versionYou should see a version number, for example uv 0.11.21.
Says uv is not recognized or uv: command not found?
Most likely, uv is installed, but programs that were already open, including VS Code, do not know about it yet.
Restart your laptop and try uv --version again.
To fix only the terminal you are working in right now, without restarting, run the line for your system.
# Windows (PowerShell)
$env:Path = "$env:USERPROFILE\.local\bin;$env:Path"# macOS / Linux
export PATH="$HOME/.local/bin:$PATH"If uv is still not found after restarting your laptop, the install itself did not finish. Run the install command above once more and check its output for errors.
A virtual environment is an isolated space that keeps this project's packages separate from everything else on your computer. In the same terminal (already in the assignment folder), create one specifically for this assignment. uv will download Python 3.11 for you if you don't have it:
uv venv --python 3.11This creates a .venv folder inside the project. You do not need to activate it, the uv commands below use it automatically.
Install all packages required for this assignment:
uv pip install -r requirements.txtPick whichever you prefer, VS Code or your browser. Click the arrow (▶) to expand the instructions for your method.
VS Code (recommended)
Open project.ipynb from the file explorer, then click Select Kernel (top-right of the notebook) and choose the .venv interpreter you just created (shown as Python 3.11 with path <project-folder>/.venv/bin/python).
Jupyter (in your browser)
Launch the classic Jupyter interface from the terminal:
uv run jupyter notebook project.ipynbThis opens the notebook in your web browser, already using the project environment.
Before you start working on the tasks, read through python_tutorial.ipynb. This is a project-focused refresher exactly on the code patterns that the assignment uses.
- Read every instruction cell carefully before writing code.
- A few cells might take some time to finish compiling, be aware of this and remain patient.
- Write your code where you see the
🧠 Your solutionmarker, replacing theTODOplaceholder. - If you don't know a task, leave it untouched, the notebook still runs top to bottom.
- Do not modify any other code or cell structure.
- Written discussion answers go in the markdown cells labeled "🧠 Your solution — Task X.Y".
- Save your changes with
Ctrl+S(Cmd+Son Mac), or turn on AutoSave via File → Auto Save so every change saves automatically. - To resume later, just reopen the assignment folder (or run
uv run jupyter notebook project.ipynbagain for the browser). VS Code picks up the environment automatically, nothing to reinstall, but re-select the.venvkernel (see step 5 above) before running any code.
This is a group assignment, so you submit one notebook per group. One member submits on behalf of the whole group. More than one member may upload the same file if you prefer, that is fine too.
Groups are formed through the enrollment system in Canvas — sign up for a group there, and use that group number in your filename.
Submit only your notebook through Ans, renamed to project_group<groupnumber>.ipynb (for example project_group12.ipynb), using your group number.
Together with the notebook, each student must individually fill out the peer-review form: Lab Peer Evaluation Form v2027 (5CTA0). Unlike the notebook, this is not a group submission: every group member fills it out themselves.
Before submitting:
-
Run Kernel → Restart Kernel and Run All Cells and verify there are no errors.
-
Save the notebook (
Ctrl+S/Cmd+S). -
Check that all output cells are visible (plots, printed values, etc.).
-
Rename the file to
project_group<groupnumber>.ipynb. -
Run the self-check first to catch the most common submission mistakes:
uv run python check_my_notebook.py project_group<groupnumber>.ipynb
Note that this does not grade your answers, it only checks that the notebook opens, is named correctly, ran top-to-bottom, and has no errors. Tasks you left blank are reported as a friendly
⚠️ note (not an error), so a partial notebook still passes. -
Upload the notebook file to Ans.
-
Each group member individually fills out the peer-review form.
Warning
A notebook that cannot be executed from top to bottom will receive a significant penalty. Leaving a task blank is fine and does not break the run, but a task you attempted must not raise an error. Fix or clear any cell that errors before submitting.
The notebook automatically downloads the required datasets on first run:
| Dataset | Source |
|---|---|
| MIT-BIH Arrhythmia DB, record 119 (ECG Holter, 360 Hz) | PhysioNet via wfdb |
| CAMUS echocardiography validation set (A2C view) | CAMUS via zea |
An internet connection is required for the first run. Subsequent runs use the cached data.
- Post questions in the Canvas discussion board.
- During (booked) lab sessions a TA will be available for questions.
- Refer to the course slides and textbook for theoretical background.