您的位置:首页 > 其它

【玩转单片机系列002】 如何使用STM32提供的DSP库进行FFT

2014-12-09 20:31 337 查看
  前些日子,因为需要在STM32F103系列处理器上,对采集的音频信号进行FFT,所以花了一些时间来研究如何高效并精确的在STM32F103系列处理器上实现FFT。在网上找了很多这方面的资料做实验并进行比较,最终选择了使用STM32提供的DSP库这种方法。

  本文将以一个实例来介绍如何使用STM32提供的DSP库函数进行FFT。

1.FFT运算效率

  使用STM32官方提供的DSP库进行FFT,虽然在使用上有些不灵活(因为它是基4的FFT,所以FFT的点数必须是4^n),但其执行效率确实非常高效,看图1所示的FFT运算效率测试数据便可见一斑。该数据来自STM32 DSP库使用文档。

i,         P,       Mag,         X,         Y
0,         0,         4,         0,        -4
1,       175,        14,        -6,        -4
2,       350,      1492,       746,        -3
3,       525,        11,        -5,        -3
4,       700,         8,        -3,        -3
5,       875,         8,        -4,        -2
6,      1050,         6,        -3,         0
7,      1225,         6,        -3,         0
8,      1400,         8,        -4,        -2
9,      1575,         8,        -4,         0
10,      1750,         4,        -2,         0
11,      1925,         8,        -4,        -1
12,      2100,         6,        -3,         0
13,      2275,         5,        -2,        -2
14,      2450,         6,        -3,        -1
15,      2625,         8,        -3,        -3
16,      2800,         4,        -2,         0
17,      2975,         6,        -3,        -1
18,      3150,         6,        -3,         0
19,      3325,         6,        -3,         0
20,      3500,         2,        -1,         0
21,      3675,         4,        -2,         0
22,      3850,         4,        -2,         0
23,      4025,         4,        -2,         0
24,      4200,         6,        -3,         0
25,      4375,         6,        -3,         0
26,      4550,         4,        -2,         0
27,      4725,         6,        -3,         0
28,      4900,         2,        -1,         0
29,      5075,         4,        -2,        -1
30,      5250,         4,        -2,         0
31,      5425,         2,        -1,         0
32,      5600,         4,        -2,        -1
33,      5775,         6,        -3,        -1
34,      5950,         2,        -1,        -1
35,      6125,         6,        -3,        -1
36,      6300,         2,        -1,         0
37,      6475,         6,        -3,         0
38,      6650,         4,        -2,         0
39,      6825,         4,        -2,        -1
40,      7000,         2,        -1,         0
41,      7175,         6,        -3,         0
42,      7350,         2,        -1,         0
43,      7525,         2,        -1,         0
44,      7700,         2,        -1,         0
45,      7875,         2,        -1,         0
46,      8050,         4,        -2,         0
47,      8225,         2,        -1,         0
48,      8400,      2696,      1348,         0
49,      8575,         2,        -1,        -1
50,      8750,         0,         0,         0
51,      8925,         4,        -2,        -1
52,      9100,         2,         0,        -1
53,      9275,         0,         0,         0
54,      9450,         2,        -1,        -1
55,      9625,         2,        -1,         0
56,      9800,         2,        -1,         0
57,      9975,         2,        -1,        -1
58,     10150,         2,        -1,        -1
59,     10325,         2,        -1,         0
60,     10500,         0,         0,         0
61,     10675,         2,        -1,         0
62,     10850,         4,        -2,        -1
63,     11025,         2,        -1,        -1
64,     11200,         0,         0,         0
65,     11375,         2,        -1,         0
66,     11550,         0,         0,         0
67,     11725,         2,        -1,        -1
68,     11900,         2,        -1,        -1
69,     12075,         2,        -1,         1
70,     12250,         2,        -1,         1
71,     12425,         4,        -2,         1
72,     12600,         4,        -2,        -1
73,     12775,         2,        -1,         1
74,     12950,         0,         0,         0
75,     13125,         4,        -2,         0
76,     13300,         4,        -2,         0
77,     13475,         2,        -1,         0
78,     13650,         2,        -1,         0
79,     13825,         4,        -2,        -1
80,     14000,         2,        -1,         0
81,     14175,         4,        -2,         0
82,     14350,         2,        -1,         1
83,     14525,         4,        -2,         1
84,     14700,         4,        -2,         1
85,     14875,         2,        -1,         1
86,     15050,         4,        -2,         0
87,     15225,         2,        -1,         0
88,     15400,         4,        -2,         1
89,     15575,         4,        -2,         1
90,     15750,         2,        -1,         0
91,     15925,         2,        -1,         1
92,     16100,         2,        -1,         1
93,     16275,         2,        -1,         1
94,     16450,         4,        -2,         1
95,     16625,         2,        -1,         1
96,     16800,         2,        -1,        -1
97,     16975,         4,        -2,         0
98,     17150,         2,        -1,         0
99,     17325,         4,        -2,         0
100,     17500,         4,        -2,         1
101,     17675,         4,        -2,         0
102,     17850,         4,        -2,         1
103,     18025,         4,        -2,        -1
104,     18200,         2,        -1,         1
105,     18375,         4,        -2,         0
106,     18550,         2,        -1,         1
107,     18725,      3996,      1998,         1
108,     18900,         2,        -1,         0
109,     19075,         2,        -1,         1
110,     19250,         4,        -2,         1
111,     19425,         4,        -2,         1
112,     19600,         2,         0,         1
113,     19775,         2,        -1,         0
114,     19950,         0,         0,         0
115,     20125,         4,        -2,         1
116,     20300,         2,         0,         1
117,     20475,         2,         0,         1
118,     20650,         2,        -1,         1
119,     20825,         2,        -1,         1
120,     21000,         2,        -1,         1
121,     21175,         2,        -1,         0
122,     21350,         2,         0,         1
123,     21525,         2,        -1,         0
124,     21700,         0,         0,         0
125,     21875,         2,        -1,         1
126,     22050,         2,        -1,         1
127,     22225,         2,         0,         1


View Code
  在以上的实验数据中,我们分别打印出来了点数、频率、幅值、实部、虚部信息。

  由以上的实验数据,我们可以看出,在频率为350Hz,8400Hz和18725Hz时,幅值出现峰值,分别为1492、2696和3996,这与我们所预期的结果正好相符,从而验证了实验结果的正确性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