diff --git a/.gitignore b/.gitignore index ade4a7e..5ef6f49 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ imgui.ini stmdspgui stmdspgui.exe *.o +.* diff --git a/source/file.cpp b/source/file.cpp index d82f0ec..355ab7b 100644 --- a/source/file.cpp +++ b/source/file.cpp @@ -87,6 +87,7 @@ void fileRenderMenu() // Treat like new file. fileCurrentPath.clear(); + statusMessage = "Ready."; } } diff --git a/templates/1_convolve_simple.cpp b/templates/1_convolve_simple.cpp index 0f1973d..8de05d3 100644 --- a/templates/1_convolve_simple.cpp +++ b/templates/1_convolve_simple.cpp @@ -7,10 +7,10 @@ * transient response is not calculated. */ -adcsample_t *process_data(adcsample_t *samples, unsigned int size) +Sample *process_data(Samples samples) { // Define our output buffer. SIZE is the largest size of the 'samples' buffer. - static adcsample_t buffer[SIZE]; + static Sample buffer[samples.size()]; // Define our filter constexpr unsigned int filter_size = 3; @@ -19,7 +19,7 @@ adcsample_t *process_data(adcsample_t *samples, unsigned int size) }; // Begin convolving: - for (int n = 0; n < size - (filter_size - 1); n++) { + for (int n = 0; n < samples.size() - (filter_size - 1); n++) { buffer[n] = 0; for (int k = 0; k < filter_size; k++) buffer[n] += samples[n + k] * filter[k]; diff --git a/templates/2_convolve_overlap_save.cpp b/templates/2_convolve_overlap_save.cpp index 1387d7f..57c020a 100644 --- a/templates/2_convolve_overlap_save.cpp +++ b/templates/2_convolve_overlap_save.cpp @@ -11,9 +11,9 @@ * computation. */ -adcsample_t *process_data(adcsample_t *samples, unsigned int size) +Sample *process_data(Samples samples) { - static adcsample_t buffer[SIZE]; + static Sample buffer[samples.size()]; constexpr unsigned int filter_size = 3; float filter[filter_size] = { @@ -21,9 +21,9 @@ adcsample_t *process_data(adcsample_t *samples, unsigned int size) }; // Keep a buffer of extra samples for overlap-save - static adcsample_t prev[filter_size]; + static Sample prev[filter_size]; - for (int n = 0; n < size; n++) { + for (int n = 0; n < samples.size(); n++) { buffer[n] = 0; for (int k = 0; k < filter_size; k++) { @@ -40,7 +40,7 @@ adcsample_t *process_data(adcsample_t *samples, unsigned int size) // Save samples for the next convolution run for (int i = 0; i < filter_size; i++) - prev[i] = samples[size - filter_size + i]; + prev[i] = samples[samples.size() - filter_size + i]; return buffer; } diff --git a/templates/3_fir.cpp b/templates/3_fir.cpp index 7af66a8..3a68500 100644 --- a/templates/3_fir.cpp +++ b/templates/3_fir.cpp @@ -7,9 +7,9 @@ * within the available execution time. Samples are also normalized so that they center around zero. */ -adcsample_t *process_data(adcsample_t *samples, unsigned int size) +Sample *process_data(Samples samples) { - static adcsample_t buffer[SIZE]; + static Sample buffer[samples.size()]; // Define the filter: constexpr unsigned int filter_size = 3; @@ -19,9 +19,9 @@ adcsample_t *process_data(adcsample_t *samples, unsigned int size) }; // Do an overlap-save convolution - static adcsample_t prev[filter_size]; + static Sample prev[filter_size]; - for (int n = 0; n < size; n++) { + for (int n = 0; n < samples.size(); n++) { // Using a float variable for accumulation allows for better code optimization float v = 0; @@ -40,7 +40,7 @@ adcsample_t *process_data(adcsample_t *samples, unsigned int size) // Save samples for next convolution for (int i = 0; i < filter_size; i++) - prev[i] = samples[size - filter_size + i]; + prev[i] = samples[samples.size() - filter_size + i]; return buffer; } diff --git a/templates/4_fir_pro.cpp b/templates/4_fir_pro.cpp index 379b83b..b1a6832 100644 --- a/templates/4_fir_pro.cpp +++ b/templates/4_fir_pro.cpp @@ -10,7 +10,7 @@ typedef struct static void arm_fir_f32(const arm_fir_instance_f32 * S, float32_t * pSrc, float32_t * pDst, uint32_t blockSize); -adcsample_t *process_data(adcsample_t *samples, unsigned int size) +Sample *process_data(Samples samples) { // 1. Define our array sizes (Be sure to set Run > Set buffer size... to below value!) constexpr unsigned int buffer_size = 500; @@ -34,18 +34,18 @@ adcsample_t *process_data(adcsample_t *samples, unsigned int size) static float working[buffer_size + filter_size]; // 3. Scale 0-4095 interger sample values to +/- 1.0 floats - for (unsigned int i = 0; i < size; i++) + for (unsigned int i = 0; i < samples.size(); i++) input[i] = (samples[i] - 2048) / 2048.f; // 4. Compute the FIR arm_fir_instance_f32 fir { filter_size, working, filter }; - arm_fir_f32(&fir, input, output, size); + arm_fir_f32(&fir, input, output, samples.size()); // 5. Convert float results back to 0-4095 range for output - for (unsigned int i = 0; i < size; i++) + for (unsigned int i = 0; i < samples.size(); i++) samples[i] = output[i] * 2048.f + 2048; - return samples; + return samples.data(); } // Below taken from the CMSIS DSP Library (find it on GitHub) diff --git a/templates/5_fir_differentiator.cpp b/templates/5_fir_differentiator.cpp index a3a7d4f..72415c6 100644 --- a/templates/5_fir_differentiator.cpp +++ b/templates/5_fir_differentiator.cpp @@ -7,23 +7,23 @@ * 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) +Sample *process_data(Samples samples) { constexpr int scaling_factor = 4; - static adcsample_t output[SIZE]; - static adcsample_t prev = 2048; + static Sample output[samples.size()]; + static Sample prev = 2048; // Compute the first output value using the saved sample. output[0] = 2048 + ((samples[0] - prev) * scaling_factor); - for (unsigned int i = 1; i < size; i++) { + for (unsigned int i = 1; i < samples.size(); i++) { // Take the rate of change and scale it. // 2048 is added as the output should be centered in the voltage range. output[i] = 2048 + ((samples[i] - samples[i - 1]) * scaling_factor); } // Save the last sample for the next iteration. - prev = samples[size - 1]; + prev = samples[samples.size() - 1]; return output; } diff --git a/templates/6_iir_test.cpp b/templates/6_iir_test.cpp index cdb4ab3..116a680 100644 --- a/templates/6_iir_test.cpp +++ b/templates/6_iir_test.cpp @@ -1,13 +1,13 @@ -adcsample_t *process_data(adcsample_t *samples, unsigned int size) +Sample *process_data(Samples samples) { constexpr float alpha = 0.7; - static adcsample_t prev = 2048; + static Sample prev = 2048; samples[0] = (1 - alpha) * samples[0] + alpha * prev; - for (unsigned int i = 1; i < size; i++) + for (unsigned int i = 1; i < samples.size(); i++) samples[i] = (1 - alpha) * samples[i] + alpha * samples[i - 1]; - prev = samples[size - 1]; + prev = samples[samples.size() - 1]; - return samples; + return samples.data(); } diff --git a/templates/7_iir_echo.cpp b/templates/7_iir_echo.cpp index 8e93b35..57e5605 100644 --- a/templates/7_iir_echo.cpp +++ b/templates/7_iir_echo.cpp @@ -1,22 +1,22 @@ -adcsample_t *process_data(adcsample_t *samples, unsigned int size) +Sample *process_data(Samples samples) { constexpr float alpha = 0.75; constexpr unsigned int D = 100; - static adcsample_t output[SIZE]; - static adcsample_t prev[D]; // prev[0] = output[0 - D] + static Sample output[samples.size()]; + static Sample prev[D]; // prev[0] = output[0 - D] // Do calculations with previous output for (unsigned int i = 0; i < D; i++) output[i] = samples[i] + alpha * (prev[i] - 2048); // Do calculations with current samples - for (unsigned int i = D; i < size; i++) + for (unsigned int i = D; i < samples.size(); i++) output[i] = samples[i] + alpha * (output[i - D] - 2048); // Save outputs for next computation for (unsigned int i = 0; i < D; i++) - prev[i] = output[size - (D - i)]; + prev[i] = output[samples.size() - (D - i)]; return output; }