|
30 | 30 | /* Includes ------------------------------------------------------------------*/
|
31 | 31 |
|
32 | 32 | #include "OpenPDMFilter.h"
|
33 |
| - |
| 33 | +#include <Arduino.h> |
| 34 | +#include "FlashIAPBlockDevice.h" |
34 | 35 |
|
35 | 36 | /* Variables -----------------------------------------------------------------*/
|
36 | 37 |
|
37 | 38 | uint32_t div_const = 0;
|
38 | 39 | int64_t sub_const = 0;
|
39 |
| -uint32_t sinc[DECIMATION_MAX * SINCN]; |
40 |
| -uint32_t sinc1[DECIMATION_MAX]; |
41 |
| -uint32_t sinc2[DECIMATION_MAX * 2]; |
42 |
| -uint32_t coef[SINCN][DECIMATION_MAX]; |
| 40 | +uint32_t* sinc; |
| 41 | +uint32_t* sinc1; |
| 42 | +uint32_t* sinc2; |
| 43 | +uint32_t** coef; |
43 | 44 | #ifdef USE_LUT
|
44 |
| -int32_t lut[256][DECIMATION_MAX / 8][SINCN]; |
| 45 | +int32_t*** lut; |
45 | 46 | #endif
|
46 | 47 |
|
47 | 48 |
|
@@ -166,6 +167,23 @@ void Open_PDM_Filter_Init(TPDMFilter_InitStruct *Param)
|
166 | 167 | uint16_t i, j;
|
167 | 168 | int64_t sum = 0;
|
168 | 169 |
|
| 170 | + sinc = (uint32_t*)malloc(DECIMATION_MAX * SINCN * sizeof(uint32_t)); |
| 171 | + sinc1 = (uint32_t*)malloc(DECIMATION_MAX * sizeof(uint32_t)); |
| 172 | + sinc2 = (uint32_t*)malloc(DECIMATION_MAX * 2 * sizeof(uint32_t)); |
| 173 | + coef = (uint32_t**)malloc(SINCN * sizeof(uint32_t*)); |
| 174 | + for (int i = 0; i < SINCN; i++) { |
| 175 | + coef[i] = (uint32_t*)malloc(DECIMATION_MAX * sizeof(uint32_t)); |
| 176 | + } |
| 177 | + #ifdef USE_LUT |
| 178 | + lut = (int32_t***)malloc(256 * sizeof(int32_t**)); |
| 179 | + for (int i = 0; i < 256; i++) { |
| 180 | + lut[i] = (int32_t**)malloc(DECIMATION_MAX / 8 * sizeof(int32_t*)); |
| 181 | + for (int j = 0; j < DECIMATION_MAX / 8; j++) { |
| 182 | + lut[i][j] = (int32_t*)malloc(SINCN * sizeof(int32_t)); |
| 183 | + } |
| 184 | + } |
| 185 | + #endif |
| 186 | + |
169 | 187 | uint8_t decimation = Param->Decimation;
|
170 | 188 |
|
171 | 189 | for (i = 0; i < SINCN; i++) {
|
@@ -213,6 +231,43 @@ void Open_PDM_Filter_Init(TPDMFilter_InitStruct *Param)
|
213 | 231 | ((c >> 1) & 0x01) * coef_p[d * 8 + 6] +
|
214 | 232 | ((c ) & 0x01) * coef_p[d * 8 + 7];
|
215 | 233 | }
|
| 234 | + |
| 235 | + |
| 236 | +#if 0 |
| 237 | + // 1MB block device, 1MB into flash storage |
| 238 | + static FlashIAPBlockDevice bd(XIP_BASE + 0x100000, 0x100000); |
| 239 | + int err = bd.init(); |
| 240 | + err = bd.program(lut, 0, DECIMATION_MAX / 8 * SINCN * 256 * sizeof(int32_t)); |
| 241 | + |
| 242 | + int32_t*** _lut = lut; |
| 243 | + |
| 244 | + lut = (int32_t***)(XIP_BASE + 0x100000); |
| 245 | + |
| 246 | +/* |
| 247 | + for (int i = 0; i < 256; i++) { |
| 248 | + for (int j = 0; j < DECIMATION_MAX / 8; j++) { |
| 249 | + for (int k = 0; k < SINCN; k++) { |
| 250 | + Serial.println(lut[i][j][k]); |
| 251 | + } |
| 252 | + } |
| 253 | + } |
| 254 | +*/ |
| 255 | + |
| 256 | + for (int i = 0; i < 256; i++) { |
| 257 | + for (int j = 0; j < DECIMATION_MAX / 8; j++) { |
| 258 | + free(_lut[i][j]); |
| 259 | + } |
| 260 | + free(_lut[i]); |
| 261 | + } |
| 262 | +#endif |
| 263 | + |
| 264 | + free(sinc); |
| 265 | + free(sinc1); |
| 266 | + free(sinc2); |
| 267 | + for (int i = 0; i < SINCN; i++) { |
| 268 | + free(coef[i]); |
| 269 | + } |
| 270 | + |
216 | 271 | #endif
|
217 | 272 | }
|
218 | 273 |
|
|
0 commit comments