gui: fix buffer size; add differentiator template

pull/3/head
Clyne 4 years ago
parent 0fde1b98ee
commit 6fda5c31da

@ -0,0 +1,28 @@
/**
* 5_iir_differentiator.cpp
* Written by Clyne Sullivan.
*
* Does an IIR differentiation on the incoming signal, so that the output is representative of the
* rate of change of the input.
* A scaling factor is applied so that the output's form is more clearly visible.
*/
adcsample_t *process_data(adcsample_t *samples, unsigned int size)
{
constexpr int scaling_factor = 4;
static adcsample_t prev = 2048;
// Compute the first output value using the saved sample.
samples[0] = 2048 + ((samples[0] - prev) * scaling_factor;
// Save the last sample for the next iteration.
prev = samples[size - 1];
for (unsigned int i = 1; i < size; i++) {
// Take the rate of change and scale it.
// 2048 is added as the output should be centered in the voltage range.
samples[i] = 2048 + ((samples[i] - samples[i - 1]) * scaling_factor);
}
return samples;
}

@ -239,7 +239,7 @@ static wxString file_header (R"cpp(
#include <cstdint> #include <cstdint>
using adcsample_t = uint16_t; using adcsample_t = uint16_t;
constexpr unsigned int SIZE = 4000; constexpr unsigned int SIZE = 3000;
adcsample_t *process_data(adcsample_t *samples, unsigned int size); adcsample_t *process_data(adcsample_t *samples, unsigned int size);
@ -482,7 +482,7 @@ void MainFrame::onRunLogResults(wxCommandEvent& ce)
void MainFrame::onRunEditBSize([[maybe_unused]] wxCommandEvent&) void MainFrame::onRunEditBSize([[maybe_unused]] wxCommandEvent&)
{ {
if (m_device != nullptr && m_device->connected()) { if (m_device != nullptr && m_device->connected()) {
wxTextEntryDialog dialog (this, "Enter new buffer size (100-4000)", "Set Buffer Size"); wxTextEntryDialog dialog (this, "Enter new buffer size (100-3000)", "Set Buffer Size");
if (dialog.ShowModal() == wxID_OK) { if (dialog.ShowModal() == wxID_OK) {
if (wxString value = dialog.GetValue(); !value.IsEmpty()) { if (wxString value = dialog.GetValue(); !value.IsEmpty()) {
if (unsigned long n; value.ToULong(&n)) { if (unsigned long n; value.ToULong(&n)) {

Loading…
Cancel
Save