1 /****************************************************************************** 2 * @file transform_functions.h 3 * @brief Public header file for CMSIS DSP Library 4 * @version V1.10.0 5 * @date 08 July 2021 6 * Target Processor: Cortex-M and Cortex-A cores 7 ******************************************************************************/ 8 /* 9 * Copyright (c) 2010-2020 Arm Limited or its affiliates. All rights reserved. 10 * 11 * SPDX-License-Identifier: Apache-2.0 12 * 13 * Licensed under the Apache License, Version 2.0 (the License); you may 14 * not use this file except in compliance with the License. 15 * You may obtain a copy of the License at 16 * 17 * www.apache.org/licenses/LICENSE-2.0 18 * 19 * Unless required by applicable law or agreed to in writing, software 20 * distributed under the License is distributed on an AS IS BASIS, WITHOUT 21 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 22 * See the License for the specific language governing permissions and 23 * limitations under the License. 24 */ 25 26 27 #ifndef TRANSFORM_FUNCTIONS_H_ 28 #define TRANSFORM_FUNCTIONS_H_ 29 30 #include "arm_math_types.h" 31 #include "arm_math_memory.h" 32 33 #include "dsp/none.h" 34 #include "dsp/utils.h" 35 36 #include "dsp/basic_math_functions.h" 37 #include "dsp/complex_math_functions.h" 38 39 #ifdef __cplusplus 40 extern "C" 41 { 42 #endif 43 44 45 /** 46 * @defgroup groupTransforms Transform Functions 47 */ 48 49 50 /** 51 * @brief Instance structure for the Q15 CFFT/CIFFT function. 52 */ 53 typedef struct 54 { 55 uint16_t fftLen; /**< length of the FFT. */ 56 uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ 57 uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ 58 const q15_t *pTwiddle; /**< points to the Sin twiddle factor table. */ 59 const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ 60 uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ 61 uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ 62 } arm_cfft_radix2_instance_q15; 63 64 /* Deprecated */ 65 arm_status arm_cfft_radix2_init_q15( 66 arm_cfft_radix2_instance_q15 * S, 67 uint16_t fftLen, 68 uint8_t ifftFlag, 69 uint8_t bitReverseFlag); 70 71 /* Deprecated */ 72 void arm_cfft_radix2_q15( 73 const arm_cfft_radix2_instance_q15 * S, 74 q15_t * pSrc); 75 76 77 /** 78 * @brief Instance structure for the Q15 CFFT/CIFFT function. 79 */ 80 typedef struct 81 { 82 uint16_t fftLen; /**< length of the FFT. */ 83 uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ 84 uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ 85 const q15_t *pTwiddle; /**< points to the twiddle factor table. */ 86 const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ 87 uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ 88 uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ 89 } arm_cfft_radix4_instance_q15; 90 91 /* Deprecated */ 92 arm_status arm_cfft_radix4_init_q15( 93 arm_cfft_radix4_instance_q15 * S, 94 uint16_t fftLen, 95 uint8_t ifftFlag, 96 uint8_t bitReverseFlag); 97 98 /* Deprecated */ 99 void arm_cfft_radix4_q15( 100 const arm_cfft_radix4_instance_q15 * S, 101 q15_t * pSrc); 102 103 /** 104 * @brief Instance structure for the Radix-2 Q31 CFFT/CIFFT function. 105 */ 106 typedef struct 107 { 108 uint16_t fftLen; /**< length of the FFT. */ 109 uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ 110 uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ 111 const q31_t *pTwiddle; /**< points to the Twiddle factor table. */ 112 const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ 113 uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ 114 uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ 115 } arm_cfft_radix2_instance_q31; 116 117 /* Deprecated */ 118 arm_status arm_cfft_radix2_init_q31( 119 arm_cfft_radix2_instance_q31 * S, 120 uint16_t fftLen, 121 uint8_t ifftFlag, 122 uint8_t bitReverseFlag); 123 124 /* Deprecated */ 125 void arm_cfft_radix2_q31( 126 const arm_cfft_radix2_instance_q31 * S, 127 q31_t * pSrc); 128 129 /** 130 * @brief Instance structure for the Q31 CFFT/CIFFT function. 131 */ 132 typedef struct 133 { 134 uint16_t fftLen; /**< length of the FFT. */ 135 uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ 136 uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ 137 const q31_t *pTwiddle; /**< points to the twiddle factor table. */ 138 const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ 139 uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ 140 uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ 141 } arm_cfft_radix4_instance_q31; 142 143 /* Deprecated */ 144 void arm_cfft_radix4_q31( 145 const arm_cfft_radix4_instance_q31 * S, 146 q31_t * pSrc); 147 148 /* Deprecated */ 149 arm_status arm_cfft_radix4_init_q31( 150 arm_cfft_radix4_instance_q31 * S, 151 uint16_t fftLen, 152 uint8_t ifftFlag, 153 uint8_t bitReverseFlag); 154 155 /** 156 * @brief Instance structure for the floating-point CFFT/CIFFT function. 157 */ 158 typedef struct 159 { 160 uint16_t fftLen; /**< length of the FFT. */ 161 uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ 162 uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ 163 const float32_t *pTwiddle; /**< points to the Twiddle factor table. */ 164 const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ 165 uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ 166 uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ 167 float32_t onebyfftLen; /**< value of 1/fftLen. */ 168 } arm_cfft_radix2_instance_f32; 169 170 171 /* Deprecated */ 172 arm_status arm_cfft_radix2_init_f32( 173 arm_cfft_radix2_instance_f32 * S, 174 uint16_t fftLen, 175 uint8_t ifftFlag, 176 uint8_t bitReverseFlag); 177 178 /* Deprecated */ 179 void arm_cfft_radix2_f32( 180 const arm_cfft_radix2_instance_f32 * S, 181 float32_t * pSrc); 182 183 /** 184 * @brief Instance structure for the floating-point CFFT/CIFFT function. 185 */ 186 typedef struct 187 { 188 uint16_t fftLen; /**< length of the FFT. */ 189 uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ 190 uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ 191 const float32_t *pTwiddle; /**< points to the Twiddle factor table. */ 192 const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ 193 uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ 194 uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ 195 float32_t onebyfftLen; /**< value of 1/fftLen. */ 196 } arm_cfft_radix4_instance_f32; 197 198 199 200 /* Deprecated */ 201 arm_status arm_cfft_radix4_init_f32( 202 arm_cfft_radix4_instance_f32 * S, 203 uint16_t fftLen, 204 uint8_t ifftFlag, 205 uint8_t bitReverseFlag); 206 207 /* Deprecated */ 208 void arm_cfft_radix4_f32( 209 const arm_cfft_radix4_instance_f32 * S, 210 float32_t * pSrc); 211 212 /** 213 * @brief Instance structure for the fixed-point CFFT/CIFFT function. 214 */ 215 typedef struct 216 { 217 uint16_t fftLen; /**< length of the FFT. */ 218 const q15_t *pTwiddle; /**< points to the Twiddle factor table. */ 219 const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ 220 uint16_t bitRevLength; /**< bit reversal table length. */ 221 #if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) 222 const uint32_t *rearranged_twiddle_tab_stride1_arr; /**< Per stage reordered twiddle pointer (offset 1) */ \ 223 const uint32_t *rearranged_twiddle_tab_stride2_arr; /**< Per stage reordered twiddle pointer (offset 2) */ \ 224 const uint32_t *rearranged_twiddle_tab_stride3_arr; /**< Per stage reordered twiddle pointer (offset 3) */ \ 225 const q15_t *rearranged_twiddle_stride1; /**< reordered twiddle offset 1 storage */ \ 226 const q15_t *rearranged_twiddle_stride2; /**< reordered twiddle offset 2 storage */ \ 227 const q15_t *rearranged_twiddle_stride3; 228 #endif 229 } arm_cfft_instance_q15; 230 231 arm_status arm_cfft_init_4096_q15(arm_cfft_instance_q15 * S); 232 arm_status arm_cfft_init_2048_q15(arm_cfft_instance_q15 * S); 233 arm_status arm_cfft_init_1024_q15(arm_cfft_instance_q15 * S); 234 arm_status arm_cfft_init_512_q15(arm_cfft_instance_q15 * S); 235 arm_status arm_cfft_init_256_q15(arm_cfft_instance_q15 * S); 236 arm_status arm_cfft_init_128_q15(arm_cfft_instance_q15 * S); 237 arm_status arm_cfft_init_64_q15(arm_cfft_instance_q15 * S); 238 arm_status arm_cfft_init_32_q15(arm_cfft_instance_q15 * S); 239 arm_status arm_cfft_init_16_q15(arm_cfft_instance_q15 * S); 240 241 arm_status arm_cfft_init_q15( 242 arm_cfft_instance_q15 * S, 243 uint16_t fftLen); 244 245 void arm_cfft_q15( 246 const arm_cfft_instance_q15 * S, 247 q15_t * p1, 248 uint8_t ifftFlag, 249 uint8_t bitReverseFlag); 250 251 /** 252 * @brief Instance structure for the fixed-point CFFT/CIFFT function. 253 */ 254 typedef struct 255 { 256 uint16_t fftLen; /**< length of the FFT. */ 257 const q31_t *pTwiddle; /**< points to the Twiddle factor table. */ 258 const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ 259 uint16_t bitRevLength; /**< bit reversal table length. */ 260 #if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) 261 const uint32_t *rearranged_twiddle_tab_stride1_arr; /**< Per stage reordered twiddle pointer (offset 1) */ \ 262 const uint32_t *rearranged_twiddle_tab_stride2_arr; /**< Per stage reordered twiddle pointer (offset 2) */ \ 263 const uint32_t *rearranged_twiddle_tab_stride3_arr; /**< Per stage reordered twiddle pointer (offset 3) */ \ 264 const q31_t *rearranged_twiddle_stride1; /**< reordered twiddle offset 1 storage */ \ 265 const q31_t *rearranged_twiddle_stride2; /**< reordered twiddle offset 2 storage */ \ 266 const q31_t *rearranged_twiddle_stride3; 267 #endif 268 } arm_cfft_instance_q31; 269 270 arm_status arm_cfft_init_4096_q31(arm_cfft_instance_q31 * S); 271 arm_status arm_cfft_init_2048_q31(arm_cfft_instance_q31 * S); 272 arm_status arm_cfft_init_1024_q31(arm_cfft_instance_q31 * S); 273 arm_status arm_cfft_init_512_q31(arm_cfft_instance_q31 * S); 274 arm_status arm_cfft_init_256_q31(arm_cfft_instance_q31 * S); 275 arm_status arm_cfft_init_128_q31(arm_cfft_instance_q31 * S); 276 arm_status arm_cfft_init_64_q31(arm_cfft_instance_q31 * S); 277 arm_status arm_cfft_init_32_q31(arm_cfft_instance_q31 * S); 278 arm_status arm_cfft_init_16_q31(arm_cfft_instance_q31 * S); 279 280 arm_status arm_cfft_init_q31( 281 arm_cfft_instance_q31 * S, 282 uint16_t fftLen); 283 284 void arm_cfft_q31( 285 const arm_cfft_instance_q31 * S, 286 q31_t * p1, 287 uint8_t ifftFlag, 288 uint8_t bitReverseFlag); 289 290 /** 291 * @brief Instance structure for the floating-point CFFT/CIFFT function. 292 */ 293 typedef struct 294 { 295 uint16_t fftLen; /**< length of the FFT. */ 296 const float32_t *pTwiddle; /**< points to the Twiddle factor table. */ 297 const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ 298 uint16_t bitRevLength; /**< bit reversal table length. */ 299 #if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) 300 const uint32_t *rearranged_twiddle_tab_stride1_arr; /**< Per stage reordered twiddle pointer (offset 1) */ \ 301 const uint32_t *rearranged_twiddle_tab_stride2_arr; /**< Per stage reordered twiddle pointer (offset 2) */ \ 302 const uint32_t *rearranged_twiddle_tab_stride3_arr; /**< Per stage reordered twiddle pointer (offset 3) */ \ 303 const float32_t *rearranged_twiddle_stride1; /**< reordered twiddle offset 1 storage */ \ 304 const float32_t *rearranged_twiddle_stride2; /**< reordered twiddle offset 2 storage */ \ 305 const float32_t *rearranged_twiddle_stride3; 306 #endif 307 } arm_cfft_instance_f32; 308 309 310 arm_status arm_cfft_init_4096_f32(arm_cfft_instance_f32 * S); 311 arm_status arm_cfft_init_2048_f32(arm_cfft_instance_f32 * S); 312 arm_status arm_cfft_init_1024_f32(arm_cfft_instance_f32 * S); 313 arm_status arm_cfft_init_512_f32(arm_cfft_instance_f32 * S); 314 arm_status arm_cfft_init_256_f32(arm_cfft_instance_f32 * S); 315 arm_status arm_cfft_init_128_f32(arm_cfft_instance_f32 * S); 316 arm_status arm_cfft_init_64_f32(arm_cfft_instance_f32 * S); 317 arm_status arm_cfft_init_32_f32(arm_cfft_instance_f32 * S); 318 arm_status arm_cfft_init_16_f32(arm_cfft_instance_f32 * S); 319 320 arm_status arm_cfft_init_f32( 321 arm_cfft_instance_f32 * S, 322 uint16_t fftLen); 323 324 void arm_cfft_f32( 325 const arm_cfft_instance_f32 * S, 326 float32_t * p1, 327 uint8_t ifftFlag, 328 uint8_t bitReverseFlag); 329 330 331 /** 332 * @brief Instance structure for the Double Precision Floating-point CFFT/CIFFT function. 333 */ 334 typedef struct 335 { 336 uint16_t fftLen; /**< length of the FFT. */ 337 const float64_t *pTwiddle; /**< points to the Twiddle factor table. */ 338 const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ 339 uint16_t bitRevLength; /**< bit reversal table length. */ 340 } arm_cfft_instance_f64; 341 342 arm_status arm_cfft_init_4096_f64(arm_cfft_instance_f64 * S); 343 arm_status arm_cfft_init_2048_f64(arm_cfft_instance_f64 * S); 344 arm_status arm_cfft_init_1024_f64(arm_cfft_instance_f64 * S); 345 arm_status arm_cfft_init_512_f64(arm_cfft_instance_f64 * S); 346 arm_status arm_cfft_init_256_f64(arm_cfft_instance_f64 * S); 347 arm_status arm_cfft_init_128_f64(arm_cfft_instance_f64 * S); 348 arm_status arm_cfft_init_64_f64(arm_cfft_instance_f64 * S); 349 arm_status arm_cfft_init_32_f64(arm_cfft_instance_f64 * S); 350 arm_status arm_cfft_init_16_f64(arm_cfft_instance_f64 * S); 351 352 arm_status arm_cfft_init_f64( 353 arm_cfft_instance_f64 * S, 354 uint16_t fftLen); 355 356 void arm_cfft_f64( 357 const arm_cfft_instance_f64 * S, 358 float64_t * p1, 359 uint8_t ifftFlag, 360 uint8_t bitReverseFlag); 361 362 /** 363 * @brief Instance structure for the Q15 RFFT/RIFFT function. 364 */ 365 typedef struct 366 { 367 uint32_t fftLenReal; /**< length of the real FFT. */ 368 uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ 369 uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ 370 uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ 371 const q15_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ 372 const q15_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ 373 #if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) 374 arm_cfft_instance_q15 cfftInst; 375 #else 376 const arm_cfft_instance_q15 *pCfft; /**< points to the complex FFT instance. */ 377 #endif 378 } arm_rfft_instance_q15; 379 380 arm_status arm_rfft_init_32_q15( 381 arm_rfft_instance_q15 * S, 382 uint32_t ifftFlagR, 383 uint32_t bitReverseFlag); 384 385 arm_status arm_rfft_init_64_q15( 386 arm_rfft_instance_q15 * S, 387 uint32_t ifftFlagR, 388 uint32_t bitReverseFlag); 389 390 arm_status arm_rfft_init_128_q15( 391 arm_rfft_instance_q15 * S, 392 uint32_t ifftFlagR, 393 uint32_t bitReverseFlag); 394 395 arm_status arm_rfft_init_256_q15( 396 arm_rfft_instance_q15 * S, 397 uint32_t ifftFlagR, 398 uint32_t bitReverseFlag); 399 400 arm_status arm_rfft_init_512_q15( 401 arm_rfft_instance_q15 * S, 402 uint32_t ifftFlagR, 403 uint32_t bitReverseFlag); 404 405 arm_status arm_rfft_init_1024_q15( 406 arm_rfft_instance_q15 * S, 407 uint32_t ifftFlagR, 408 uint32_t bitReverseFlag); 409 410 arm_status arm_rfft_init_2048_q15( 411 arm_rfft_instance_q15 * S, 412 uint32_t ifftFlagR, 413 uint32_t bitReverseFlag); 414 415 arm_status arm_rfft_init_4096_q15( 416 arm_rfft_instance_q15 * S, 417 uint32_t ifftFlagR, 418 uint32_t bitReverseFlag); 419 420 arm_status arm_rfft_init_8192_q15( 421 arm_rfft_instance_q15 * S, 422 uint32_t ifftFlagR, 423 uint32_t bitReverseFlag); 424 425 arm_status arm_rfft_init_q15( 426 arm_rfft_instance_q15 * S, 427 uint32_t fftLenReal, 428 uint32_t ifftFlagR, 429 uint32_t bitReverseFlag); 430 431 void arm_rfft_q15( 432 const arm_rfft_instance_q15 * S, 433 q15_t * pSrc, 434 q15_t * pDst); 435 436 /** 437 * @brief Instance structure for the Q31 RFFT/RIFFT function. 438 */ 439 typedef struct 440 { 441 uint32_t fftLenReal; /**< length of the real FFT. */ 442 uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ 443 uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ 444 uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ 445 const q31_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ 446 const q31_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ 447 #if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) 448 arm_cfft_instance_q31 cfftInst; 449 #else 450 const arm_cfft_instance_q31 *pCfft; /**< points to the complex FFT instance. */ 451 #endif 452 } arm_rfft_instance_q31; 453 454 arm_status arm_rfft_init_32_q31( 455 arm_rfft_instance_q31 * S, 456 uint32_t ifftFlagR, 457 uint32_t bitReverseFlag); 458 459 arm_status arm_rfft_init_64_q31( 460 arm_rfft_instance_q31 * S, 461 uint32_t ifftFlagR, 462 uint32_t bitReverseFlag); 463 464 arm_status arm_rfft_init_128_q31( 465 arm_rfft_instance_q31 * S, 466 uint32_t ifftFlagR, 467 uint32_t bitReverseFlag); 468 469 arm_status arm_rfft_init_256_q31( 470 arm_rfft_instance_q31 * S, 471 uint32_t ifftFlagR, 472 uint32_t bitReverseFlag); 473 474 arm_status arm_rfft_init_512_q31( 475 arm_rfft_instance_q31 * S, 476 uint32_t ifftFlagR, 477 uint32_t bitReverseFlag); 478 479 arm_status arm_rfft_init_1024_q31( 480 arm_rfft_instance_q31 * S, 481 uint32_t ifftFlagR, 482 uint32_t bitReverseFlag); 483 484 arm_status arm_rfft_init_2048_q31( 485 arm_rfft_instance_q31 * S, 486 uint32_t ifftFlagR, 487 uint32_t bitReverseFlag); 488 489 arm_status arm_rfft_init_4096_q31( 490 arm_rfft_instance_q31 * S, 491 uint32_t ifftFlagR, 492 uint32_t bitReverseFlag); 493 494 arm_status arm_rfft_init_8192_q31( 495 arm_rfft_instance_q31 * S, 496 uint32_t ifftFlagR, 497 uint32_t bitReverseFlag); 498 499 arm_status arm_rfft_init_q31( 500 arm_rfft_instance_q31 * S, 501 uint32_t fftLenReal, 502 uint32_t ifftFlagR, 503 uint32_t bitReverseFlag); 504 505 void arm_rfft_q31( 506 const arm_rfft_instance_q31 * S, 507 q31_t * pSrc, 508 q31_t * pDst); 509 510 /** 511 * @brief Instance structure for the floating-point RFFT/RIFFT function. 512 */ 513 typedef struct 514 { 515 uint32_t fftLenReal; /**< length of the real FFT. */ 516 uint16_t fftLenBy2; /**< length of the complex FFT. */ 517 uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ 518 uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ 519 uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ 520 const float32_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ 521 const float32_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ 522 arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */ 523 } arm_rfft_instance_f32; 524 525 arm_status arm_rfft_init_f32( 526 arm_rfft_instance_f32 * S, 527 arm_cfft_radix4_instance_f32 * S_CFFT, 528 uint32_t fftLenReal, 529 uint32_t ifftFlagR, 530 uint32_t bitReverseFlag); 531 532 void arm_rfft_f32( 533 const arm_rfft_instance_f32 * S, 534 float32_t * pSrc, 535 float32_t * pDst); 536 537 /** 538 * @brief Instance structure for the Double Precision Floating-point RFFT/RIFFT function. 539 */ 540 typedef struct 541 { 542 arm_cfft_instance_f64 Sint; /**< Internal CFFT structure. */ 543 uint16_t fftLenRFFT; /**< length of the real sequence */ 544 const float64_t * pTwiddleRFFT; /**< Twiddle factors real stage */ 545 } arm_rfft_fast_instance_f64 ; 546 547 arm_status arm_rfft_fast_init_32_f64( arm_rfft_fast_instance_f64 * S ); 548 arm_status arm_rfft_fast_init_64_f64( arm_rfft_fast_instance_f64 * S ); 549 arm_status arm_rfft_fast_init_128_f64( arm_rfft_fast_instance_f64 * S ); 550 arm_status arm_rfft_fast_init_256_f64( arm_rfft_fast_instance_f64 * S ); 551 arm_status arm_rfft_fast_init_512_f64( arm_rfft_fast_instance_f64 * S ); 552 arm_status arm_rfft_fast_init_1024_f64( arm_rfft_fast_instance_f64 * S ); 553 arm_status arm_rfft_fast_init_2048_f64( arm_rfft_fast_instance_f64 * S ); 554 arm_status arm_rfft_fast_init_4096_f64( arm_rfft_fast_instance_f64 * S ); 555 556 arm_status arm_rfft_fast_init_f64 ( 557 arm_rfft_fast_instance_f64 * S, 558 uint16_t fftLen); 559 560 561 void arm_rfft_fast_f64( 562 arm_rfft_fast_instance_f64 * S, 563 float64_t * p, float64_t * pOut, 564 uint8_t ifftFlag); 565 566 567 /** 568 * @brief Instance structure for the floating-point RFFT/RIFFT function. 569 */ 570 typedef struct 571 { 572 arm_cfft_instance_f32 Sint; /**< Internal CFFT structure. */ 573 uint16_t fftLenRFFT; /**< length of the real sequence */ 574 const float32_t * pTwiddleRFFT; /**< Twiddle factors real stage */ 575 } arm_rfft_fast_instance_f32 ; 576 577 arm_status arm_rfft_fast_init_32_f32( arm_rfft_fast_instance_f32 * S ); 578 arm_status arm_rfft_fast_init_64_f32( arm_rfft_fast_instance_f32 * S ); 579 arm_status arm_rfft_fast_init_128_f32( arm_rfft_fast_instance_f32 * S ); 580 arm_status arm_rfft_fast_init_256_f32( arm_rfft_fast_instance_f32 * S ); 581 arm_status arm_rfft_fast_init_512_f32( arm_rfft_fast_instance_f32 * S ); 582 arm_status arm_rfft_fast_init_1024_f32( arm_rfft_fast_instance_f32 * S ); 583 arm_status arm_rfft_fast_init_2048_f32( arm_rfft_fast_instance_f32 * S ); 584 arm_status arm_rfft_fast_init_4096_f32( arm_rfft_fast_instance_f32 * S ); 585 586 arm_status arm_rfft_fast_init_f32 ( 587 arm_rfft_fast_instance_f32 * S, 588 uint16_t fftLen); 589 590 591 void arm_rfft_fast_f32( 592 const arm_rfft_fast_instance_f32 * S, 593 float32_t * p, float32_t * pOut, 594 uint8_t ifftFlag); 595 596 /** 597 * @brief Instance structure for the floating-point DCT4/IDCT4 function. 598 */ 599 typedef struct 600 { 601 uint16_t N; /**< length of the DCT4. */ 602 uint16_t Nby2; /**< half of the length of the DCT4. */ 603 float32_t normalize; /**< normalizing factor. */ 604 const float32_t *pTwiddle; /**< points to the twiddle factor table. */ 605 const float32_t *pCosFactor; /**< points to the cosFactor table. */ 606 arm_rfft_instance_f32 *pRfft; /**< points to the real FFT instance. */ 607 arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */ 608 } arm_dct4_instance_f32; 609 610 611 /** 612 * @brief Initialization function for the floating-point DCT4/IDCT4. 613 * @param[in,out] S points to an instance of floating-point DCT4/IDCT4 structure. 614 * @param[in] S_RFFT points to an instance of floating-point RFFT/RIFFT structure. 615 * @param[in] S_CFFT points to an instance of floating-point CFFT/CIFFT structure. 616 * @param[in] N length of the DCT4. 617 * @param[in] Nby2 half of the length of the DCT4. 618 * @param[in] normalize normalizing factor. 619 * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>fftLenReal</code> is not a supported transform length. 620 */ 621 arm_status arm_dct4_init_f32( 622 arm_dct4_instance_f32 * S, 623 arm_rfft_instance_f32 * S_RFFT, 624 arm_cfft_radix4_instance_f32 * S_CFFT, 625 uint16_t N, 626 uint16_t Nby2, 627 float32_t normalize); 628 629 630 /** 631 * @brief Processing function for the floating-point DCT4/IDCT4. 632 * @param[in] S points to an instance of the floating-point DCT4/IDCT4 structure. 633 * @param[in] pState points to state buffer. 634 * @param[in,out] pInlineBuffer points to the in-place input and output buffer. 635 */ 636 void arm_dct4_f32( 637 const arm_dct4_instance_f32 * S, 638 float32_t * pState, 639 float32_t * pInlineBuffer); 640 641 642 /** 643 * @brief Instance structure for the Q31 DCT4/IDCT4 function. 644 */ 645 typedef struct 646 { 647 uint16_t N; /**< length of the DCT4. */ 648 uint16_t Nby2; /**< half of the length of the DCT4. */ 649 q31_t normalize; /**< normalizing factor. */ 650 const q31_t *pTwiddle; /**< points to the twiddle factor table. */ 651 const q31_t *pCosFactor; /**< points to the cosFactor table. */ 652 arm_rfft_instance_q31 *pRfft; /**< points to the real FFT instance. */ 653 arm_cfft_radix4_instance_q31 *pCfft; /**< points to the complex FFT instance. */ 654 } arm_dct4_instance_q31; 655 656 657 /** 658 * @brief Initialization function for the Q31 DCT4/IDCT4. 659 * @param[in,out] S points to an instance of Q31 DCT4/IDCT4 structure. 660 * @param[in] S_RFFT points to an instance of Q31 RFFT/RIFFT structure 661 * @param[in] S_CFFT points to an instance of Q31 CFFT/CIFFT structure 662 * @param[in] N length of the DCT4. 663 * @param[in] Nby2 half of the length of the DCT4. 664 * @param[in] normalize normalizing factor. 665 * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>N</code> is not a supported transform length. 666 */ 667 arm_status arm_dct4_init_q31( 668 arm_dct4_instance_q31 * S, 669 arm_rfft_instance_q31 * S_RFFT, 670 arm_cfft_radix4_instance_q31 * S_CFFT, 671 uint16_t N, 672 uint16_t Nby2, 673 q31_t normalize); 674 675 676 /** 677 * @brief Processing function for the Q31 DCT4/IDCT4. 678 * @param[in] S points to an instance of the Q31 DCT4 structure. 679 * @param[in] pState points to state buffer. 680 * @param[in,out] pInlineBuffer points to the in-place input and output buffer. 681 */ 682 void arm_dct4_q31( 683 const arm_dct4_instance_q31 * S, 684 q31_t * pState, 685 q31_t * pInlineBuffer); 686 687 688 /** 689 * @brief Instance structure for the Q15 DCT4/IDCT4 function. 690 */ 691 typedef struct 692 { 693 uint16_t N; /**< length of the DCT4. */ 694 uint16_t Nby2; /**< half of the length of the DCT4. */ 695 q15_t normalize; /**< normalizing factor. */ 696 const q15_t *pTwiddle; /**< points to the twiddle factor table. */ 697 const q15_t *pCosFactor; /**< points to the cosFactor table. */ 698 arm_rfft_instance_q15 *pRfft; /**< points to the real FFT instance. */ 699 arm_cfft_radix4_instance_q15 *pCfft; /**< points to the complex FFT instance. */ 700 } arm_dct4_instance_q15; 701 702 703 /** 704 * @brief Initialization function for the Q15 DCT4/IDCT4. 705 * @param[in,out] S points to an instance of Q15 DCT4/IDCT4 structure. 706 * @param[in] S_RFFT points to an instance of Q15 RFFT/RIFFT structure. 707 * @param[in] S_CFFT points to an instance of Q15 CFFT/CIFFT structure. 708 * @param[in] N length of the DCT4. 709 * @param[in] Nby2 half of the length of the DCT4. 710 * @param[in] normalize normalizing factor. 711 * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>N</code> is not a supported transform length. 712 */ 713 arm_status arm_dct4_init_q15( 714 arm_dct4_instance_q15 * S, 715 arm_rfft_instance_q15 * S_RFFT, 716 arm_cfft_radix4_instance_q15 * S_CFFT, 717 uint16_t N, 718 uint16_t Nby2, 719 q15_t normalize); 720 721 722 /** 723 * @brief Processing function for the Q15 DCT4/IDCT4. 724 * @param[in] S points to an instance of the Q15 DCT4 structure. 725 * @param[in] pState points to state buffer. 726 * @param[in,out] pInlineBuffer points to the in-place input and output buffer. 727 */ 728 void arm_dct4_q15( 729 const arm_dct4_instance_q15 * S, 730 q15_t * pState, 731 q15_t * pInlineBuffer); 732 733 /** 734 * @brief Instance structure for the Floating-point MFCC function. 735 */ 736 typedef struct 737 { 738 const float32_t *dctCoefs; /**< Internal DCT coefficients */ 739 const float32_t *filterCoefs; /**< Internal Mel filter coefficients */ 740 const float32_t *windowCoefs; /**< Windowing coefficients */ 741 const uint32_t *filterPos; /**< Internal Mel filter positions in spectrum */ 742 const uint32_t *filterLengths; /**< Internal Mel filter lengths */ 743 uint32_t fftLen; /**< FFT length */ 744 uint32_t nbMelFilters; /**< Number of Mel filters */ 745 uint32_t nbDctOutputs; /**< Number of DCT outputs */ 746 #if defined(ARM_MFCC_CFFT_BASED) 747 /* Implementation of the MFCC is using a CFFT */ 748 arm_cfft_instance_f32 cfft; /**< Internal CFFT instance */ 749 #else 750 /* Implementation of the MFCC is using a RFFT (default) */ 751 arm_rfft_fast_instance_f32 rfft; 752 #endif 753 } arm_mfcc_instance_f32 ; 754 755 arm_status arm_mfcc_init_32_f32( 756 arm_mfcc_instance_f32 * S, 757 uint32_t nbMelFilters, 758 uint32_t nbDctOutputs, 759 const float32_t *dctCoefs, 760 const uint32_t *filterPos, 761 const uint32_t *filterLengths, 762 const float32_t *filterCoefs, 763 const float32_t *windowCoefs 764 ); 765 766 arm_status arm_mfcc_init_64_f32( 767 arm_mfcc_instance_f32 * S, 768 uint32_t nbMelFilters, 769 uint32_t nbDctOutputs, 770 const float32_t *dctCoefs, 771 const uint32_t *filterPos, 772 const uint32_t *filterLengths, 773 const float32_t *filterCoefs, 774 const float32_t *windowCoefs 775 ); 776 777 arm_status arm_mfcc_init_128_f32( 778 arm_mfcc_instance_f32 * S, 779 uint32_t nbMelFilters, 780 uint32_t nbDctOutputs, 781 const float32_t *dctCoefs, 782 const uint32_t *filterPos, 783 const uint32_t *filterLengths, 784 const float32_t *filterCoefs, 785 const float32_t *windowCoefs 786 ); 787 788 arm_status arm_mfcc_init_256_f32( 789 arm_mfcc_instance_f32 * S, 790 uint32_t nbMelFilters, 791 uint32_t nbDctOutputs, 792 const float32_t *dctCoefs, 793 const uint32_t *filterPos, 794 const uint32_t *filterLengths, 795 const float32_t *filterCoefs, 796 const float32_t *windowCoefs 797 ); 798 799 arm_status arm_mfcc_init_512_f32( 800 arm_mfcc_instance_f32 * S, 801 uint32_t nbMelFilters, 802 uint32_t nbDctOutputs, 803 const float32_t *dctCoefs, 804 const uint32_t *filterPos, 805 const uint32_t *filterLengths, 806 const float32_t *filterCoefs, 807 const float32_t *windowCoefs 808 ); 809 810 arm_status arm_mfcc_init_1024_f32( 811 arm_mfcc_instance_f32 * S, 812 uint32_t nbMelFilters, 813 uint32_t nbDctOutputs, 814 const float32_t *dctCoefs, 815 const uint32_t *filterPos, 816 const uint32_t *filterLengths, 817 const float32_t *filterCoefs, 818 const float32_t *windowCoefs 819 ); 820 821 arm_status arm_mfcc_init_2048_f32( 822 arm_mfcc_instance_f32 * S, 823 uint32_t nbMelFilters, 824 uint32_t nbDctOutputs, 825 const float32_t *dctCoefs, 826 const uint32_t *filterPos, 827 const uint32_t *filterLengths, 828 const float32_t *filterCoefs, 829 const float32_t *windowCoefs 830 ); 831 832 arm_status arm_mfcc_init_4096_f32( 833 arm_mfcc_instance_f32 * S, 834 uint32_t nbMelFilters, 835 uint32_t nbDctOutputs, 836 const float32_t *dctCoefs, 837 const uint32_t *filterPos, 838 const uint32_t *filterLengths, 839 const float32_t *filterCoefs, 840 const float32_t *windowCoefs 841 ); 842 843 arm_status arm_mfcc_init_f32( 844 arm_mfcc_instance_f32 * S, 845 uint32_t fftLen, 846 uint32_t nbMelFilters, 847 uint32_t nbDctOutputs, 848 const float32_t *dctCoefs, 849 const uint32_t *filterPos, 850 const uint32_t *filterLengths, 851 const float32_t *filterCoefs, 852 const float32_t *windowCoefs 853 ); 854 855 856 /** 857 @brief MFCC F32 858 @param[in] S points to the mfcc instance structure 859 @param[in] pSrc points to the input samples 860 @param[out] pDst points to the output MFCC values 861 @param[inout] pTmp points to a temporary buffer of complex 862 */ 863 void arm_mfcc_f32( 864 const arm_mfcc_instance_f32 * S, 865 float32_t *pSrc, 866 float32_t *pDst, 867 float32_t *pTmp 868 ); 869 870 /** 871 * @brief Instance structure for the Q31 MFCC function. 872 */ 873 typedef struct 874 { 875 const q31_t *dctCoefs; /**< Internal DCT coefficients */ 876 const q31_t *filterCoefs; /**< Internal Mel filter coefficients */ 877 const q31_t *windowCoefs; /**< Windowing coefficients */ 878 const uint32_t *filterPos; /**< Internal Mel filter positions in spectrum */ 879 const uint32_t *filterLengths; /**< Internal Mel filter lengths */ 880 uint32_t fftLen; /**< FFT length */ 881 uint32_t nbMelFilters; /**< Number of Mel filters */ 882 uint32_t nbDctOutputs; /**< Number of DCT outputs */ 883 #if defined(ARM_MFCC_CFFT_BASED) 884 /* Implementation of the MFCC is using a CFFT */ 885 arm_cfft_instance_q31 cfft; /**< Internal CFFT instance */ 886 #else 887 /* Implementation of the MFCC is using a RFFT (default) */ 888 arm_rfft_instance_q31 rfft; 889 #endif 890 } arm_mfcc_instance_q31 ; 891 892 arm_status arm_mfcc_init_32_q31( 893 arm_mfcc_instance_q31 * S, 894 uint32_t nbMelFilters, 895 uint32_t nbDctOutputs, 896 const q31_t *dctCoefs, 897 const uint32_t *filterPos, 898 const uint32_t *filterLengths, 899 const q31_t *filterCoefs, 900 const q31_t *windowCoefs 901 ); 902 903 arm_status arm_mfcc_init_64_q31( 904 arm_mfcc_instance_q31 * S, 905 uint32_t nbMelFilters, 906 uint32_t nbDctOutputs, 907 const q31_t *dctCoefs, 908 const uint32_t *filterPos, 909 const uint32_t *filterLengths, 910 const q31_t *filterCoefs, 911 const q31_t *windowCoefs 912 ); 913 914 arm_status arm_mfcc_init_128_q31( 915 arm_mfcc_instance_q31 * S, 916 uint32_t nbMelFilters, 917 uint32_t nbDctOutputs, 918 const q31_t *dctCoefs, 919 const uint32_t *filterPos, 920 const uint32_t *filterLengths, 921 const q31_t *filterCoefs, 922 const q31_t *windowCoefs 923 ); 924 925 arm_status arm_mfcc_init_256_q31( 926 arm_mfcc_instance_q31 * S, 927 uint32_t nbMelFilters, 928 uint32_t nbDctOutputs, 929 const q31_t *dctCoefs, 930 const uint32_t *filterPos, 931 const uint32_t *filterLengths, 932 const q31_t *filterCoefs, 933 const q31_t *windowCoefs 934 ); 935 936 arm_status arm_mfcc_init_512_q31( 937 arm_mfcc_instance_q31 * S, 938 uint32_t nbMelFilters, 939 uint32_t nbDctOutputs, 940 const q31_t *dctCoefs, 941 const uint32_t *filterPos, 942 const uint32_t *filterLengths, 943 const q31_t *filterCoefs, 944 const q31_t *windowCoefs 945 ); 946 947 arm_status arm_mfcc_init_1024_q31( 948 arm_mfcc_instance_q31 * S, 949 uint32_t nbMelFilters, 950 uint32_t nbDctOutputs, 951 const q31_t *dctCoefs, 952 const uint32_t *filterPos, 953 const uint32_t *filterLengths, 954 const q31_t *filterCoefs, 955 const q31_t *windowCoefs 956 ); 957 958 arm_status arm_mfcc_init_2048_q31( 959 arm_mfcc_instance_q31 * S, 960 uint32_t nbMelFilters, 961 uint32_t nbDctOutputs, 962 const q31_t *dctCoefs, 963 const uint32_t *filterPos, 964 const uint32_t *filterLengths, 965 const q31_t *filterCoefs, 966 const q31_t *windowCoefs 967 ); 968 969 arm_status arm_mfcc_init_4096_q31( 970 arm_mfcc_instance_q31 * S, 971 uint32_t nbMelFilters, 972 uint32_t nbDctOutputs, 973 const q31_t *dctCoefs, 974 const uint32_t *filterPos, 975 const uint32_t *filterLengths, 976 const q31_t *filterCoefs, 977 const q31_t *windowCoefs 978 ); 979 980 arm_status arm_mfcc_init_q31( 981 arm_mfcc_instance_q31 * S, 982 uint32_t fftLen, 983 uint32_t nbMelFilters, 984 uint32_t nbDctOutputs, 985 const q31_t *dctCoefs, 986 const uint32_t *filterPos, 987 const uint32_t *filterLengths, 988 const q31_t *filterCoefs, 989 const q31_t *windowCoefs 990 ); 991 992 993 /** 994 @brief MFCC Q31 995 @param[in] S points to the mfcc instance structure 996 @param[in] pSrc points to the input samples 997 @param[out] pDst points to the output MFCC values 998 @param[inout] pTmp points to a temporary buffer of complex 999 @return error status 1000 */ 1001 arm_status arm_mfcc_q31( 1002 const arm_mfcc_instance_q31 * S, 1003 q31_t *pSrc, 1004 q31_t *pDst, 1005 q31_t *pTmp 1006 ); 1007 1008 /** 1009 * @brief Instance structure for the Q15 MFCC function. 1010 */ 1011 typedef struct 1012 { 1013 const q15_t *dctCoefs; /**< Internal DCT coefficients */ 1014 const q15_t *filterCoefs; /**< Internal Mel filter coefficients */ 1015 const q15_t *windowCoefs; /**< Windowing coefficients */ 1016 const uint32_t *filterPos; /**< Internal Mel filter positions in spectrum */ 1017 const uint32_t *filterLengths; /**< Internal Mel filter lengths */ 1018 uint32_t fftLen; /**< FFT length */ 1019 uint32_t nbMelFilters; /**< Number of Mel filters */ 1020 uint32_t nbDctOutputs; /**< Number of DCT outputs */ 1021 #if defined(ARM_MFCC_CFFT_BASED) 1022 /* Implementation of the MFCC is using a CFFT */ 1023 arm_cfft_instance_q15 cfft; /**< Internal CFFT instance */ 1024 #else 1025 /* Implementation of the MFCC is using a RFFT (default) */ 1026 arm_rfft_instance_q15 rfft; 1027 #endif 1028 } arm_mfcc_instance_q15 ; 1029 1030 arm_status arm_mfcc_init_32_q15( 1031 arm_mfcc_instance_q15 * S, 1032 uint32_t nbMelFilters, 1033 uint32_t nbDctOutputs, 1034 const q15_t *dctCoefs, 1035 const uint32_t *filterPos, 1036 const uint32_t *filterLengths, 1037 const q15_t *filterCoefs, 1038 const q15_t *windowCoefs 1039 ); 1040 1041 arm_status arm_mfcc_init_64_q15( 1042 arm_mfcc_instance_q15 * S, 1043 uint32_t nbMelFilters, 1044 uint32_t nbDctOutputs, 1045 const q15_t *dctCoefs, 1046 const uint32_t *filterPos, 1047 const uint32_t *filterLengths, 1048 const q15_t *filterCoefs, 1049 const q15_t *windowCoefs 1050 ); 1051 1052 arm_status arm_mfcc_init_128_q15( 1053 arm_mfcc_instance_q15 * S, 1054 uint32_t nbMelFilters, 1055 uint32_t nbDctOutputs, 1056 const q15_t *dctCoefs, 1057 const uint32_t *filterPos, 1058 const uint32_t *filterLengths, 1059 const q15_t *filterCoefs, 1060 const q15_t *windowCoefs 1061 ); 1062 1063 arm_status arm_mfcc_init_256_q15( 1064 arm_mfcc_instance_q15 * S, 1065 uint32_t nbMelFilters, 1066 uint32_t nbDctOutputs, 1067 const q15_t *dctCoefs, 1068 const uint32_t *filterPos, 1069 const uint32_t *filterLengths, 1070 const q15_t *filterCoefs, 1071 const q15_t *windowCoefs 1072 ); 1073 1074 arm_status arm_mfcc_init_512_q15( 1075 arm_mfcc_instance_q15 * S, 1076 uint32_t nbMelFilters, 1077 uint32_t nbDctOutputs, 1078 const q15_t *dctCoefs, 1079 const uint32_t *filterPos, 1080 const uint32_t *filterLengths, 1081 const q15_t *filterCoefs, 1082 const q15_t *windowCoefs 1083 ); 1084 1085 arm_status arm_mfcc_init_1024_q15( 1086 arm_mfcc_instance_q15 * S, 1087 uint32_t nbMelFilters, 1088 uint32_t nbDctOutputs, 1089 const q15_t *dctCoefs, 1090 const uint32_t *filterPos, 1091 const uint32_t *filterLengths, 1092 const q15_t *filterCoefs, 1093 const q15_t *windowCoefs 1094 ); 1095 1096 arm_status arm_mfcc_init_2048_q15( 1097 arm_mfcc_instance_q15 * S, 1098 uint32_t nbMelFilters, 1099 uint32_t nbDctOutputs, 1100 const q15_t *dctCoefs, 1101 const uint32_t *filterPos, 1102 const uint32_t *filterLengths, 1103 const q15_t *filterCoefs, 1104 const q15_t *windowCoefs 1105 ); 1106 1107 arm_status arm_mfcc_init_4096_q15( 1108 arm_mfcc_instance_q15 * S, 1109 uint32_t nbMelFilters, 1110 uint32_t nbDctOutputs, 1111 const q15_t *dctCoefs, 1112 const uint32_t *filterPos, 1113 const uint32_t *filterLengths, 1114 const q15_t *filterCoefs, 1115 const q15_t *windowCoefs 1116 ); 1117 1118 arm_status arm_mfcc_init_q15( 1119 arm_mfcc_instance_q15 * S, 1120 uint32_t fftLen, 1121 uint32_t nbMelFilters, 1122 uint32_t nbDctOutputs, 1123 const q15_t *dctCoefs, 1124 const uint32_t *filterPos, 1125 const uint32_t *filterLengths, 1126 const q15_t *filterCoefs, 1127 const q15_t *windowCoefs 1128 ); 1129 1130 1131 /** 1132 @brief MFCC Q15 1133 @param[in] S points to the mfcc instance structure 1134 @param[in] pSrc points to the input samples 1135 @param[out] pDst points to the output MFCC values in q8.7 format 1136 @param[inout] pTmp points to a temporary buffer of complex 1137 @return error status 1138 */ 1139 arm_status arm_mfcc_q15( 1140 const arm_mfcc_instance_q15 * S, 1141 q15_t *pSrc, 1142 q15_t *pDst, 1143 q31_t *pTmp 1144 ); 1145 1146 1147 #ifdef __cplusplus 1148 } 1149 #endif 1150 1151 #endif /* ifndef _TRANSFORM_FUNCTIONS_H_ */ 1152