00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include "arm_math.h"
00038
00177 void arm_cfft_radix4_f32(
00178 const arm_cfft_radix4_instance_f32 * S,
00179 float32_t * pSrc)
00180 {
00181
00182 if(S->ifftFlag == 1u)
00183 {
00184
00185 arm_radix4_butterfly_inverse_f32(pSrc, S->fftLen, S->pTwiddle,
00186 S->twidCoefModifier, S->onebyfftLen);
00187 }
00188 else
00189 {
00190
00191 arm_radix4_butterfly_f32(pSrc, S->fftLen, S->pTwiddle,
00192 S->twidCoefModifier);
00193 }
00194
00195 if(S->bitReverseFlag == 1u)
00196 {
00197
00198 arm_bitreversal_f32(pSrc, S->fftLen, S->bitRevFactor, S->pBitRevTable);
00199 }
00200
00201 }
00202
00203
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223 void arm_radix4_butterfly_f32(
00224 float32_t * pSrc,
00225 uint16_t fftLen,
00226 float32_t * pCoef,
00227 uint16_t twidCoefModifier)
00228 {
00229
00230 float32_t co1, co2, co3, si1, si2, si3;
00231 float32_t t1, t2, r1, r2, s1, s2;
00232 uint32_t ia1, ia2, ia3;
00233 uint32_t i0, i1, i2, i3;
00234 uint32_t n1, n2, j, k;
00235
00236 #ifndef ARM_MATH_CM0
00237
00238
00239
00240
00241 n2 = fftLen;
00242 n1 = n2;
00243
00244
00245 n2 >>= 2u;
00246 i0 = 0u;
00247 ia1 = 0u;
00248
00249 j = n2;
00250
00251
00252 do
00253 {
00254
00255
00256 i1 = i0 + n2;
00257 i2 = i1 + n2;
00258 i3 = i2 + n2;
00259
00260
00261
00262
00263 r1 = pSrc[(2u * i0)] + pSrc[(2u * i2)];
00264
00265
00266 r2 = pSrc[2u * i0] - pSrc[2u * i2];
00267
00268
00269 s1 = pSrc[(2u * i0) + 1u] + pSrc[(2u * i2) + 1u];
00270
00271
00272 s2 = pSrc[(2u * i0) + 1u] - pSrc[(2u * i2) + 1u];
00273
00274
00275 t1 = pSrc[2u * i1] + pSrc[2u * i3];
00276
00277
00278 pSrc[2u * i0] = r1 + t1;
00279
00280
00281 r1 = r1 - t1;
00282
00283
00284 t2 = pSrc[(2u * i1) + 1u] + pSrc[(2u * i3) + 1u];
00285
00286
00287 pSrc[(2u * i0) + 1u] = s1 + t2;
00288
00289
00290 s1 = s1 - t2;
00291
00292
00293 t1 = pSrc[(2u * i1) + 1u] - pSrc[(2u * i3) + 1u];
00294
00295
00296 t2 = pSrc[2u * i1] - pSrc[2u * i3];
00297
00298
00299 ia2 = ia1 + ia1;
00300 co2 = pCoef[ia2 * 2u];
00301 si2 = pCoef[(ia2 * 2u) + 1u];
00302
00303
00304 pSrc[2u * i1] = (r1 * co2) + (s1 * si2);
00305
00306
00307 pSrc[(2u * i1) + 1u] = (s1 * co2) - (r1 * si2);
00308
00309
00310 r1 = r2 + t1;
00311
00312
00313 r2 = r2 - t1;
00314
00315
00316 s1 = s2 - t2;
00317
00318
00319 s2 = s2 + t2;
00320
00321 co1 = pCoef[ia1 * 2u];
00322 si1 = pCoef[(ia1 * 2u) + 1u];
00323
00324
00325 pSrc[2u * i2] = (r1 * co1) + (s1 * si1);
00326
00327
00328 pSrc[(2u * i2) + 1u] = (s1 * co1) - (r1 * si1);
00329
00330
00331 ia3 = ia2 + ia1;
00332 co3 = pCoef[ia3 * 2u];
00333 si3 = pCoef[(ia3 * 2u) + 1u];
00334
00335
00336
00337 pSrc[2u * i3] = (r2 * co3) + (s2 * si3);
00338
00339
00340 pSrc[(2u * i3) + 1u] = (s2 * co3) - (r2 * si3);
00341
00342
00343 ia1 = ia1 + twidCoefModifier;
00344
00345
00346 i0 = i0 + 1u;
00347
00348 }
00349 while(--j);
00350
00351 twidCoefModifier <<= 2u;
00352
00353
00354 for (k = fftLen / 4; k > 4u; k >>= 2u)
00355 {
00356
00357 n1 = n2;
00358 n2 >>= 2u;
00359 ia1 = 0u;
00360
00361
00362 for (j = 0u; j <= (n2 - 1u); j++)
00363 {
00364
00365 ia2 = ia1 + ia1;
00366 ia3 = ia2 + ia1;
00367 co1 = pCoef[ia1 * 2u];
00368 si1 = pCoef[(ia1 * 2u) + 1u];
00369 co2 = pCoef[ia2 * 2u];
00370 si2 = pCoef[(ia2 * 2u) + 1u];
00371 co3 = pCoef[ia3 * 2u];
00372 si3 = pCoef[(ia3 * 2u) + 1u];
00373
00374
00375 ia1 = ia1 + twidCoefModifier;
00376
00377 for (i0 = j; i0 < fftLen; i0 += n1)
00378 {
00379
00380
00381 i1 = i0 + n2;
00382 i2 = i1 + n2;
00383 i3 = i2 + n2;
00384
00385
00386 r1 = pSrc[(2u * i0)] + pSrc[(2u * i2)];
00387
00388
00389 r2 = pSrc[(2u * i0)] - pSrc[(2u * i2)];
00390
00391
00392 s1 = pSrc[(2u * i0) + 1u] + pSrc[(2u * i2) + 1u];
00393
00394
00395 s2 = pSrc[(2u * i0) + 1u] - pSrc[(2u * i2) + 1u];
00396
00397
00398 t1 = pSrc[2u * i1] + pSrc[2u * i3];
00399
00400
00401 pSrc[2u * i0] = r1 + t1;
00402
00403
00404 r1 = r1 - t1;
00405
00406
00407 t2 = pSrc[(2u * i1) + 1u] + pSrc[(2u * i3) + 1u];
00408
00409
00410 pSrc[(2u * i0) + 1u] = s1 + t2;
00411
00412
00413 s1 = s1 - t2;
00414
00415
00416 t1 = pSrc[(2u * i1) + 1u] - pSrc[(2u * i3) + 1u];
00417
00418
00419 t2 = pSrc[2u * i1] - pSrc[2u * i3];
00420
00421
00422 pSrc[2u * i1] = (r1 * co2) + (s1 * si2);
00423
00424
00425 pSrc[(2u * i1) + 1u] = (s1 * co2) - (r1 * si2);
00426
00427
00428 r1 = r2 + t1;
00429
00430
00431 r2 = r2 - t1;
00432
00433
00434 s1 = s2 - t2;
00435
00436
00437 s2 = s2 + t2;
00438
00439
00440 pSrc[2u * i2] = (r1 * co1) + (s1 * si1);
00441
00442
00443 pSrc[(2u * i2) + 1u] = (s1 * co1) - (r1 * si1);
00444
00445
00446 pSrc[2u * i3] = (r2 * co3) + (s2 * si3);
00447
00448
00449 pSrc[(2u * i3) + 1u] = (s2 * co3) - (r2 * si3);
00450 }
00451 }
00452 twidCoefModifier <<= 2u;
00453 }
00454
00455
00456 n1 = n2;
00457 n2 >>= 2u;
00458
00459
00460 for (i0 = 0u; i0 <= (fftLen - n1); i0 += n1)
00461 {
00462
00463
00464 i1 = i0 + n2;
00465 i2 = i1 + n2;
00466 i3 = i2 + n2;
00467
00468
00469
00470
00471 r1 = pSrc[2u * i0] + pSrc[2u * i2];
00472
00473
00474 r2 = pSrc[2u * i0] - pSrc[2u * i2];
00475
00476
00477 s1 = pSrc[(2u * i0) + 1u] + pSrc[(2u * i2) + 1u];
00478
00479
00480 s2 = pSrc[(2u * i0) + 1u] - pSrc[(2u * i2) + 1u];
00481
00482
00483 t1 = pSrc[2u * i1] + pSrc[2u * i3];
00484
00485
00486 pSrc[2u * i0] = r1 + t1;
00487
00488
00489 r1 = r1 - t1;
00490
00491
00492 t2 = pSrc[(2u * i1) + 1u] + pSrc[(2u * i3) + 1u];
00493
00494
00495 pSrc[(2u * i0) + 1u] = s1 + t2;
00496
00497
00498 s1 = s1 - t2;
00499
00500
00501 t1 = pSrc[(2u * i1) + 1u] - pSrc[(2u * i3) + 1u];
00502
00503
00504 t2 = pSrc[2u * i1] - pSrc[2u * i3];
00505
00506
00507 pSrc[2u * i1] = r1;
00508
00509
00510 pSrc[(2u * i1) + 1u] = s1;
00511
00512
00513 r1 = r2 + t1;
00514
00515
00516 r2 = r2 - t1;
00517
00518
00519 s1 = s2 - t2;
00520
00521
00522 s2 = s2 + t2;
00523
00524
00525 pSrc[2u * i2] = r1;
00526
00527
00528 pSrc[(2u * i2) + 1u] = s1;
00529
00530
00531 pSrc[2u * i3] = r2;
00532
00533
00534 pSrc[(2u * i3) + 1u] = s2;
00535 }
00536
00537
00538 #else
00539
00540
00541
00542
00543 n2 = fftLen;
00544 n1 = n2;
00545 for (k = fftLen; k > 1u; k >>= 2u)
00546 {
00547
00548 n1 = n2;
00549 n2 >>= 2u;
00550 ia1 = 0u;
00551
00552
00553 for (j = 0u; j <= (n2 - 1u); j++)
00554 {
00555
00556 ia2 = ia1 + ia1;
00557 ia3 = ia2 + ia1;
00558 co1 = pCoef[ia1 * 2u];
00559 si1 = pCoef[(ia1 * 2u) + 1u];
00560 co2 = pCoef[ia2 * 2u];
00561 si2 = pCoef[(ia2 * 2u) + 1u];
00562 co3 = pCoef[ia3 * 2u];
00563 si3 = pCoef[(ia3 * 2u) + 1u];
00564
00565
00566 ia1 = ia1 + twidCoefModifier;
00567
00568 for (i0 = j; i0 < fftLen; i0 += n1)
00569 {
00570
00571
00572 i1 = i0 + n2;
00573 i2 = i1 + n2;
00574 i3 = i2 + n2;
00575
00576
00577 r1 = pSrc[(2u * i0)] + pSrc[(2u * i2)];
00578
00579
00580 r2 = pSrc[(2u * i0)] - pSrc[(2u * i2)];
00581
00582
00583 s1 = pSrc[(2u * i0) + 1u] + pSrc[(2u * i2) + 1u];
00584
00585
00586 s2 = pSrc[(2u * i0) + 1u] - pSrc[(2u * i2) + 1u];
00587
00588
00589 t1 = pSrc[2u * i1] + pSrc[2u * i3];
00590
00591
00592 pSrc[2u * i0] = r1 + t1;
00593
00594
00595 r1 = r1 - t1;
00596
00597
00598 t2 = pSrc[(2u * i1) + 1u] + pSrc[(2u * i3) + 1u];
00599
00600
00601 pSrc[(2u * i0) + 1u] = s1 + t2;
00602
00603
00604 s1 = s1 - t2;
00605
00606
00607 t1 = pSrc[(2u * i1) + 1u] - pSrc[(2u * i3) + 1u];
00608
00609
00610 t2 = pSrc[2u * i1] - pSrc[2u * i3];
00611
00612
00613 pSrc[2u * i1] = (r1 * co2) + (s1 * si2);
00614
00615
00616 pSrc[(2u * i1) + 1u] = (s1 * co2) - (r1 * si2);
00617
00618
00619 r1 = r2 + t1;
00620
00621
00622 r2 = r2 - t1;
00623
00624
00625 s1 = s2 - t2;
00626
00627
00628 s2 = s2 + t2;
00629
00630
00631 pSrc[2u * i2] = (r1 * co1) + (s1 * si1);
00632
00633
00634 pSrc[(2u * i2) + 1u] = (s1 * co1) - (r1 * si1);
00635
00636
00637 pSrc[2u * i3] = (r2 * co3) + (s2 * si3);
00638
00639
00640 pSrc[(2u * i3) + 1u] = (s2 * co3) - (r2 * si3);
00641 }
00642 }
00643 twidCoefModifier <<= 2u;
00644 }
00645
00646 #endif
00647
00648 }
00649
00650
00651
00652
00653
00654
00655
00656
00657
00658
00659
00660 void arm_radix4_butterfly_inverse_f32(
00661 float32_t * pSrc,
00662 uint16_t fftLen,
00663 float32_t * pCoef,
00664 uint16_t twidCoefModifier,
00665 float32_t onebyfftLen)
00666 {
00667 float32_t co1, co2, co3, si1, si2, si3;
00668 float32_t t1, t2, r1, r2, s1, s2;
00669 uint32_t ia1, ia2, ia3;
00670 uint32_t i0, i1, i2, i3;
00671 uint32_t n1, n2, j, k;
00672
00673 #ifndef ARM_MATH_CM0
00674
00675
00676
00677
00678 n2 = fftLen;
00679 n1 = n2;
00680
00681
00682 n2 >>= 2u;
00683 i0 = 0u;
00684 ia1 = 0u;
00685
00686 j = n2;
00687
00688
00689 do
00690 {
00691
00692
00693 i1 = i0 + n2;
00694 i2 = i1 + n2;
00695 i3 = i2 + n2;
00696
00697
00698
00699 r1 = pSrc[(2u * i0)] + pSrc[(2u * i2)];
00700
00701
00702 r2 = pSrc[2u * i0] - pSrc[2u * i2];
00703
00704
00705 s1 = pSrc[(2u * i0) + 1u] + pSrc[(2u * i2) + 1u];
00706
00707
00708 s2 = pSrc[(2u * i0) + 1u] - pSrc[(2u * i2) + 1u];
00709
00710
00711 t1 = pSrc[2u * i1] + pSrc[2u * i3];
00712
00713
00714 pSrc[2u * i0] = r1 + t1;
00715
00716
00717 r1 = r1 - t1;
00718
00719
00720 t2 = pSrc[(2u * i1) + 1u] + pSrc[(2u * i3) + 1u];
00721
00722
00723 pSrc[(2u * i0) + 1u] = s1 + t2;
00724
00725
00726 s1 = s1 - t2;
00727
00728
00729 t1 = pSrc[(2u * i1) + 1u] - pSrc[(2u * i3) + 1u];
00730
00731
00732 t2 = pSrc[2u * i1] - pSrc[2u * i3];
00733
00734
00735 ia2 = ia1 + ia1;
00736 co2 = pCoef[ia2 * 2u];
00737 si2 = pCoef[(ia2 * 2u) + 1u];
00738
00739
00740 pSrc[2u * i1] = (r1 * co2) - (s1 * si2);
00741
00742
00743 pSrc[(2u * i1) + 1u] = (s1 * co2) + (r1 * si2);
00744
00745
00746 r1 = r2 - t1;
00747
00748
00749 r2 = r2 + t1;
00750
00751
00752 s1 = s2 + t2;
00753
00754
00755 s2 = s2 - t2;
00756
00757 co1 = pCoef[ia1 * 2u];
00758 si1 = pCoef[(ia1 * 2u) + 1u];
00759
00760
00761 pSrc[2u * i2] = (r1 * co1) - (s1 * si1);
00762
00763
00764 pSrc[(2u * i2) + 1u] = (s1 * co1) + (r1 * si1);
00765
00766
00767 ia3 = ia2 + ia1;
00768 co3 = pCoef[ia3 * 2u];
00769 si3 = pCoef[(ia3 * 2u) + 1u];
00770
00771
00772 pSrc[2u * i3] = (r2 * co3) - (s2 * si3);
00773
00774
00775 pSrc[(2u * i3) + 1u] = (s2 * co3) + (r2 * si3);
00776
00777
00778 ia1 = ia1 + twidCoefModifier;
00779
00780
00781 i0 = i0 + 1u;
00782
00783 }
00784 while(--j);
00785
00786 twidCoefModifier <<= 2u;
00787
00788
00789 for (k = fftLen / 4; k > 4u; k >>= 2u)
00790 {
00791
00792 n1 = n2;
00793 n2 >>= 2u;
00794 ia1 = 0u;
00795
00796
00797 for (j = 0u; j <= (n2 - 1u); j++)
00798 {
00799
00800 ia2 = ia1 + ia1;
00801 ia3 = ia2 + ia1;
00802 co1 = pCoef[ia1 * 2u];
00803 si1 = pCoef[(ia1 * 2u) + 1u];
00804 co2 = pCoef[ia2 * 2u];
00805 si2 = pCoef[(ia2 * 2u) + 1u];
00806 co3 = pCoef[ia3 * 2u];
00807 si3 = pCoef[(ia3 * 2u) + 1u];
00808
00809
00810 ia1 = ia1 + twidCoefModifier;
00811
00812 for (i0 = j; i0 < fftLen; i0 += n1)
00813 {
00814
00815
00816 i1 = i0 + n2;
00817 i2 = i1 + n2;
00818 i3 = i2 + n2;
00819
00820
00821 r1 = pSrc[(2u * i0)] + pSrc[(2u * i2)];
00822
00823
00824 r2 = pSrc[(2u * i0)] - pSrc[(2u * i2)];
00825
00826
00827 s1 = pSrc[(2u * i0) + 1u] + pSrc[(2u * i2) + 1u];
00828
00829
00830 s2 = pSrc[(2u * i0) + 1u] - pSrc[(2u * i2) + 1u];
00831
00832
00833 t1 = pSrc[2u * i1] + pSrc[2u * i3];
00834
00835
00836 pSrc[2u * i0] = r1 + t1;
00837
00838
00839 r1 = r1 - t1;
00840
00841
00842 t2 = pSrc[(2u * i1) + 1u] + pSrc[(2u * i3) + 1u];
00843
00844
00845 pSrc[(2u * i0) + 1u] = s1 + t2;
00846
00847
00848 s1 = s1 - t2;
00849
00850
00851 t1 = pSrc[(2u * i1) + 1u] - pSrc[(2u * i3) + 1u];
00852
00853
00854 t2 = pSrc[2u * i1] - pSrc[2u * i3];
00855
00856
00857 pSrc[2u * i1] = (r1 * co2) - (s1 * si2);
00858
00859
00860 pSrc[(2u * i1) + 1u] = (s1 * co2) + (r1 * si2);
00861
00862
00863 r1 = r2 - t1;
00864
00865
00866 r2 = r2 + t1;
00867
00868
00869 s1 = s2 + t2;
00870
00871
00872 s2 = s2 - t2;
00873
00874
00875 pSrc[2u * i2] = (r1 * co1) - (s1 * si1);
00876
00877
00878 pSrc[(2u * i2) + 1u] = (s1 * co1) + (r1 * si1);
00879
00880
00881 pSrc[2u * i3] = (r2 * co3) - (s2 * si3);
00882
00883
00884 pSrc[(2u * i3) + 1u] = (s2 * co3) + (r2 * si3);
00885 }
00886 }
00887 twidCoefModifier <<= 2u;
00888 }
00889
00890
00891 n1 = n2;
00892 n2 >>= 2u;
00893
00894
00895 for (i0 = 0u; i0 <= (fftLen - n1); i0 += n1)
00896 {
00897
00898
00899 i1 = i0 + n2;
00900 i2 = i1 + n2;
00901 i3 = i2 + n2;
00902
00903
00904
00905 r1 = pSrc[2u * i0] + pSrc[2u * i2];
00906
00907
00908 r2 = pSrc[2u * i0] - pSrc[2u * i2];
00909
00910
00911 s1 = pSrc[(2u * i0) + 1u] + pSrc[(2u * i2) + 1u];
00912
00913
00914 s2 = pSrc[(2u * i0) + 1u] - pSrc[(2u * i2) + 1u];
00915
00916
00917 t1 = pSrc[2u * i1] + pSrc[2u * i3];
00918
00919
00920 pSrc[2u * i0] = (r1 + t1) * onebyfftLen;
00921
00922
00923 r1 = r1 - t1;
00924
00925
00926 t2 = pSrc[(2u * i1) + 1u] + pSrc[(2u * i3) + 1u];
00927
00928
00929 pSrc[(2u * i0) + 1u] = (s1 + t2) * onebyfftLen;
00930
00931
00932 s1 = s1 - t2;
00933
00934
00935 t1 = pSrc[(2u * i1) + 1u] - pSrc[(2u * i3) + 1u];
00936
00937
00938 t2 = pSrc[2u * i1] - pSrc[2u * i3];
00939
00940
00941 pSrc[2u * i1] = r1 * onebyfftLen;
00942
00943
00944 pSrc[(2u * i1) + 1u] = s1 * onebyfftLen;
00945
00946
00947
00948 r1 = r2 - t1;
00949
00950
00951 r2 = r2 + t1;
00952
00953
00954 s1 = s2 + t2;
00955
00956
00957 s2 = s2 - t2;
00958
00959
00960 pSrc[2u * i2] = r1 * onebyfftLen;
00961
00962
00963 pSrc[(2u * i2) + 1u] = s1 * onebyfftLen;
00964
00965
00966 pSrc[2u * i3] = r2 * onebyfftLen;
00967
00968
00969 pSrc[(2u * i3) + 1u] = s2 * onebyfftLen;
00970 }
00971
00972
00973 #else
00974
00975
00976
00977
00978 n2 = fftLen;
00979 n1 = n2;
00980
00981
00982 for (k = fftLen; k > 4u; k >>= 2u)
00983 {
00984
00985 n1 = n2;
00986 n2 >>= 2u;
00987 ia1 = 0u;
00988
00989
00990 for (j = 0u; j <= (n2 - 1u); j++)
00991 {
00992
00993 ia2 = ia1 + ia1;
00994 ia3 = ia2 + ia1;
00995 co1 = pCoef[ia1 * 2u];
00996 si1 = pCoef[(ia1 * 2u) + 1u];
00997 co2 = pCoef[ia2 * 2u];
00998 si2 = pCoef[(ia2 * 2u) + 1u];
00999 co3 = pCoef[ia3 * 2u];
01000 si3 = pCoef[(ia3 * 2u) + 1u];
01001
01002
01003 ia1 = ia1 + twidCoefModifier;
01004
01005 for (i0 = j; i0 < fftLen; i0 += n1)
01006 {
01007
01008
01009 i1 = i0 + n2;
01010 i2 = i1 + n2;
01011 i3 = i2 + n2;
01012
01013
01014 r1 = pSrc[(2u * i0)] + pSrc[(2u * i2)];
01015
01016
01017 r2 = pSrc[(2u * i0)] - pSrc[(2u * i2)];
01018
01019
01020 s1 = pSrc[(2u * i0) + 1u] + pSrc[(2u * i2) + 1u];
01021
01022
01023 s2 = pSrc[(2u * i0) + 1u] - pSrc[(2u * i2) + 1u];
01024
01025
01026 t1 = pSrc[2u * i1] + pSrc[2u * i3];
01027
01028
01029 pSrc[2u * i0] = r1 + t1;
01030
01031
01032 r1 = r1 - t1;
01033
01034
01035 t2 = pSrc[(2u * i1) + 1u] + pSrc[(2u * i3) + 1u];
01036
01037
01038 pSrc[(2u * i0) + 1u] = s1 + t2;
01039
01040
01041 s1 = s1 - t2;
01042
01043
01044 t1 = pSrc[(2u * i1) + 1u] - pSrc[(2u * i3) + 1u];
01045
01046
01047 t2 = pSrc[2u * i1] - pSrc[2u * i3];
01048
01049
01050 pSrc[2u * i1] = (r1 * co2) - (s1 * si2);
01051
01052
01053 pSrc[(2u * i1) + 1u] = (s1 * co2) + (r1 * si2);
01054
01055
01056 r1 = r2 - t1;
01057
01058
01059 r2 = r2 + t1;
01060
01061
01062 s1 = s2 + t2;
01063
01064
01065 s2 = s2 - t2;
01066
01067
01068 pSrc[2u * i2] = (r1 * co1) - (s1 * si1);
01069
01070
01071 pSrc[(2u * i2) + 1u] = (s1 * co1) + (r1 * si1);
01072
01073
01074 pSrc[2u * i3] = (r2 * co3) - (s2 * si3);
01075
01076
01077 pSrc[(2u * i3) + 1u] = (s2 * co3) + (r2 * si3);
01078 }
01079 }
01080 twidCoefModifier <<= 2u;
01081 }
01082
01083 n1 = n2;
01084 n2 >>= 2u;
01085
01086
01087 for (i0 = 0u; i0 <= (fftLen - n1); i0 += n1)
01088 {
01089
01090
01091 i1 = i0 + n2;
01092 i2 = i1 + n2;
01093 i3 = i2 + n2;
01094
01095
01096
01097 r1 = pSrc[2u * i0] + pSrc[2u * i2];
01098
01099
01100 r2 = pSrc[2u * i0] - pSrc[2u * i2];
01101
01102
01103 s1 = pSrc[(2u * i0) + 1u] + pSrc[(2u * i2) + 1u];
01104
01105
01106 s2 = pSrc[(2u * i0) + 1u] - pSrc[(2u * i2) + 1u];
01107
01108
01109 t1 = pSrc[2u * i1] + pSrc[2u * i3];
01110
01111
01112 pSrc[2u * i0] = (r1 + t1) * onebyfftLen;
01113
01114
01115 r1 = r1 - t1;
01116
01117
01118 t2 = pSrc[(2u * i1) + 1u] + pSrc[(2u * i3) + 1u];
01119
01120
01121 pSrc[(2u * i0) + 1u] = (s1 + t2) * onebyfftLen;
01122
01123
01124 s1 = s1 - t2;
01125
01126
01127 t1 = pSrc[(2u * i1) + 1u] - pSrc[(2u * i3) + 1u];
01128
01129
01130 t2 = pSrc[2u * i1] - pSrc[2u * i3];
01131
01132
01133 pSrc[2u * i1] = r1 * onebyfftLen;
01134
01135
01136 pSrc[(2u * i1) + 1u] = s1 * onebyfftLen;
01137
01138
01139
01140 r1 = r2 - t1;
01141
01142
01143 r2 = r2 + t1;
01144
01145
01146 s1 = s2 + t2;
01147
01148
01149 s2 = s2 - t2;
01150
01151
01152 pSrc[2u * i2] = r1 * onebyfftLen;
01153
01154
01155 pSrc[(2u * i2) + 1u] = s1 * onebyfftLen;
01156
01157
01158 pSrc[2u * i3] = r2 * onebyfftLen;
01159
01160
01161 pSrc[(2u * i3) + 1u] = s2 * onebyfftLen;
01162 }
01163
01164 #endif
01165
01166 }
01167
01168
01169
01170
01171
01172
01173
01174
01175
01176
01177 void arm_bitreversal_f32(
01178 float32_t * pSrc,
01179 uint16_t fftSize,
01180 uint16_t bitRevFactor,
01181 uint16_t * pBitRevTab)
01182 {
01183 uint16_t fftLenBy2, fftLenBy2p1;
01184 uint16_t i, j;
01185 float32_t in;
01186
01187
01188 j = 0u;
01189 fftLenBy2 = fftSize >> 1u;
01190 fftLenBy2p1 = (fftSize >> 1u) + 1u;
01191
01192
01193 for (i = 0u; i <= (fftLenBy2 - 2u); i += 2u)
01194 {
01195 if(i < j)
01196 {
01197
01198 in = pSrc[2u * i];
01199 pSrc[2u * i] = pSrc[2u * j];
01200 pSrc[2u * j] = in;
01201
01202
01203 in = pSrc[(2u * i) + 1u];
01204 pSrc[(2u * i) + 1u] = pSrc[(2u * j) + 1u];
01205 pSrc[(2u * j) + 1u] = in;
01206
01207
01208 in = pSrc[2u * (i + fftLenBy2p1)];
01209 pSrc[2u * (i + fftLenBy2p1)] = pSrc[2u * (j + fftLenBy2p1)];
01210 pSrc[2u * (j + fftLenBy2p1)] = in;
01211
01212
01213 in = pSrc[(2u * (i + fftLenBy2p1)) + 1u];
01214 pSrc[(2u * (i + fftLenBy2p1)) + 1u] =
01215 pSrc[(2u * (j + fftLenBy2p1)) + 1u];
01216 pSrc[(2u * (j + fftLenBy2p1)) + 1u] = in;
01217
01218 }
01219
01220
01221 in = pSrc[2u * (i + 1u)];
01222 pSrc[2u * (i + 1u)] = pSrc[2u * (j + fftLenBy2)];
01223 pSrc[2u * (j + fftLenBy2)] = in;
01224
01225
01226 in = pSrc[(2u * (i + 1u)) + 1u];
01227 pSrc[(2u * (i + 1u)) + 1u] = pSrc[(2u * (j + fftLenBy2)) + 1u];
01228 pSrc[(2u * (j + fftLenBy2)) + 1u] = in;
01229
01230
01231 j = *pBitRevTab;
01232
01233
01234 pBitRevTab += bitRevFactor;
01235 }
01236 }