基于MCU的快速傅里叶变换FFT调试记录

        FFT主要用于将信号从时域变换到频域,时域变换到频域的主要目的是为了更方便分析信号,比如轴承振动异常的频率想通过时域信号去分析出来是哪个频率就很难分析,而通过把时域信号变化到频域的话就可以很清楚直接的看出是什么频率的信号异常,配合振动行业的历史专家数据可以很快判断出来轴承的异常点。

      FFT有很多开源算法,其中ARM CMSIS DSP库已经提供了现成的实现,同时也附带了容易上手理解的demo。使用CMSIS DSP FFT可以通过KEIL直接勾选对应pack后就可以把需要的lib引入进来。

 添加对应的宏定义ARM_MATH_CM0开启arm dsp math相关库功能,

 在需要使用的地方引入相关头文件

#include "arm_math.h"
#include "arm_const_structs.h"

定义fft点数和输入输出缓存

#define TEST_LENGTH_SAMPLES 512

float32_t testInput_f32_10khz[TEST_LENGTH_SAMPLES];

static float32_t testOutput[TEST_LENGTH_SAMPLES/2];

uint32_t fftSize = TEST_LENGTH_SAMPLES/2;
uint32_t ifftFlag = 0;
uint32_t doBitReverse = 1;

初始化fft测试数据并进行fft后实测验证算法是否ok

 
  float32_t maxValue;

  status = ARM_MATH_SUCCESS;

  for(uint16_t i=0; i<TEST_LENGTH_SAMPLES/2; i++)
  {
      testInput_f32_10khz[i*2] = arm_sin_f32(2*3.1415926*30*i/256);//30HZ的模拟测试数据
      testInput_f32_10khz[i*2+1] = 0;//虚数设置0
  }


  /* Process the data through the CFFT/CIFFT module */
  arm_cfft_f32(&arm_cfft_sR_f32_len256, testInput_f32_10khz, ifftFlag, doBitReverse);

  /* Process the data through the Complex Magnitude Module for
  calculating the magnitude at each bin */
  arm_cmplx_mag_f32(testInput_f32_10khz, testOutput, fftSize);
 
  /* Calculates maxValue and returns corresponding BIN value */
  arm_max_f32(testOutput, fftSize, &maxValue, &testIndex);



  printf("testIndex:%d \r\n",testIndex);

  for(uint16_t i=0; i<TEST_LENGTH_SAMPLES/2; i++)
  {
     printf("%d, %.11f\r\n",i, testOutput[i]);
  }    

实测log可以看到在第31个模最大

