mirror of
https://github.com/eried/portapack-mayhem.git
synced 2024-10-01 01:26:06 -04:00
Moved baseband temporary buffers back into class member variables.
Significant performance hit when declaring on stack. C++ wants to initialize std::array or even raw array with element constructors, was resulting in ~7% CPU utilization, for a buffer that was immediately written over anyway.
This commit is contained in:
parent
5547782f5a
commit
d9017530c6
@ -36,12 +36,6 @@ AISProcessor::AISProcessor() {
|
|||||||
void AISProcessor::execute(const buffer_c8_t& buffer) {
|
void AISProcessor::execute(const buffer_c8_t& buffer) {
|
||||||
/* 2.4576MHz, 2048 samples */
|
/* 2.4576MHz, 2048 samples */
|
||||||
|
|
||||||
std::array<complex16_t, 512> dst;
|
|
||||||
const buffer_c16_t dst_buffer {
|
|
||||||
dst.data(),
|
|
||||||
dst.size()
|
|
||||||
};
|
|
||||||
|
|
||||||
const auto decim_0_out = decim_0.execute(buffer, dst_buffer);
|
const auto decim_0_out = decim_0.execute(buffer, dst_buffer);
|
||||||
const auto decim_1_out = decim_1.execute(decim_0_out, dst_buffer);
|
const auto decim_1_out = decim_1.execute(decim_0_out, dst_buffer);
|
||||||
const auto decimator_out = decim_1_out;
|
const auto decimator_out = decim_1_out;
|
||||||
|
@ -47,6 +47,12 @@ public:
|
|||||||
void execute(const buffer_c8_t& buffer) override;
|
void execute(const buffer_c8_t& buffer) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
std::array<complex16_t, 512> dst;
|
||||||
|
const buffer_c16_t dst_buffer {
|
||||||
|
dst.data(),
|
||||||
|
dst.size()
|
||||||
|
};
|
||||||
|
|
||||||
dsp::decimate::FIRC8xR16x24FS4Decim8 decim_0;
|
dsp::decimate::FIRC8xR16x24FS4Decim8 decim_0;
|
||||||
dsp::decimate::FIRC16xR16x32Decim8 decim_1;
|
dsp::decimate::FIRC16xR16x32Decim8 decim_1;
|
||||||
dsp::matched_filter::MatchedFilter mf { baseband::ais::rrc_taps_38k4_4t_p, 2 };
|
dsp::matched_filter::MatchedFilter mf { baseband::ais::rrc_taps_38k4_4t_p, 2 };
|
||||||
|
@ -28,12 +28,6 @@ void NarrowbandAMAudio::execute(const buffer_c8_t& buffer) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::array<complex16_t, 512> dst;
|
|
||||||
const buffer_c16_t dst_buffer {
|
|
||||||
dst.data(),
|
|
||||||
dst.size()
|
|
||||||
};
|
|
||||||
|
|
||||||
const auto decim_0_out = decim_0.execute(buffer, dst_buffer);
|
const auto decim_0_out = decim_0.execute(buffer, dst_buffer);
|
||||||
const auto decim_1_out = decim_1.execute(decim_0_out, dst_buffer);
|
const auto decim_1_out = decim_1.execute(decim_0_out, dst_buffer);
|
||||||
const auto channel_out = channel_filter.execute(decim_1_out, dst_buffer);
|
const auto channel_out = channel_filter.execute(decim_1_out, dst_buffer);
|
||||||
@ -42,11 +36,6 @@ void NarrowbandAMAudio::execute(const buffer_c8_t& buffer) {
|
|||||||
feed_channel_stats(channel_out);
|
feed_channel_stats(channel_out);
|
||||||
channel_spectrum.feed(channel_out, channel_filter_pass_f, channel_filter_stop_f);
|
channel_spectrum.feed(channel_out, channel_filter_pass_f, channel_filter_stop_f);
|
||||||
|
|
||||||
const buffer_s16_t work_audio_buffer {
|
|
||||||
(int16_t*)dst.data(),
|
|
||||||
sizeof(*dst.data()) * dst.size()
|
|
||||||
};
|
|
||||||
|
|
||||||
auto audio = demod.execute(channel_out, work_audio_buffer);
|
auto audio = demod.execute(channel_out, work_audio_buffer);
|
||||||
|
|
||||||
audio_hpf.execute_in_place(audio);
|
audio_hpf.execute_in_place(audio);
|
||||||
|
@ -40,6 +40,16 @@ public:
|
|||||||
void on_message(const Message* const message) override;
|
void on_message(const Message* const message) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
std::array<complex16_t, 512> dst;
|
||||||
|
const buffer_c16_t dst_buffer {
|
||||||
|
dst.data(),
|
||||||
|
dst.size()
|
||||||
|
};
|
||||||
|
const buffer_s16_t work_audio_buffer {
|
||||||
|
(int16_t*)dst.data(),
|
||||||
|
sizeof(*dst.data()) * dst.size()
|
||||||
|
};
|
||||||
|
|
||||||
dsp::decimate::FIRC8xR16x24FS4Decim8 decim_0;
|
dsp::decimate::FIRC8xR16x24FS4Decim8 decim_0;
|
||||||
dsp::decimate::FIRC16xR16x32Decim8 decim_1;
|
dsp::decimate::FIRC16xR16x32Decim8 decim_1;
|
||||||
dsp::decimate::FIRAndDecimateComplex channel_filter;
|
dsp::decimate::FIRAndDecimateComplex channel_filter;
|
||||||
|
@ -29,12 +29,6 @@ void NarrowbandFMAudio::execute(const buffer_c8_t& buffer) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::array<complex16_t, 512> dst;
|
|
||||||
const buffer_c16_t dst_buffer {
|
|
||||||
dst.data(),
|
|
||||||
dst.size()
|
|
||||||
};
|
|
||||||
|
|
||||||
const auto decim_0_out = decim_0.execute(buffer, dst_buffer);
|
const auto decim_0_out = decim_0.execute(buffer, dst_buffer);
|
||||||
const auto decim_1_out = decim_1.execute(decim_0_out, dst_buffer);
|
const auto decim_1_out = decim_1.execute(decim_0_out, dst_buffer);
|
||||||
const auto channel_out = channel_filter.execute(decim_1_out, dst_buffer);
|
const auto channel_out = channel_filter.execute(decim_1_out, dst_buffer);
|
||||||
@ -42,11 +36,6 @@ void NarrowbandFMAudio::execute(const buffer_c8_t& buffer) {
|
|||||||
feed_channel_stats(channel_out);
|
feed_channel_stats(channel_out);
|
||||||
channel_spectrum.feed(channel_out, channel_filter_pass_f, channel_filter_stop_f);
|
channel_spectrum.feed(channel_out, channel_filter_pass_f, channel_filter_stop_f);
|
||||||
|
|
||||||
const buffer_s16_t work_audio_buffer {
|
|
||||||
(int16_t*)dst.data(),
|
|
||||||
sizeof(*dst.data()) * dst.size()
|
|
||||||
};
|
|
||||||
|
|
||||||
auto audio = demod.execute(channel_out, work_audio_buffer);
|
auto audio = demod.execute(channel_out, work_audio_buffer);
|
||||||
|
|
||||||
static uint64_t audio_present_history = 0;
|
static uint64_t audio_present_history = 0;
|
||||||
|
@ -39,6 +39,16 @@ public:
|
|||||||
void on_message(const Message* const message) override;
|
void on_message(const Message* const message) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
std::array<complex16_t, 512> dst;
|
||||||
|
const buffer_c16_t dst_buffer {
|
||||||
|
dst.data(),
|
||||||
|
dst.size()
|
||||||
|
};
|
||||||
|
const buffer_s16_t work_audio_buffer {
|
||||||
|
(int16_t*)dst.data(),
|
||||||
|
sizeof(*dst.data()) * dst.size()
|
||||||
|
};
|
||||||
|
|
||||||
dsp::decimate::FIRC8xR16x24FS4Decim8 decim_0;
|
dsp::decimate::FIRC8xR16x24FS4Decim8 decim_0;
|
||||||
dsp::decimate::FIRC16xR16x32Decim8 decim_1;
|
dsp::decimate::FIRC16xR16x32Decim8 decim_1;
|
||||||
|
|
||||||
|
@ -57,12 +57,6 @@ TPMSProcessor::TPMSProcessor() {
|
|||||||
void TPMSProcessor::execute(const buffer_c8_t& buffer) {
|
void TPMSProcessor::execute(const buffer_c8_t& buffer) {
|
||||||
/* 2.4576MHz, 2048 samples */
|
/* 2.4576MHz, 2048 samples */
|
||||||
|
|
||||||
std::array<complex16_t, 512> dst;
|
|
||||||
const buffer_c16_t dst_buffer {
|
|
||||||
dst.data(),
|
|
||||||
dst.size()
|
|
||||||
};
|
|
||||||
|
|
||||||
const auto decim_0_out = decim_0.execute(buffer, dst_buffer);
|
const auto decim_0_out = decim_0.execute(buffer, dst_buffer);
|
||||||
const auto decim_1_out = decim_1.execute(decim_0_out, dst_buffer);
|
const auto decim_1_out = decim_1.execute(decim_0_out, dst_buffer);
|
||||||
const auto decimator_out = decim_1_out;
|
const auto decimator_out = decim_1_out;
|
||||||
|
@ -59,6 +59,12 @@ public:
|
|||||||
void execute(const buffer_c8_t& buffer) override;
|
void execute(const buffer_c8_t& buffer) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
std::array<complex16_t, 512> dst;
|
||||||
|
const buffer_c16_t dst_buffer {
|
||||||
|
dst.data(),
|
||||||
|
dst.size()
|
||||||
|
};
|
||||||
|
|
||||||
dsp::decimate::FIRC8xR16x24FS4Decim4 decim_0;
|
dsp::decimate::FIRC8xR16x24FS4Decim4 decim_0;
|
||||||
dsp::decimate::FIRC16xR16x16Decim2 decim_1;
|
dsp::decimate::FIRC16xR16x16Decim2 decim_1;
|
||||||
|
|
||||||
|
@ -28,21 +28,10 @@ void WidebandFMAudio::execute(const buffer_c8_t& buffer) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::array<complex16_t, 512> dst;
|
|
||||||
const buffer_c16_t dst_buffer {
|
|
||||||
dst.data(),
|
|
||||||
dst.size()
|
|
||||||
};
|
|
||||||
|
|
||||||
const auto decim_0_out = decim_0.execute(buffer, dst_buffer);
|
const auto decim_0_out = decim_0.execute(buffer, dst_buffer);
|
||||||
const auto decim_1_out = decim_1.execute(decim_0_out, dst_buffer);
|
const auto decim_1_out = decim_1.execute(decim_0_out, dst_buffer);
|
||||||
const auto decimator_out = decim_1_out;
|
const auto decimator_out = decim_1_out;
|
||||||
|
|
||||||
const buffer_s16_t work_audio_buffer {
|
|
||||||
(int16_t*)decimator_out.p,
|
|
||||||
sizeof(*decimator_out.p) * decimator_out.count
|
|
||||||
};
|
|
||||||
|
|
||||||
auto channel = decimator_out;
|
auto channel = decimator_out;
|
||||||
|
|
||||||
// TODO: Feed channel_stats post-decimation data?
|
// TODO: Feed channel_stats post-decimation data?
|
||||||
|
@ -36,6 +36,16 @@ public:
|
|||||||
void on_message(const Message* const message) override;
|
void on_message(const Message* const message) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
std::array<complex16_t, 512> dst;
|
||||||
|
const buffer_c16_t dst_buffer {
|
||||||
|
dst.data(),
|
||||||
|
dst.size()
|
||||||
|
};
|
||||||
|
const buffer_s16_t work_audio_buffer {
|
||||||
|
(int16_t*)dst.data(),
|
||||||
|
sizeof(dst) / sizeof(int16_t)
|
||||||
|
};
|
||||||
|
|
||||||
dsp::decimate::FIRC8xR16x24FS4Decim4 decim_0;
|
dsp::decimate::FIRC8xR16x24FS4Decim4 decim_0;
|
||||||
dsp::decimate::FIRC16xR16x16Decim2 decim_1;
|
dsp::decimate::FIRC16xR16x16Decim2 decim_1;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user