5DMAMEM
static volatile uint16_t
__attribute__((aligned(32))) adc_buffer1[256];
6DMAMEM static volatile uint16_t
__attribute__((aligned(32))) adc_buffer2[256];
273 int16_t* buf = (int16_t*)buffer;
274 const int16_t* win = (int16_t*)window;
276 for (
int i = 0; i < 256; i++) {
277 int32_t val = *buf * *win++;
285 uint16_t samplePos = 0;
286 uint16_t samplesStoragePos = 0;
287 volatile uint16_t* data = dma_buffer_instance->bufferLastISRFilled();
288 volatile uint16_t* data_end = data + dma_buffer_instance->bufferCountLastISRFilled();
291 if ((uint32_t)data >= 0x20200000u)
292 arm_dcache_delete((
void*)data,
sizeof(adc_buffer1));
295 while (data < data_end) {
301 dma_buffer_instance->clearInterrupt();
308 for (
int i = 0; i < 256; i++) {
322 adc->adc1->setAveraging(32);
323 adc->adc1->setResolution(16);
324 adc->adc1->calibrate();
325 adc->adc1->wait_for_cal();
329 adc->adc1->startSingleRead(
pin);
348 adc->adc1->setAveraging(32);
349 adc->adc1->setResolution(16);
350 adc->adc1->calibrate();
351 adc->adc1->wait_for_cal();
355 adc->adc1->startSingleRead(
pin);
362 adc->adc1->stopTimer();
380 float averageMagnitude = 0.0f;
382 for (uint16_t i = 0; i <
OutputBins - 1; i++) {
385 intensity = map(intensity,
minDB,
maxDB, 0.0f, 1.0f);
393 averageMagnitude *= 10.0f;
394 threshold = powf(averageMagnitude, 2.0f);
AnalogBufferDMA adc_dma_instance(adc_buffer1, 256, adc_buffer2, 256)
static DMAMEM volatile uint16_t __attribute__((aligned(32))) adc_buffer1[256]
Declares the MicrophoneFourier class for performing FFT on microphone input.
float Filter(float value)
Filters the derivative of the input value and normalizes the output.
float Filter(float value)
Filters and normalizes the input value for FFT data processing.
static void Radix2FFT(float *data)
Performs a Radix-2 FFT on the provided data.
static void ComplexMagnitude(float *complexData, float *magnitude)
Computes the magnitude of complex numbers from interleaved real and imaginary components.
static bool isInitialized
Flag indicating if the system is initialized.
static float inputSamp[FFTSize *2]
Raw input samples for FFT.
static FFT< FFTSize > fft
FFT processor instance.
static FFTFilter fftFilters[OutputBins]
Array of FFT filters for post-processing.
static float threshold
Threshold value for processing.
static float outputData[OutputBins]
Processed FFT data for output bins.
static const uint16_t OutputBins
Number of output bins from FFT processing.
static DerivativeFilter peakFilterRate
Filter for peak rate detection.
static float outputMagn[FFTSize]
Magnitude output from FFT.
static float maxDB
Maximum decibel value for normalization.
static float inputStorage[FFTSize]
Storage for processed input samples.
static uint8_t pin
Pin number for microphone input.
static float outputDataFilt[OutputBins]
Filtered FFT data for output bins.
static float AverageMagnitude(uint16_t binL, uint16_t binH)
Calculates the average magnitude of the specified FFT bins.
static uint16_t sampleRate
Sampling rate in Hz.
static float minDB
Minimum decibel value for normalization.
Provides real-time FFT analysis of microphone signals.
static uint8_t gain_pin
Pin number for gain control (if applicable).
static void setMicGain(bool is50db)
Sets the microphone gain.
static void setSamplingRate(uint32_t sampleRate)
Sets the sampling rate for the microphone.
static void UpdateDMA()
Updates the DMA system to process new samples.
static const int16_t Hanning256[]
Hanning window coefficients for FFT.
static void Initialize(uint8_t pin, uint32_t sampleRate, float minDB, float maxDB)
Initializes the microphone and FFT system with basic parameters.
static void SamplerCallback()
Callback function for the sampling timer.
static void window_raw_fft_data(void *buffer, const void *window)
Applies a Hanning window to raw FFT data.
static bool microphoneGain_50db
Flag to enable or disable 50dB microphone gain.