|
|
@ -34,7 +34,8 @@ typedef struct {
|
|
|
|
|
|
|
|
|
|
|
|
/* Private define ------------------------------------------------------------*/
|
|
|
|
/* Private define ------------------------------------------------------------*/
|
|
|
|
/* USER CODE BEGIN PD */
|
|
|
|
/* USER CODE BEGIN PD */
|
|
|
|
#define SAMPLE_COUNT (512) // Sample count per half-transfer
|
|
|
|
#define SAMPLE_COUNT (256) // Sample count per half-transfer
|
|
|
|
|
|
|
|
#define SAMPLES_PER_REPORT (48000) // Report every second given our 48 kHz rate
|
|
|
|
#define MIC_OFFSET_DB ( 0.f) // Linear offset
|
|
|
|
#define MIC_OFFSET_DB ( 0.f) // Linear offset
|
|
|
|
#define MIC_SENSITIVITY (-26.f) // dBFS value expected at MIC_REF_DB
|
|
|
|
#define MIC_SENSITIVITY (-26.f) // dBFS value expected at MIC_REF_DB
|
|
|
|
#define MIC_REF_DB ( 94.f) // dB where sensitivity is specified
|
|
|
|
#define MIC_REF_DB ( 94.f) // dB where sensitivity is specified
|
|
|
@ -58,7 +59,7 @@ UART_HandleTypeDef huart2;
|
|
|
|
static const uint8_t I2S_Frame_Buffer[8] = {
|
|
|
|
static const uint8_t I2S_Frame_Buffer[8] = {
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF
|
|
|
|
};
|
|
|
|
};
|
|
|
|
static uint8_t I2S_Receive_Buffer[SAMPLE_COUNT * sizeof(sample_t)];
|
|
|
|
static uint8_t I2S_Receive_Buffer[SAMPLE_COUNT * 2 * sizeof(sample_t)];
|
|
|
|
|
|
|
|
|
|
|
|
float ln10;
|
|
|
|
float ln10;
|
|
|
|
float MIC_REF_AMPL;
|
|
|
|
float MIC_REF_AMPL;
|
|
|
@ -547,16 +548,16 @@ void SPI_DMAHalfTransmitReceiveCplt(DMA_HandleTypeDef *hdma)
|
|
|
|
float f = process(qfp_int2float(sample[i].value / 4));
|
|
|
|
float f = process(qfp_int2float(sample[i].value / 4));
|
|
|
|
DB_Sum_Squares = qfp_fadd(DB_Sum_Squares, qfp_fmul(f, f));
|
|
|
|
DB_Sum_Squares = qfp_fadd(DB_Sum_Squares, qfp_fmul(f, f));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
DB_Count += SAMPLE_COUNT / 8;
|
|
|
|
DB_Count += SAMPLE_COUNT * 2; // Pretend we sampled the entire I2S buffer
|
|
|
|
|
|
|
|
|
|
|
|
if (DB_Count > 48000 / 4) {
|
|
|
|
if (DB_Count > SAMPLES_PER_REPORT) {
|
|
|
|
float rms = qfp_fsqrt(qfp_fdiv(DB_Sum_Squares, qfp_uint2float(DB_Count)));
|
|
|
|
float rms = qfp_fsqrt(qfp_fdiv(DB_Sum_Squares, qfp_uint2float(DB_Count)));
|
|
|
|
float db = qfp_fadd(MIC_OFFSET_DB + MIC_REF_DB, qfp_fmul(20.f,
|
|
|
|
float db = qfp_fadd(MIC_OFFSET_DB + MIC_REF_DB, qfp_fmul(20.f,
|
|
|
|
qfp_flog10(qfp_fdiv(rms, MIC_REF_AMPL))));
|
|
|
|
qfp_flog10(qfp_fdiv(rms, MIC_REF_AMPL))));
|
|
|
|
DB_Sum_Squares = 0.f;
|
|
|
|
DB_Sum_Squares = 0.f;
|
|
|
|
DB_Count = 0;
|
|
|
|
DB_Count = 0;
|
|
|
|
|
|
|
|
|
|
|
|
printf("%d\r\n", qfp_float2int(db));
|
|
|
|
printf("%d dB\r\n", qfp_float2int(db));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/* USER CODE END 4 */
|
|
|
|
/* USER CODE END 4 */
|
|
|
|