92 {
94
95 float frequencyHz;
96
99 } else {
102 }
103
105
106 #ifdef KNOCK_SPECTROGRAM
108
109
110
111
112
113
114
115
116
118
119 int freqStartConst = START_SPECTRORGAM_FREQUENCY;
120 int minFreqDiff = freqStartConst;
121 int freqStart = 0;
122 float freqStep = 0;
123
124 for (size_t i = 0; i < FFT_SIZE/2; i++)
125 {
126 float freq =
float(i * KNOCK_SAMPLE_RATE) / FFT_SIZE;
127 int min = abs(freq - freqStartConst);
128
129
131 freqStep = abs(freq - freqStart);
132 }
133
134 if(min < minFreqDiff) {
135 minFreqDiff = min;
137 freqStart = freq;
138 }
139 }
140
143 }
144 #else
146 #endif
147
148
149 efiSetPadMode(
"knock ch1", KNOCK_PIN_CH1, PAL_MODE_INPUT_ANALOG);
150#if KNOCK_HAS_CH2
151 efiSetPadMode(
"knock ch2", KNOCK_PIN_CH2, PAL_MODE_INPUT_ANALOG);
152#endif
154 }
155}
void efiSetPadMode(const char *msg, brain_pin_e brainPin, iomode_t mode)
void configureBandpass(float samplingFrequency, float centerFrequency, float Q)
constexpr auto & module()
static EngineAccessor engine
static constexpr engine_configuration_s * engineConfiguration
void blackmanharris(float *w, unsigned n, bool sflag)
m_knockFrequencyStart("Knock: Start Freq", SensorCategory.SENSOR_INPUTS, FieldType.INT16, 1090, 1.0, 0.0, 0.0, "Hz")
m_knockFrequencyStep("Knock: Step Freq", SensorCategory.SENSOR_INPUTS, FieldType.INT, 1092, 1.0, 0.0, 0.0, "Hz")
static SpectrogramData * spectrogramData
static size_t spectrogramStartIndex
static Biquad knockFilter
bool enableKnockSpectrogram
bool knockDetectionUseDoubleFrequency