Update requirements to reflect RTLSDR-Airband implementation

MP3 instead of WAV-only, flexible config format, 3-4 channel scope,
and verified hardware details for the Pi 400 target.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Michael Smith
2026-03-18 10:41:51 +00:00
parent 5c9b5d29b3
commit 856185c44c

View File

@@ -53,9 +53,9 @@ Single user — no additional stakeholders.
| FR-001 | Simultaneous frequency monitoring | Must | | FR-001 | Simultaneous frequency monitoring | Must |
| FR-002 | NFM demodulation | Must | | FR-002 | NFM demodulation | Must |
| FR-003 | Squelch-based activity detection | Must | | FR-003 | Squelch-based activity detection | Must |
| FR-004 | Automatic WAV recording | Must | | FR-004 | Automatic audio recording | Must |
| FR-005 | Conversation grouping via hang time | Must | | FR-005 | Conversation grouping via hang time | Must |
| FR-006 | YAML configuration | Must | | FR-006 | Configuration file | Must |
| FR-007 | Console activity logging | Must | | FR-007 | Console activity logging | Must |
### 3.2 Detailed Requirements ### 3.2 Detailed Requirements
@@ -65,7 +65,7 @@ Single user — no additional stakeholders.
- **Description:** Monitor all configured frequencies in parallel using a single RTL-SDR IQ capture - **Description:** Monitor all configured frequencies in parallel using a single RTL-SDR IQ capture
- **User Story:** As the operator, I want all my frequencies monitored at once so that I don't miss activity on one channel while another is being recorded - **User Story:** As the operator, I want all my frequencies monitored at once so that I don't miss activity on one channel while another is being recorded
- **Acceptance Criteria:** - **Acceptance Criteria:**
- All configured frequencies (up to 10) are monitored simultaneously - All configured frequencies (3-4 channels) are monitored simultaneously
- Uses a single RTL-SDR device with one tuning window covering the 27 MHz CB band - Uses a single RTL-SDR device with one tuning window covering the 27 MHz CB band
- **Priority:** Must - **Priority:** Must
@@ -90,11 +90,11 @@ Single user — no additional stakeholders.
#### FR-004: Automatic WAV Recording #### FR-004: Automatic WAV Recording
- **Description:** Record demodulated audio to WAV files when activity is detected - **Description:** Record demodulated audio to files when activity is detected
- **User Story:** As the operator, I want recordings saved as WAV files named with frequency and timestamp so I can easily find and review them - **User Story:** As the operator, I want recordings saved as audio files named with frequency and timestamp so I can easily find and review them
- **Acceptance Criteria:** - **Acceptance Criteria:**
- Output format: WAV (raw PCM, no encoding overhead) - Output format: MP3 (preferred) or WAV
- Filename format: `{frequency}_{timestamp}.wav` - Filename format: `{frequency}_{timestamp}.mp3`
- Files are written to a configurable output directory - Files are written to a configurable output directory
- **Priority:** Must - **Priority:** Must
@@ -108,12 +108,13 @@ Single user — no additional stakeholders.
- If silence exceeds the hang time, the file is closed and a new recording starts on next activity - If silence exceeds the hang time, the file is closed and a new recording starts on next activity
- **Priority:** Must - **Priority:** Must
#### FR-006: YAML Configuration #### FR-006: Configuration File
- **Description:** All user-configurable parameters are specified in a YAML config file - **Description:** All user-configurable parameters are specified in a config file
- **User Story:** As the operator, I want to edit a simple config file to set my frequencies and squelch levels - **User Story:** As the operator, I want to edit a simple config file to set my frequencies and squelch levels
- **Acceptance Criteria:** - **Acceptance Criteria:**
- Config file includes: frequency list, squelch threshold(s), hang time, output directory - Config file includes: frequency list, squelch threshold(s), hang time, output directory
- Format: YAML, libconfig, or similar human-readable format
- System reads config at startup - System reads config at startup
- **Priority:** Must - **Priority:** Must
@@ -140,15 +141,15 @@ Single user — no additional stakeholders.
### 3.4 Data Model (Conceptual) ### 3.4 Data Model (Conceptual)
- **Configuration:** List of frequencies, squelch threshold(s), hang time, output directory - **Configuration:** List of frequencies, squelch threshold(s), hang time, output directory
- **Recording:** WAV file with associated metadata (frequency, start time) encoded in filename - **Recording:** MP3 (or WAV) file with associated metadata (frequency, start time) encoded in filename
- **Log entry:** Timestamp, frequency, event type, filename - **Log entry:** Timestamp, frequency, event type, filename
## 4. Non-Functional Requirements ## 4. Non-Functional Requirements
### 4.1 Performance ### 4.1 Performance
- **NFR-001:** Must handle simultaneous demodulation and recording of up to 10 channels on a Raspberry Pi 400 (quad-core ARM, 4GB RAM) — **Priority: Must** - **NFR-001:** Must handle simultaneous demodulation and recording of 3-4 channels on a Raspberry Pi 400 (quad-core ARM, 4GB RAM) — **Priority: Must**
- **NFR-002:** WAV output (no encoding overhead) to minimize CPU usage**Priority: Must** - **NFR-002:** MP3 output preferred (smaller files, acceptable CPU overhead for 3-4 channels); WAV acceptable as fallback**Priority: Must**
### 4.2 Availability & Reliability ### 4.2 Availability & Reliability
@@ -173,9 +174,14 @@ Single user — no additional stakeholders.
### 5.1 Technical Constraints ### 5.1 Technical Constraints
- **Hardware:** Raspberry Pi 400, RTL-SDR dongle with TCXO - **Hardware:** Raspberry Pi 400 (quad-core ARM Cortex-A72, 4GB RAM)
- **OS:** Raspberry Pi OS 64-bit (Debian-based) - **OS:** Raspberry Pi OS 64-bit (Debian-based), OpenSSH 10.0p2
- **SDR dongle:** Realtek RTL2838UHIDIR with Rafael Micro R820T tuner (TCXO-equipped, no drift concerns)
- **Tuner gain range:** 0.049.6 dB in 29 steps
- **SDR bandwidth:** ~2 MHz tuning window (sufficient for 27 MHz CB band) - **SDR bandwidth:** ~2 MHz tuning window (sufficient for 27 MHz CB band)
- **SDR libraries:** librtlsdr built from source (`rtl_test`, `rtl_fm`, `rtl_sdr` at `/usr/local/bin/`)
- **Docker:** Installed on Pi; user `m` is in the `docker` group (no sudo required). Preferred deployment method.
- **Verified:** Hardware and driver stack confirmed working on target Pi (2026-03-18)
### 5.2 Business Constraints ### 5.2 Business Constraints
@@ -239,10 +245,10 @@ Single user — no additional stakeholders.
| FR-001 | Simultaneous frequency monitoring | Must | Core capability — monitoring one at a time defeats the purpose | | FR-001 | Simultaneous frequency monitoring | Must | Core capability — monitoring one at a time defeats the purpose |
| FR-002 | NFM demodulation | Must | Required to produce listenable audio | | FR-002 | NFM demodulation | Must | Required to produce listenable audio |
| FR-003 | Squelch-based activity detection | Must | Without this, recordings would be continuous noise | | FR-003 | Squelch-based activity detection | Must | Without this, recordings would be continuous noise |
| FR-004 | Automatic WAV recording | Must | Primary output of the system | | FR-004 | Automatic audio recording | Must | Primary output of the system |
| FR-005 | Conversation grouping (hang time) | Must | Prevents fragmented recordings, much more usable output | | FR-005 | Conversation grouping (hang time) | Must | Prevents fragmented recordings, much more usable output |
| FR-006 | YAML configuration | Must | Needed for frequency list and tuning parameters | | FR-006 | Configuration file | Must | Needed for frequency list and tuning parameters |
| FR-007 | Console activity logging | Must | Operator awareness of system activity | | FR-007 | Console activity logging | Must | Operator awareness of system activity |
| NFR-001 | Pi 400 performance | Must | Hardware constraint — must run on target platform | | NFR-001 | Pi 400 performance | Must | Hardware constraint — must run on target platform |
| NFR-002 | WAV format (no encoding) | Must | Minimizes CPU overhead on Pi | | NFR-002 | MP3 format (preferred) | Must | Smaller files; WAV acceptable as fallback |
| NFR-003 | Long-running stability | Should | Nice to have but not blocking initial delivery | | NFR-003 | Long-running stability | Should | Nice to have but not blocking initial delivery |