165 {
167 return;
168 }
169
170 float sumSq = 0;
171
172
173 constexpr float ratio = 3.3f / 4095.0f;
174
176
177
178
179
181
182
183 for (size_t i = 0; i < localCount; i++) {
185
190 }
191
192 sumSq += filtered * filtered;
193 }
194
195
197
198
200
201#ifdef KNOCK_SPECTROGRAM
204
207 } else {
209 }
210
212 for(uint8_t i = 0; i < COMPRESSED_SPECTRUM_PROTOCOL_SIZE; ++i) {
213
215
220
221 uint32_t compressed = uint32_t(a << 24 | b << 16 | c << 8 | d);
222
223 {
224 chibios_rt::CriticalSectionLocker csl;
225 spectrum[i] = compressed;
226 }
227 }
228
230
231 {
232 chibios_rt::CriticalSectionLocker csl;
234 }
235 }
236
237#endif
238
239
240 float meanSquares = sumSq / localCount;
241
242
243 float db = 10 * log10(meanSquares);
244
245
246 db = clampF(-100, db, 100);
247
249}
float filter(float input)
void cookSteadyState(float steadyStateInput)
TunerStudioOutputChannels outputChannels
float amplitude(const complex_type &fft)
bool fft_adc_sample_filtered(Biquad &knockFilter, float *w, float ratio, float sensitivity, const adcsample_t *data_in, complex_type *data_out, const size_t size)
bool fft_adc_sample(float *w, float ratio, float sensitivity, const adcsample_t *data_in, complex_type *data_out, const size_t size)
m_knockSpectrumChannelCyl("Knock: ChannelAndCylNumber", SensorCategory.SENSOR_INPUTS, FieldType.INT16, 1088, 1.0, 0.0, 0.0, "compressed N + N")
static uint8_t toDb(const float &voltage)
fft::complex_type fftBuffer[FFT_SIZE]
bool enableKnockSpectrogramFilter
float knockSpectrumSensitivity