We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
实际幅值为[0,10,20,30,0.2,1000] 计算幅值为[0, 19, 40, 59, 0, 1998] 考虑到0.2被整数量化为0,但其余幅值均差2倍
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.int16) #把列表数据转换成数组 #print(data) fft1 = FFT(data, 64, 0) #创建一个FFT对象,运算点数为64,偏移是0x555 res = fft1.run() #获取FFT转换后的数据 #print(res)
res = fft1.amplitude(res) #获取各个频率点的幅值 print(res)
#res = fft1.freq(64,38400) #获取所有频率点的频率值 #print(res)
k230 canmv
micropython v0.4
all
同时案例中的转换,为什么采用的是uint16 data = np.array(rx,dtype=np.uint16)
fft1 = FFT(data, 64, 0x555) 测试偏移量只支持16进制和8进制,是否在说明文档和案例中说明偏移的格式 同时,在进行偏移时FFT幅值为原来的1/2?
`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.sin(2 * PI * i / 64) +10 data1 = 0#20 * math.cos(2 * 2 * PI * i / 64) data2 = 0#30 * math.cos(3 * 2 * PI * i / 64) data3 = 0#0.2 * math.cos(4 * 2 * PI * i / 64) data4 = 0# 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.int16) #把列表数据转换成数组 #print(data) fft1 = FFT(data, 64, 0xA) # 偏置10 ,16进制 res = fft1.run() #获取FFT转换后的数据 #print(res)
res = fft1.amplitude(res) #获取各个频率点的幅值 print(res)`
结果
[9, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 除直流分量接近,幅值仅为原有10的1/2
The text was updated successfully, but these errors were encountered:
目前幅值计算确实有问题,下个版本解决
Sorry, something went wrong.
wuwentao
zhangxiaojingCAN
No branches or pull requests
What happened
实际幅值为[0,10,20,30,0.2,1000]
计算幅值为[0, 19, 40, 59, 0, 1998]
考虑到0.2被整数量化为0,但其余幅值均差2倍
Reproduction steps
基础示例
欢迎使用CanMV IDE, 点击IDE左下角的绿色按钮开始执行脚本
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.int16) #把列表数据转换成数组
#print(data)
fft1 = FFT(data, 64, 0) #创建一个FFT对象,运算点数为64,偏移是0x555
res = fft1.run() #获取FFT转换后的数据
#print(res)
res = fft1.amplitude(res) #获取各个频率点的幅值
print(res)
#res = fft1.freq(64,38400) #获取所有频率点的频率值
#print(res)
Hardware board
k230 canmv
Software version
micropython v0.4
Bug frequency
all
Anything else
同时案例中的转换,为什么采用的是uint16
data = np.array(rx,dtype=np.uint16)
fft1 = FFT(data, 64, 0x555)
测试偏移量只支持16进制和8进制,是否在说明文档和案例中说明偏移的格式
同时,在进行偏移时FFT幅值为原来的1/2?
`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.sin(2 * PI * i / 64) +10
data1 = 0#20 * math.cos(2 * 2 * PI * i / 64)
data2 = 0#30 * math.cos(3 * 2 * PI * i / 64)
data3 = 0#0.2 * math.cos(4 * 2 * PI * i / 64)
data4 = 0# 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.int16) #把列表数据转换成数组
#print(data)
fft1 = FFT(data, 64, 0xA) # 偏置10 ,16进制
res = fft1.run() #获取FFT转换后的数据
#print(res)
res = fft1.amplitude(res) #获取各个频率点的幅值
print(res)`
结果
[9, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
除直流分量接近,幅值仅为原有10的1/2
The text was updated successfully, but these errors were encountered: