Canmv k230 案例2——FFT测试(初版)

本文介绍了如何在CanMVIDE环境中使用FFT函数对数据进行处理,包括数据准备、数组转换、FFT运算以及遇到的int16数据截断问题,以及与MATLAB结果的比较。
摘要由CSDN通过智能技术生成

FFT函数测试

打开canmv内置的FFT的例子(官网代码可能在测试中)进行参数修改。

# 基础示例(修改版)
# 欢迎使用CanMV IDE, 点击IDE左下角的绿色按钮开始执行脚本
from machine import FFT  #导入FFT
import array             # 数据,列表数据等转换,为啥呢?
import math
from ulab import numpy as np  # 包含array?
PI = 3.14159265358979323846264338327950288419716939937510

rx = []  # 定义待处理数据
def input_data(): 
    for i in range(64):
        data0  = 1 * math.cos(1 * 2 * PI * i / 64)
        data1  = 1 * math.cos(3 * 2 * PI * i / 64)
        data2  = 1 * math.cos(5 * 2 * PI * i / 64)
        data3  = 1 * math.cos(7 * 2 * PI * i / 64)
        data4  = 1 * math.cos(9 * 2 * PI * i / 64)
        rx.append((int(data0 + data1 + data2 + data3 + data4))) 
input_data()                                                            #初始化需要进行FFT的数据,列表类型
print(rx)
data = np.array(rx,dtype=np.int16)    # 原本为uint16,负数会变成大数,帮助文件说支持   int16                              #把列表数据转换成数组
#print(data[1:20])
fft1 = FFT(data, 64, 0)  # 有符号整型,偏移量为0                                            #创建一个FFT对象,运算点数为64,偏移是0
res = fft1.run()                                                        #获取FFT转换后的数据
print(res)
#datar = np.array(res,dtype=np.int16) 
#print(datar)

resA = fft1.amplitude(res)                                               #获取各个频率点的幅值                                      
print(resA)

#resF = fft1.freq(64,6400)                                               #获取所有频率点的频率值  
#print(resF[1])

k230采用的int16,那么对于生成的数据存在截断的误差,在MATLAB里绘制可看出差异,讲输出的列表数据导入到MATLAB并定义为k230

for i=1:64
    cos(1 * 2 * pi * i / 64);
    data1  = 1 * cos(3 * 2 * pi * i / 64);
    data2  = 1 * cos(5 * 2 * pi * i / 64);
    data3  = 1 * cos(7 * 2 * pi * i / 64);
    data4  = 1 * cos(9 * 2 * pi * i / 64);
    data(i)   = data1 + data2 + data3 + data4;
end

plot(data)
hold on
plot(k230)
hold off
legend('浮点数据','int16数据')
dF=fft(data)
dFk230=fft((k230))

stem(abs(dF)/32)
hold on
stem(abs(dFk230)/32)
legend('浮点数据FFT幅值结果','int16数据FFT幅值结果')
hold off

在这里插入图片描述
这个截断的数据好奇怪,计算结果如下
在这里插入图片描述
主要的幅值不大,但还是有一些其余的影响,是数据被截断产生的其余频率。

k230计算的FFT结果如下
在这里插入图片描述
其中第4、6项的计算结果为(32,2),但幅值计算结果不同分别为2、1,奇怪
在这里插入图片描述
后续尚待研究。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值