Meet#8 jmorman
GSoC 2025 · GNU Radio 4.0 Block-Set Expansion
Week-8 check-in (mentor — Josh Morman)
Date | 3 July 2025, 17:00 IST |
Duration | 50 min |
Participants | Josh Morman · Krish Gupta |
1 · Progress update
- Analog PR Review
- Addressed all feedback from Ralph and Josh on the Analog PR
- Fixed minor type casting issues highlighted by CI
- Improved documentation with more detailed examples
- Digital Components
- Completed
Constellation<N>
implementation with:- Stateless slicing functions
- Distance metrics (Euclidean, Manhattan)
- Decision boundaries
- Implemented mapping utilities:
ChunksToSymbols
for bit→symbol mappingSymbolsToChunks
for symbol→bit mappingDifferentialEncoder
/DifferentialDecoder
- Completed
2 · Constellation Implementation
The Constellation<N>
template represents a significant modernization:
template <size_t N>
class Constellation {
private:
std::array<std::complex<float>, N> points_;
std::array<uint32_t, N> symbols_;
float scaling_{1.0f};
public:
GR_MAKE_REFLECTABLE(Constellation, points_, symbols_, scaling_);
// Stateless slicing - perfect for SIMD
template <typename T>
uint32_t slice(const std::complex<T>& sample) const {
// Find nearest constellation point
size_t min_index = 0;
T min_distance = std::numeric_limits<T>::max();
for (size_t i = 0; i < N; ++i) {
T dist = distance(sample, points_[i]);
if (dist < min_distance) {
min_distance = dist;
min_index = i;
}
}
return symbols_[min_index];
}
// Common constellation factories
static Constellation<4> make_qpsk();
static Constellation<8> make_8psk();
static Constellation<16> make_qam16();
// ...
};
This approach:
- Uses fixed-size arrays for better optimization
- Provides factory methods for common constellations
- Supports custom symbol mappings
- Enables direct SIMD optimization
3 · CI Challenges for Digital PR
Given the size of the Digital blocks PR (projected 4k+ LOC), we discussed CI optimization strategies:
Challenge | Solution |
---|---|
Build time | Per-subdirectory CMake targets |
Memory usage | Focused test matrices with selective instantiation |
PR size | Structured commit history with logical grouping |
Josh shared his experience:
“Large PRs need careful staging. We should structure the Digital PR with a clear progression: core components → mapping → timing → specialized blocks. This makes review much more manageable.”
4 · Porting Guide Completion
Finalized the initial version of the porting guide with:
- Complete GR3 → GR4 migration patterns
- Code examples for each block family
- Common pitfalls and solutions
- Best practices for state management
- Guidelines for testing
The guide is available in both HTML and Markdown formats for maximum accessibility.
5 · Template Diagnostics Improvements
Addressed template diagnostic challenges across different compilers:
Issue | Solution |
---|---|
Cryptic GCC errors | Added explicit typedefs and concepts |
Clang/GCC differences | Used cleaner concept constraints |
Type conversion warnings | Implemented systematic conversion handling |
These improvements make the codebase more maintainable and easier to debug.
6 · Action items
Owner | Task |
---|---|
Krish | • Finalize Digital core and mapping components • Prepare Digital blocks PR with structured commit history • Update CI configuration for focused testing |
Josh | • Continue reviewing Analog PR details • Provide feedback on Constellation implementation • Coordinate with CI team on large PR strategy |
Next sync: July 10th to review Digital PR preparation and Constellation implementation details.
7 · Learning from Analog PR Review
The Analog PR review process highlighted several important patterns:
- Type safety is critical - explicit conversions are better than implicit
- Documentation should include concrete examples
- Parameter naming should be consistent across block families
- Edge cases need explicit handling (NaN, Inf, extreme values)
- CI configuration needs careful tuning for template-heavy code
These learnings are being applied to the Digital blocks implementation to ensure a smoother review process.