numpy下fft模块提供了丰富的fft函数,几种常用的在这里记录一下使用方式 fft 输入实数samples,如果输入的sample是带虚数部分的话,虚数部分会被默认删除。 t=np.arange(12) b=np.sin(t) print(b) print("sum(b)=", np.sum(b)) s = np.fft.fft(b) print(s) 1 2 3 4 5 6 7 运行结果截图如下 从图中可以看到, [0]是一个实数,实数部分是所有input中各个元素之和。 [i]与[N-i]共轭;输入的N如果是偶数,那么[N/2]没有共轭的元素。 rfft rfft其实就是对fft的结果输出做了省略。 针对刚刚提到的共轭特性,其实输出结果是要保留(N+1)//2个结果就可以了。 t=np.arange(12) b=np.sin(t) print(b) print("sum(b)=", np.sum(b)) s = np.fft.fft(b) print("fft result:", s) s = np.fft.rfft(b) print("rfft result:", s) 1 2 3 4 5 6 7 8 9 10 fftfreq 返回fft的频率节点 上面的fft和rfft将时域数据转为频域,得到的数据的bin是哪些范围? 可以通过fftfreq来获取 第一个参数n是时域数据的数据个数,第二个参数d是表示每一个bin的尺度。一般是1/sample_rate t=np.arange(12) b=np.sin(t) print(b) print("sum(b)=", np.sum(b)) s = np.fft.fft(b) print("fft result:", s) s = np.fft.rfft(b) print("rfft result:", s) s= np.fft.fftfreq(12, d=1/8000) print(s) 1 2 3 4 5 6 7 8 9 10 11 12 13 其结果为 [ 0. 666.66666667 1333.33333333 2000. 2666.66666667 3333.33333333 -4000. -3333.33333333 -2666.66666667 -2000. -1333.33333333 -666.66666667] 1 2 3 那么结合rfft的数据就有 Bin Range Value bin[1] 1~667HZ 0.46997981+0.41183211j bin[2] 667~1334HZ -1.36179847-5.76500237j bin[3] 1334~2000HZ 0.14669493-0.4965488j bin[4] 2000~2667HZ 0.20513541-0.2233417j bin[5] 2667~3333HZ 0.22157176-0.09538547j bin[6] 3333~4kHZ 0.22563497+0.j ———————————————— 版权声明:本文为CSDN博主「安安爸Chris」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/mimiduck/article/details/118549640 |
|