added GPR

This commit is contained in:
Ayzen
2026-03-19 19:29:08 +03:00
parent bdefe3f581
commit 9581730e41
39 changed files with 3830 additions and 201 deletions
@@ -215,23 +215,39 @@ auto BScanProcessor::name() const -> std::string {
return "bscan";
}
auto BScanProcessor::process(const ipc::SweepTraceBlock& trace, const ProcessingLiveConfig& live_config)
-> ipc::ResultPayload {
ipc::ResultPayload payload{};
payload.processing_name = name();
payload.kind = ipc::ResultKind::TraceComplex;
auto BScanProcessor::process_collection(
const config::RunConfig& /*run_config*/,
const ipc::PreprocessedCollection& collection,
std::span<const ipc::PreprocessedCollection> /*previous_collections*/,
const ProcessingLiveConfig& live_config
) -> ipc::ResultCollection {
ipc::ResultCollection results{};
results.collection_id = collection.collection_id;
results.monotonic_ns = collection.monotonic_ns;
results.blocks.reserve(collection.traces.size());
auto profile = compute_bscan_profile(trace, live_config);
payload.frequency_hz = std::move(profile.depth_m);
payload.trace.reserve(profile.response.size());
for (const auto value : profile.response) {
payload.trace.push_back(ipc::Complex32{
.re = value,
.im = 0.0F,
});
for (const auto& trace : collection.traces) {
ipc::ResultPayload payload{};
payload.processing_name = name();
payload.kind = ipc::ResultKind::TraceComplex;
auto profile = compute_bscan_profile(trace, live_config);
payload.frequency_hz = std::move(profile.depth_m);
payload.trace.reserve(profile.response.size());
for (const auto value : profile.response) {
payload.trace.push_back(ipc::Complex32{
.re = value,
.im = 0.0F,
});
}
ipc::ResultBlock block{};
block.combo = trace.combo;
block.payloads.push_back(std::move(payload));
results.blocks.push_back(std::move(block));
}
return payload;
return results;
}
} // namespace radar::processing
File diff suppressed because it is too large Load Diff
@@ -13,27 +13,43 @@ auto PassThroughProcessor::name() const -> std::string {
return "pass_through";
}
auto PassThroughProcessor::process(const ipc::SweepTraceBlock& trace, const ProcessingLiveConfig& live_config)
-> ipc::ResultPayload {
ipc::ResultPayload payload{};
payload.processing_name = name();
payload.kind = ipc::ResultKind::TraceComplex;
payload.frequency_hz = trace.frequency_hz;
payload.trace = trace.s21;
auto PassThroughProcessor::process_collection(
const config::RunConfig& /*run_config*/,
const ipc::PreprocessedCollection& collection,
std::span<const ipc::PreprocessedCollection> /*previous_collections*/,
const ProcessingLiveConfig& live_config
) -> ipc::ResultCollection {
ipc::ResultCollection results{};
results.collection_id = collection.collection_id;
results.monotonic_ns = collection.monotonic_ns;
results.blocks.reserve(collection.traces.size());
const float linear_gain = std::pow(10.0F, live_config.gain_db / 20.0F);
const float phase_rad = live_config.phase_deg * (kPi / 180.0F);
const float cos_phase = std::cos(phase_rad);
const float sin_phase = std::sin(phase_rad);
for (const auto& trace : collection.traces) {
ipc::ResultPayload payload{};
payload.processing_name = name();
payload.kind = ipc::ResultKind::TraceComplex;
payload.frequency_hz = trace.frequency_hz;
payload.trace = trace.s21;
for (auto& sample : payload.trace) {
const float re = sample.re;
const float im = sample.im;
sample.re = linear_gain * ((re * cos_phase) - (im * sin_phase));
sample.im = linear_gain * ((re * sin_phase) + (im * cos_phase));
const float linear_gain = std::pow(10.0F, live_config.gain_db / 20.0F);
const float phase_rad = live_config.phase_deg * (kPi / 180.0F);
const float cos_phase = std::cos(phase_rad);
const float sin_phase = std::sin(phase_rad);
for (auto& sample : payload.trace) {
const float re = sample.re;
const float im = sample.im;
sample.re = linear_gain * ((re * cos_phase) - (im * sin_phase));
sample.im = linear_gain * ((re * sin_phase) + (im * cos_phase));
}
ipc::ResultBlock block{};
block.combo = trace.combo;
block.payloads.push_back(std::move(payload));
results.blocks.push_back(std::move(block));
}
return payload;
return results;
}
} // namespace radar::processing