# yanisdahmouche/doppler-radar-stm32f767-end-to-end architecture

> Architecture diagram of the GitHub repository yanisdahmouche/doppler-radar-stm32f767-end-to-end, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end
- Repository: https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end

## Overview

This repository implements an end-to-end Doppler radar system: conditioned radar signals are sampled and processed on an STM32F767, then speed and sample data are displayed locally or streamed to PC applications. The README documents the PC scope and analyzer capabilities; their source files are present, but their implementation details were not excerpted, so those links reflect documented behavior rather than inspected calls.

Main entry points: [`Core/Src/main.c`](https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/Core/Src/main.c) (ADC/DMA acquisition), [`Core/Src/ssd1306.c`](https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/Core/Src/ssd1306.c) (OLED driver), [`pc_scope/radar_scope.cpp`](https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/pc_scope/radar_scope.cpp) (Scope visualizer), [`pc_analyzer/radar_analyzer.cpp`](https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/pc_analyzer/radar_analyzer.cpp) (Reassembly window)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_embedded["Embedded firmware"]
  node_acquisition["ADC/DMA acquisition<br/>[main.c]"]
  node_firmware["Firmware control<br/>[main.c]"]
  node_peripherals["Peripheral setup"]
  node_udp["UDP hop streaming<br/>[main.c]"]
end

subgraph group_processing["Signal processing"]
  node_dsp["Embedded FFT<br/>[main.c]"]
  node_speed["Speed conversion<br/>[main.c]"]
end

subgraph group_display["Local display"]
  node_oled["OLED driver<br/>[ssd1306.c]"]
end

subgraph group_desktop["PC applications"]
  node_scope["Scope visualizer<br/>[radar_scope.cpp]"]
  node_analyzer_input["Reassembly window<br/>[radar_analyzer.cpp]"]
  node_detection["CFAR detection<br/>[radar_analyzer.cpp]"]
  node_tracking["Kalman tracking<br/>[radar_analyzer.cpp]"]
end

node_radar(("Radar module"))
node_front_end["Analog front-end"]
node_oled_screen["SSD1306 OLED"]
node_ethernet["Ethernet link"]
node_pc_user(("PC operator"))

node_radar -->|"outputs IF"| node_front_end
node_front_end -->|"conditions signal"| node_acquisition
node_acquisition -->|"feeds samples"| node_dsp
node_firmware -->|"configures capture"| node_acquisition
node_firmware -.->|"initializes peripherals"| node_peripherals
node_dsp -->|"converts Doppler bins"| node_speed
node_speed -->|"updates speed readout"| node_oled
node_oled -->|"writes over I2C"| node_oled_screen
node_acquisition -->|"streams sample hops"| node_udp
node_udp -->|"transmits UDP"| node_ethernet
node_ethernet -->|"delivers samples"| node_scope
node_ethernet -->|"delivers hops"| node_analyzer_input
node_analyzer_input -->|"feeds analysis window"| node_detection
node_detection -->|"scores peaks"| node_tracking
node_scope -->|"shows plots"| node_pc_user
node_tracking -->|"reports speed"| node_pc_user

click node_acquisition "https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/Core/Src/main.c"
click node_firmware "https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/Core/Src/main.c"
click node_peripherals "https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/Core/Src/stm32f7xx_hal_msp.c"
click node_dsp "https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/Core/Src/main.c"
click node_speed "https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/Core/Src/main.c"
click node_oled "https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/Core/Src/ssd1306.c"
click node_udp "https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/Core/Src/main.c"
click node_scope "https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/pc_scope/radar_scope.cpp"
click node_analyzer_input "https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/pc_analyzer/radar_analyzer.cpp"
click node_detection "https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/pc_analyzer/radar_analyzer.cpp"
click node_tracking "https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/pc_analyzer/radar_analyzer.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_acquisition,node_firmware,node_peripherals,node_udp toneBlue
class node_dsp,node_speed toneAmber
class node_oled toneMint
class node_scope,node_analyzer_input,node_detection,node_tracking toneRose
class node_radar,node_front_end,node_oled_screen,node_ethernet,node_pc_user toneIndigo
```

## Components

### Embedded firmware

- [ADC/DMA acquisition](https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/Core/Src/main.c): `Core/Src/main.c`
- [Firmware control](https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/Core/Src/main.c): `Core/Src/main.c`
- [Peripheral setup](https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/Core/Src/stm32f7xx_hal_msp.c): `Core/Src/stm32f7xx_hal_msp.c`
- [UDP hop streaming](https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/Core/Src/main.c): `Core/Src/main.c`

### Signal processing

- [Embedded FFT](https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/Core/Src/main.c): `Core/Src/main.c`
- [Speed conversion](https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/Core/Src/main.c): `Core/Src/main.c`

### Local display

- [OLED driver](https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/Core/Src/ssd1306.c): `Core/Src/ssd1306.c`

### PC applications

- [Scope visualizer](https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/pc_scope/radar_scope.cpp): `pc_scope/radar_scope.cpp`
- [Reassembly window](https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/pc_analyzer/radar_analyzer.cpp): `pc_analyzer/radar_analyzer.cpp`
- [CFAR detection](https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/pc_analyzer/radar_analyzer.cpp): `pc_analyzer/radar_analyzer.cpp`
- [Kalman tracking](https://github.com/yanisdahmouche/doppler-radar-stm32f767-end-to-end/blob/main/pc_analyzer/radar_analyzer.cpp): `pc_analyzer/radar_analyzer.cpp`

### Other components

- **Radar module**
- **Analog front-end**
- **SSD1306 OLED**
- **Ethernet link**
- **PC operator**

## Connections

- Radar module → Analog front-end: outputs IF (evidence: `README.md`)
- Analog front-end → ADC/DMA acquisition: conditions signal (evidence: `README.md`)
- ADC/DMA acquisition → Embedded FFT: feeds samples (evidence: `README.md`)
- Firmware control → ADC/DMA acquisition: configures capture (evidence: `README.md`)
- Firmware control → Peripheral setup: initializes peripherals
- Embedded FFT → Speed conversion: converts Doppler bins (evidence: `README.md`)
- Speed conversion → OLED driver: updates speed readout (evidence: `README.md`)
- OLED driver → SSD1306 OLED: writes over I2C (evidence: `README.md`)
- ADC/DMA acquisition → UDP hop streaming: streams sample hops (evidence: `README.md`)
- UDP hop streaming → Ethernet link: transmits UDP (evidence: `README.md`)
- Ethernet link → Scope visualizer: delivers samples (evidence: `README.md`)
- Ethernet link → Reassembly window: delivers hops (evidence: `README.md`)
- Reassembly window → CFAR detection: feeds analysis window (evidence: `README.md`)
- CFAR detection → Kalman tracking: scores peaks (evidence: `README.md`)
- Scope visualizer → PC operator: shows plots (evidence: `README.md`)
- Kalman tracking → PC operator: reports speed (evidence: `README.md`)
