feat: ADC buffer count
This commit is contained in:
parent
824e73237b
commit
085242a154
@ -5,6 +5,7 @@
|
|||||||
#define ADC_M 2048
|
#define ADC_M 2048
|
||||||
extern int16_t adc_buf[ADC_M];
|
extern int16_t adc_buf[ADC_M];
|
||||||
extern uint16_t pADC;
|
extern uint16_t pADC;
|
||||||
|
extern uint16_t cADC;
|
||||||
extern uint8_t fADC;
|
extern uint8_t fADC;
|
||||||
|
|
||||||
void adc0_Init();
|
void adc0_Init();
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include "fft.h"
|
#include "fft.h"
|
||||||
|
|
||||||
extern const q15_t hanning_117[];
|
extern const q15_t hanning[];
|
||||||
|
|
||||||
extern const uint16_t bitrevTable[];
|
extern const uint16_t bitrevTable[];
|
||||||
extern const q15_t rotCoef[];
|
extern const q15_t rotCoef[];
|
||||||
|
@ -6,12 +6,9 @@
|
|||||||
#define FS 10000
|
#define FS 10000
|
||||||
#define RE FS / FFT_N
|
#define RE FS / FFT_N
|
||||||
|
|
||||||
#define FREQ_BIT1 1100
|
|
||||||
#define FREQ_SYNC 1200
|
|
||||||
#define FREQ_BIT0 1300
|
|
||||||
#define FREQ_START 1900
|
|
||||||
#define FREQ_BLACK 1500
|
#define FREQ_BLACK 1500
|
||||||
#define FREQ_WHITE 4000
|
#define FREQ_WHITE 4000
|
||||||
|
#define FREQ_SYNC 4500
|
||||||
#define FREQ_RANGE FREQ_WHITE - FREQ_BLACK
|
#define FREQ_RANGE FREQ_WHITE - FREQ_BLACK
|
||||||
#define COLOR_SCALE 32
|
#define COLOR_SCALE 32
|
||||||
|
|
||||||
|
15
src/adc.c
15
src/adc.c
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
int16_t adc_buf[ADC_M];
|
int16_t adc_buf[ADC_M];
|
||||||
uint16_t pADC = 0;
|
uint16_t pADC = 0;
|
||||||
|
uint16_t cADC = 0;
|
||||||
uint8_t fADC = 0;
|
uint8_t fADC = 0;
|
||||||
|
|
||||||
void adc0_Init() {
|
void adc0_Init() {
|
||||||
@ -30,8 +31,16 @@ int16_t adc0_TR_DATA() {
|
|||||||
|
|
||||||
static uint16_t lastPos = 0;
|
static uint16_t lastPos = 0;
|
||||||
void adc0_read_buf(int16_t *data, uint16_t len) {
|
void adc0_read_buf(int16_t *data, uint16_t len) {
|
||||||
for (uint16_t i = 0; i < len; i++) {
|
if (cADC > ADC_M) {
|
||||||
data[i] = adc_buf[lastPos];
|
cADC = ADC_M;
|
||||||
lastPos = (lastPos + 1) % ADC_M;
|
lastPos = pADC;
|
||||||
|
}
|
||||||
|
while (len) {
|
||||||
|
if (cADC) {
|
||||||
|
*data++ = adc_buf[lastPos];
|
||||||
|
lastPos = (lastPos + 1) % ADC_M;
|
||||||
|
cADC--;
|
||||||
|
len--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@ void SysTick_Handler(void) {
|
|||||||
if (fADC) {
|
if (fADC) {
|
||||||
adc_buf[pADC] = adc0_TR_DATA() - 1550;
|
adc_buf[pADC] = adc0_TR_DATA() - 1550;
|
||||||
pADC = (pADC + 1) % ADC_M;
|
pADC = (pADC + 1) % ADC_M;
|
||||||
|
cADC++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,9 +8,9 @@
|
|||||||
|
|
||||||
static q15_t res[FFT_N * 2];
|
static q15_t res[FFT_N * 2];
|
||||||
|
|
||||||
static void hanning(q15_t *data, uint16_t len) {
|
static void applyWindow(q15_t *data, uint16_t len) {
|
||||||
for (uint16_t i = len; i < FFT_N; i++) data[i] = 0;
|
for (uint16_t i = len; i < FFT_N; i++) data[i] = 0;
|
||||||
for (uint16_t i = 0; i < len; i++) data[i] = (q15_t)(((q31_t)data[i] * hanning_117[i]) >> 15);
|
for (uint16_t i = 0; i < len; i++) data[i] = (q15_t)(((q31_t)data[i] * hanning[i]) >> 15);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void bitreversal(q31_t *data) {
|
static inline void bitreversal(q31_t *data) {
|
||||||
@ -88,7 +88,7 @@ static inline void butterfly(q15_t *data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void FFT(q15_t *data, uint16_t len) {
|
void FFT(q15_t *data, uint16_t len) {
|
||||||
hanning(data, len);
|
applyWindow(data, len);
|
||||||
for (uint16_t i = 0; i < FFT_N; i++) {
|
for (uint16_t i = 0; i < FFT_N; i++) {
|
||||||
res[Re(i)] = data[i]; // real
|
res[Re(i)] = data[i]; // real
|
||||||
res[Im(i)] = 0; // imaginary
|
res[Im(i)] = 0; // imaginary
|
||||||
|
@ -1,14 +1,17 @@
|
|||||||
#include "fft/table.h"
|
#include "fft/table.h"
|
||||||
|
|
||||||
const q15_t hanning_117[] = {
|
const q15_t hanning[] = {
|
||||||
0, 24, 96, 216, 383, 597, 858, 1164, 1514, 1909, 2345, 2823, 3341, 3897, 4489,
|
0, 11, 43, 96, 171, 266, 383, 521, 679, 858, 1057, 1276, 1514, 1772, 2049, 2345,
|
||||||
5117, 5777, 6469, 7190, 7937, 8710, 9505, 10320, 11153, 12001, 12862, 13733, 14613, 15497, 16384,
|
2659, 2991, 3341, 3707, 4090, 4489, 4904, 5333, 5777, 6235, 6706, 7190, 7685, 8192, 8710, 9237,
|
||||||
17271, 18155, 19035, 19906, 20767, 21615, 22448, 23263, 24058, 24831, 25578, 26299, 26991, 27651, 28279,
|
9774, 10320, 10873, 11434, 12001, 12574, 13151, 13733, 14319, 14907, 15497, 16088, 16680, 17271, 17861, 18449,
|
||||||
28871, 29427, 29945, 30423, 30859, 31254, 31604, 31910, 32171, 32385, 32552, 32672, 32744, 32767, 32744,
|
19035, 19617, 20194, 20767, 21334, 21895, 22448, 22994, 23531, 24058, 24576, 25083, 25578, 26062, 26533, 26991,
|
||||||
32672, 32552, 32385, 32171, 31910, 31604, 31254, 30859, 30423, 29945, 29427, 28871, 28279, 27651, 26991,
|
27435, 27864, 28279, 28678, 29061, 29427, 29777, 30109, 30423, 30719, 30996, 31254, 31492, 31711, 31910, 32089,
|
||||||
26299, 25578, 24831, 24058, 23263, 22448, 21615, 20767, 19906, 19035, 18155, 17271, 16384, 15497, 14613,
|
32247, 32385, 32502, 32597, 32672, 32725, 32757, 32767, 32757, 32725, 32672, 32597, 32502, 32385, 32247, 32089,
|
||||||
13733, 12862, 12001, 11153, 10320, 9505, 8710, 7937, 7190, 6469, 5777, 5117, 4489, 3897, 3341,
|
31910, 31711, 31492, 31254, 30996, 30719, 30423, 30109, 29777, 29427, 29061, 28678, 28279, 27864, 27435, 26991,
|
||||||
2823, 2345, 1909, 1514, 1164, 858, 597, 383, 216, 96, 24, 0,
|
26533, 26062, 25578, 25083, 24576, 24058, 23531, 22994, 22448, 21895, 21334, 20767, 20194, 19617, 19035, 18449,
|
||||||
|
17861, 17271, 16680, 16088, 15497, 14907, 14319, 13733, 13151, 12574, 12001, 11434, 10873, 10320, 9774, 9237,
|
||||||
|
8710, 8192, 7685, 7190, 6706, 6235, 5777, 5333, 4904, 4489, 4090, 3707, 3341, 2991, 2659, 2345,
|
||||||
|
2049, 1772, 1514, 1276, 1057, 858, 679, 521, 383, 266, 171, 96, 43, 11, 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user