问题描述
为啥我在测试machine的fft模块时,处理时间大约为160us,而numpy的fft模块才40us,为啥体现不出硬件加速能力,是什么原因,machine模块用的是例程程序
numpy fft的部分代码,fft_real[row_idx,:],fft_imag[row_idx,:] = np.fft.fft(input_1)这一条执行时间大约40us左右。
import time, os, sys, image
from media.sensor import *
from media.display import *
from media.media import *
import ulab.numpy as np
import utime
import math
import machine # 新增
from machine import FFT
import gc
cur_frame = sensor.snapshot()
cur_frame.histeq()
ref_bl = np.array(cur_frame.to_numpy_ref()) # 当前帧数组hanning
frame_start = utime.ticks_us() # 单帧起始时间
if ref_bl1 is None:
ref_bl1 = np.array(cur_frame.to_numpy_ref()) # 当前帧数组hanning
continue
for row_idx in range(changdu):
input_1=ref_bl[row_idx, :]
fft_real[row_idx,:],fft_imag[row_idx,:] = np.fft.fft(input_1)
machine的fft模块为提供的案例,fft1 = FFT(data, 64, 0x555) 和res = fft1.run()两句执行时间为160us左右
from machine import FFT
import array
import math
from ulab import numpy as np
PI = 3.14159265358979323846264338327950288419716939937510
rx = []
def input_data():
for i in range(64):
data0 = 10 * math.cos(2 * PI * i / 64)
data1 = 20 * math.cos(2 * 2 * PI * i / 64)
data2 = 30 * math.cos(3 * 2 * PI * i / 64)
data3 = 0.2 * math.cos(4 * 2 * PI * i / 64)
data4 = 1000 * math.cos(5 * 2 * PI * i / 64)
rx.append((int(data0 + data1 + data2 + data3 + data4)))
input_data() #初始化需要进行FFT的数据,列表类型
print(rx)
data = np.array(rx,dtype=np.uint16) #把列表数据转换成数组
print(data)
fft1 = FFT(data, 64, 0x555) #创建一个FFT对象,运算点数为64,偏移是0x555
res = fft1.run() #获取FFT转换后的数据
print(res)
res = fft1.amplitude(res) #获取各个频率点的幅值
print(res)
res = fft1.freq(64,38400) #获取所有频率点的频率值
print(res)