Meet#9 jmorman
GSoC 2025 · GNU Radio 4.0 Block-Set Expansion
Week-9 check-in (mentor — Josh Morman)
Date | 10 July 2025, 17:00 IST |
Duration | 45 min |
Participants | Josh Morman · Krish Gupta |
1 · Progress update
- Analog PR Status
- All CI tests now passing after fixing type casting issues
- Waiting for final approval from maintainers
- Minor documentation improvements added
- Digital Blocks
- Finalized directory structure for all digital components
- Completed core components implementation:
Lfsr.hpp
,Crc.hpp
,Scrambler.hpp
,Bits.hpp
Constellation<N>
with all common mappingsChunksToSymbols
andSymbolsToChunks
- Set up CI configuration for digital module with focused test matrices
2 · Digital Directory Structure
Finalized the directory structure for the digital module:
digital/
├── core/ # Core components (LFSR, CRC, Scrambler, etc.)
│ ├── Lfsr.hpp
│ ├── Crc.hpp
│ ├── Scrambler.hpp
│ ├── Constellation.hpp
│ └── detail/
│ └── Bits.hpp # Bit manipulation utilities
├── mapping/ # Symbol mapping and slicing
│ ├── ChunksToSymbols.hpp
│ ├── SymbolsToChunks.hpp
│ ├── DifferentialEncoder.hpp
│ └── DifferentialDecoder.hpp
├── timing/ # Clock recovery, synchronization
├── measure/ # SNR estimation, EVM, etc.
├── equalizer/ # Channel equalization
├── ofdm/ # OFDM-specific components
├── packet/ # Packet handling
├── misc/ # Miscellaneous utilities
└── compat/ # Compatibility with GR3
This organization:
- Groups related functionality together
- Provides clear boundaries between subsystems
- Supports focused testing and CI
- Enables incremental development
3 · CI Configuration for Digital PR
Implemented a specialized CI configuration for the digital module:
# .github/workflows/digital.yml
jobs:
core:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build and test core
run: |
cmake -B build -DBUILD_TESTING=ON -DGR4_DIGITAL_CORE_ONLY=ON
cmake --build build --target gr4_digital_core_test
cd build && ctest -R "digital_core" -V
mapping:
needs: core
runs-on: ubuntu-latest
steps:
# Similar structure, focused on mapping tests
# Additional jobs for other components
This approach:
- Focuses testing on specific components
- Reduces memory pressure
- Provides faster feedback on PRs
- Makes it easier to identify failures
4 · Implementation Highlights
Bits Utility Class
Created a utilities class for efficient bit manipulation:
namespace gr::digital::detail {
class Bits {
public:
// Pack bits into bytes (MSB or LSB first)
template <typename InputIt, typename OutputIt>
static void pack(InputIt first, InputIt last,
OutputIt d_first, bool msb_first = true);
// Unpack bytes into bits
template <typename InputIt, typename OutputIt>
static void unpack(InputIt first, InputIt last,
OutputIt d_first, bool msb_first = true);
// Count set bits in a value
template <typename T>
static constexpr int popcount(T value);
// Reverse bit order
template <typename T>
static constexpr T reverse(T value);
};
} // namespace gr::digital::detail
This utility class provides building blocks for many digital components.
5 · Addressing Sonar on Forked PRs
Discussed strategies for handling the Sonar CI issue with forked PRs:
Option | Pros | Cons |
---|---|---|
Skip Sonar checks | Unblocks merges | Misses quality checks |
Maintainer adjusts CI | Preserves all checks | Requires organization changes |
Clone PR manually | Works with current system | Extra maintainer effort |
Josh mentioned:
“For the Digital PR, I’m working with the CI team to temporarily adjust the workflow configuration to allow Sonar checks on external PRs. This should unblock the Math PR as well.”
6 · Action items
Owner | Task |
---|---|
Krish | • Prepare and submit Digital blocks PR • Continue implementing remaining digital components • Update test coverage for edge cases |
Josh | • Coordinate with CI team on Sonar issues • Review Digital core components • Facilitate final approval of Analog PR |
Next sync: July 17th to review Digital PR and discuss remaining implementation priorities.
7 · Key Decisions
Several important decisions were made during this week’s development:
- Focus on quality over quantity - Prioritize robust implementations of core components
- Modular directory structure - Organize by functionality for better maintainability
- Focused CI configuration - Optimize CI for faster feedback and better resource usage
- Documentation-first approach - Ensure all components are well-documented
- Type-safe interfaces - Use modern C++ features for safer APIs
These decisions align with the project’s goal of creating a maintainable, high-performance block set for GNU Radio 4.0.