This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TM4C123GH6PM:TM4C123GH6PM 上的 FIX_FFT

Guru**** 1791630 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/570156/compiler-tm4c123gh6pm-fix_fft-on-tm4c123gh6pm

器件型号:TM4C123GH6PM

工具/软件:TI C/C++编译器

我正在尝试在 Tiva Launchpad 上实施 fix_FFT 算法,最具体的是 Tom Roberts 提供的 fix_FFTR,但我无法获得正确的输出... 请参阅下面的代码

#include //
#include 
#include //
#include 
include "inc/hw_memmap.h"//
#include "driverlib/debug.h"
#include "driverlib/pin_map.h"/#include
"driverlib/rom.h"
#include "driverlib/sysctl.h"/#include
"driverlib/pin_map.h"
#include "driverlib/trlm/#driverlib/#include "包含"driverh/#driverc/#driverlib/#包含"mc/#driver.h/#driverlib/#driverlib/#driverlib/#包含"drivers/#driver.h/#driverc/#driverlib/#包含"driverlib/#drivers/#driverlib/#driver.h"






寄存器定义////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define GPIO_PORTF_DATA_R (*(volatile unsigned long *) 0x400253FC)
#define GPIO_PORTF_DIR_R (*(volatile unsigned long *) 0x40025400)
#define GPIO_PORTF_AFSEL_R (*(volatile unsigned long *) 0x40025420)
#define GPIO_PORTF_PUR_R (*(volatile unsigned long *) 0x40025510)
#define GPIO_PORTF_DEN_R (*(volatile unsigned long *) 0x4002551C)
#define GPIO_PORTF_LOCK_R (*(volatile unsigned long *) 0x40025520)
#define GPIO_PORTF_CR_R (*(volatile unsigned long *) 0x40025524)
#define GPIO_PORTF_AMSEL_R (*(volatile unsigned long *) 0x40025528)
#define GPIO_PORTF_PCTL_R (*(volatile unsigned long *) 0x4002552C)
#define SYSCTL_RCGC2_R (*(volatile unsigned long *) 0x400FE108)
#define GPIO_PORTF_PDR_R (*(volatile unsigned long *) 0x40025514)////////////////////////////

#define GPIO_PORta_AMSEL_R (*(volatile unsigned long *) 0x40004528)
#define GPIO_Porta_PCTL_R (*(volatile unsigned long *) 0x4000452C)
#define GPIO_PORta_DIR_R (*(volatile unsigned long *) 0x40004400)
#define GPIO_PORta_AFSEL_R (*(volatile unsigned long *) 0x40004420)
)#define GPIO_Porta_DEN_R (*(volatile unsigned long *) 0x4000451C))




)//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////

#define true 1
#define false 0