testIndex:30 
0, 0.00002892773
1, 0.00004297213
2, 0.00001266399
3, 0.00006136897
4, 0.00013560653
5, 0.00012627122
6, 0.00009531343
7, 0.00005518499
8, 0.00001329048
9, 0.00003137795
10, 0.00003203490
11, 0.00002578502
12, 0.00001013968
13, 0.00004559400
14, 0.00002793486
15, 0.00003240239
16, 0.00005054057
17, 0.00001315053
18, 0.00001753508
19, 0.00002892138
20, 0.00002252875
21, 0.00001108598
22, 0.00003952960
23, 0.00002915471
24, 0.00003034776
25, 0.00004969939
26, 0.00005967727
27, 0.00006919499
28, 0.00007679316
29, 0.00024255572
30, 128.00001525879
31, 0.00023076239
32, 0.00006453021
33, 0.00007644097
34, 0.00004345864
35, 0.00003356057
36, 0.00007228916
37, 0.00006429406
38, 0.00004771496
39, 0.00013370944
40, 0.00012531117
41, 0.00003511846
42, 0.00009947860
43, 0.00000694658
44, 0.00004372749
45, 0.00005038966
46, 0.00001856879
47, 0.00001885037
48, 0.00002629824
49, 0.00004997727
50, 0.00000681128
51, 0.00002069812
52, 0.00001392227
53, 0.00000433236
54, 0.00004626073
55, 0.00004169381
56, 0.00002593613
57, 0.00004691675
58, 0.00001298208
59, 0.00000677296
60, 0.00001236440
61, 0.00002898611
62, 0.00002272235
63, 0.00004982074
64, 0.00010203922
65, 0.00012857486
66, 0.00009724760
67, 0.00005891226
68, 0.00000548412
69, 0.00001563732
70, 0.00003752773
71, 0.00000425526
72, 0.00000775951
73, 0.00002748890
74, 0.00003530245
75, 0.00000587712
76, 0.00002105232
77, 0.00002862351
78, 0.00002027376
79, 0.00002692355
80, 0.00001192341
81, 0.00002448306
82, 0.00003440450
83, 0.00004126507
84, 0.00000784971
85, 0.00001846974
86, 0.00007261307
87, 0.00002113351
88, 0.00004874028
89, 0.00005613720
90, 0.00004030240
91, 0.00002758938
92, 0.00004858629
93, 0.00003407705
94, 0.00000554083
95, 0.00002909856
96, 0.00003871642
97, 0.00004470018
98, 0.00006145758
99, 0.00012116764
100, 0.00012970244
101, 0.00004076306
102, 0.00008924623
103, 0.00006191705
104, 0.00003942000
105, 0.00002204489
106, 0.00001532559
107, 0.00004920200
108, 0.00002218006
109, 0.00000691916
110, 0.00007104683
111, 0.00004537940
112, 0.00004157177
113, 0.00003269806
114, 0.00003065552
115, 0.00000399545
116, 0.00001086705
117, 0.00003166789
118, 0.00002798485
119, 0.00001630381
120, 0.00003258564
121, 0.00001472268
122, 0.00001044421
123, 0.00001364797
124, 0.00001667829
125, 0.00000677175
126, 0.00002250985
127, 0.00000991695
128, 0.00003369440
129, 0.00000991696
130, 0.00002291132
131, 0.00000677176
132, 0.00001667829
133, 0.00001364797
134, 0.00000959428
135, 0.00001472268
136, 0.00003258564
137, 0.00001630380
138, 0.00002751275
139, 0.00003166790
140, 0.00001086705
141, 0.00000399545
142, 0.00003044865
143, 0.00003269806
144, 0.00004157177
145, 0.00004537940
146, 0.00007066731
147, 0.00000691916
148, 0.00002218006
149, 0.00004920201
150, 0.00001477674
151, 0.00002204489
152, 0.00003942000
153, 0.00006191705
154, 0.00008967488
155, 0.00004076306
156, 0.00012970244
157, 0.00012116764
158, 0.00006143878
159, 0.00004470019
160, 0.00003871642
161, 0.00002909856
162, 0.00000764699
163, 0.00003407704
164, 0.00004858630
165, 0.00002758939
166, 0.00004073274
167, 0.00005613719
168, 0.00004874028
169, 0.00002113351
170, 0.00007273883
171, 0.00001846973
172, 0.00000784971
173, 0.00004126507
174, 0.00003449893
175, 0.00002448306
176, 0.00001192341
177, 0.00002692355
178, 0.00002155130
179, 0.00002862351
180, 0.00002105232
181, 0.00000587712
182, 0.00003431020
183, 0.00002748890
184, 0.00000775951
185, 0.00000425527
186, 0.00003961953
187, 0.00001563731
188, 0.00000548412
189, 0.00005891226
190, 0.00009541891
191, 0.00012857486
192, 0.00010203922
193, 0.00004982074
194, 0.00002369224
195, 0.00002898612
196, 0.00001236440
197, 0.00000677295
198, 0.00001235775
199, 0.00004691675
200, 0.00002593613
201, 0.00004169381
202, 0.00004802661
203, 0.00000433236
204, 0.00001392227
205, 0.00002069812
206, 0.00000820385
207, 0.00004997728
208, 0.00002629824
209, 0.00001885038
210, 0.00001725397
211, 0.00005038965
212, 0.00004372750
213, 0.00000694659
214, 0.00009800826
215, 0.00003511846
216, 0.00012531117
217, 0.00013370944
218, 0.00004652559
219, 0.00006429406
220, 0.00007228916
221, 0.00003356058
222, 0.00004271183
223, 0.00007644096
224, 0.00006453021
225, 0.00023076242
226, 128.00001525879
227, 0.00024255572
228, 0.00007679316
229, 0.00006919500
230, 0.00006026902
231, 0.00004969939
232, 0.00003034775
233, 0.00002915472
234, 0.00004004771
235, 0.00001108597
236, 0.00002252875
237, 0.00002892139
238, 0.00001784568
239, 0.00001315052
240, 0.00005054057
241, 0.00003240238
242, 0.00002901943
243, 0.00004559400
244, 0.00001013968
245, 0.00002578502
246, 0.00003163380
247, 0.00003137795
248, 0.00001329048
249, 0.00005518498
250, 0.00009745321
251, 0.00012627122
252, 0.00013560653
253, 0.00006136898
254, 0.00001108030
255, 0.00004297214

导入到excel看曲线

    对应到实际应用,可以依据横坐标去换算到实际待测环境的对应频点。 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值