#define GPIO_PORTF_LOCK_R (*(volatile unsigned long *) 0x40025520)
)/*

void PWM_RGB_Init (void);
void ADC0_Init (void);
void UnlockPortF (void);
unsigned int ADC_CH0_Sample (void);
//enum color{red、blue、green};
unsigned int Green_ColorTempConvert (unsigned int ADCValue);
unsigned int Blue_ColorTempConvert (unsigned int ADCValue);

unsigned int OnTimes (unsigned int* reedAddress、unsigned int* blueAddress、unsigned int* GreenAddress);unsigned int Pushbutton_Init
(unsigned int ADC281);void processOnTimes (unsigned int、unsigned InT


、9990、9090、5980、5980、9090、5980、9090、5a、9090、9090、5a、5a、5a、9082、5a、5101、9090、9090、5a、9090、5a、5a、9090、9090、580、9090、580、9080、9090、9090、580、9090、5a、9080、9090、9090、5a、580、9090、9090、580、580、9090、9090、580、9090、580、9090

短余弦22[128]={1000,809,309,-810,-1000,-810,-310,809,309,-310,-810,-1000,-810,-810,-310,809,309,-310,-1000,10-310,809,810,310,309,810,809,810,809,810,310-310,809,810,809,810,809,810,310,309,810,809,810











^,



volatile long max=0;
volatile int maxIndex=0;

for (i=0;i<64;i++){
//捕获功率^2.
FFT_POWER[i]=((long) cosine22[i]*(long) cosine22[i])+((long) cosine22[i+64]*(long) cosine22[i+64]);
//捕获最大值
if (FFT_POWER[I]>max){
Max=FFT_POWER[i];
maxIndex=I;
}
}


返回(0);

} 

我对 FIX_FFTR 的理解是、它作为参数是:

1、大小为 N 的数组(在我的案例中为128)

2、"m"因子、在我的例子中就是 log2 (N)

3.告知函数我是要正向还是反向 FFT 的标志,在我的情况下应该为0。

它只是将您输入的数组替换为包含 N/2实数元素(索引0到 N/2-1) l 和 N/2虚数元素(索引 N/2到 N)的数组。

我首先插入一个余弦函数、并尝试在所选频率处恢复一个尖峰。 我的采样频率为220Hz、我尝试捕获的波的频率为22Hz。 然后、我尝试在每个频率单元中捕获相对功率(我知道您应该为 sqrt 表示真正功率、但我跳过了该部分、请诉我)。 根据我在采样频率为1/10的时域中的输入、可以预期 N/10in 具有最大的峰值。 但是、当我在调试中运行并检查我的数字时、我得到的结果与我们在不同位置使用奇怪的尖峰时所期望的结果大相径庭:

FFT_POWER 长[64] [245、340、629、130、3152。。。] 0x20000918
0 0 [0] 245. 0x20000918
1.71875 1 [1] 340 0x2000091C
3.4375 2. [2] 629 0x20000920
5.15625 3. [3] 1305 0x20000924
6.875 4. [4] 3152. 0x20000928
8.59375 5. [5] 10937 0x2000092C
10.3125. 6. [6] 148733 0x20000930
12.03125 7. [7] 75065 0x20000934
13.75 8. [8] 11545. 0x20000938
15.46875 9. [9] 4930. 0x2000093C
17.1875 10. [10] 2842. 0x20000940
18.90625 11. [11] 1961年 0x20000944
20.625 12. [12] 1489 0x20000948
22.34375 13. [13] 1145. 0x2000094C
24.0625. 14. [14] 976 0x20000950
25.78125. 15. [15] 800 0x20000954
27.5. 16. [16] 730 0x20000958
29.21875 17. [17] 637) 0x2000095C
30.9375 18 [18] 629 0x20000960
32.65625 19. [19] 640) 0x20000964
34.375 20. [20] 692. 0x20000968
36.09375 21. [21] 738) 0x2000096C
37.8125 22. [22] 905 0x20000970
39.53125 23 [23] 1573. 0x20000974
41.25. 24 [24] 4045. 0x20000978
42.96875 25 [25] 30920 0x2000097C
44.6875 26 [26] 84825. 0x20000980
46.40625 27. [27] 9010. 0x20000984
48.125. 28. [28] 4505 0x20000988
49.84375 29. [29] 3016 0x2000098C
51.5625 30 [30] 2740. 0x20000990
53.28125 31. [31] 2610. 0x20000994
55 32 [32] 2809. 0x20000998
56.71875 33. [33] 3280 0x2000099C
58.4375 34 [34] 4285. 0x200009A0
60.15625 35. [35] 6185. 0x200009A4
61.875 36. [36] 10916 0x200009A8
63.59375 37. [37] 28561 0x200009AC
65.3125. 38. [38] 309905 0x200009B0
67.03125 39. [39] 124577 0x200009B4
68.75 40 [40] 15925 0x200009B8.
70.46875 41. [41] 5186 0x200009BC
72.1875 42. [42] 2578 0x200009C0
73.90625 43. [43] 1417. 0x200009C4
75.625. 44. [44] 929. 0x200009C8
77.34375 45. [45] 569. 0x200009CC
79.0625. 46. [46] 464.64 0x200009D0
80.78125 47. [47] 340 0x200009D4
82.5 48 [48] 290 0x200009D8
84.21875 49 [49] 265 0x200009DC
85.9375. 50 [50] 305. 0x200009E0
87.65625 51. [51] 296. 0x200009E4
89.375. 52. [52] 288 0x200009E8.
91.09375 53. [53] 458 0x200009EC
92.8125 54 [54] 745-45 0x200009F0
94.53125 55 [55] 1233. 0x200009F4
96.25. 56. [56] 2929. 0x200009F8
97.96875 57. [57] 19172. 0x200009FC
99.6875 58. [58] 39145. 0x20000A00
101.40625 59. [59] 2858. 0x20000A04
103.125. 60 [60] 809) 0x20000A08
104.84375 61. [61] 360度 0x20000A0C
106.5625. 62. [62] 180 0x20000A10
108.28125. 63. [63] 202. 0x20000A14

不用说、我现在有点被骗了。 如果有人对 FFTR 或我所犯的错误有任何建议、我会很感激。

谢谢、

Jim

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好 Jim

    我想您应该和 Tom Roberts 一样。 TM4C 具有 CMSIS-DSP 库、该库为实时信号运行 FFT 并按预期进行响应。 您可能希望使用相同的。