硬汉嵌入式论坛

 找回密码
 立即注册
查看: 15|回复: 0
收起左侧

[LUA教程] H7-TOOL的LUA小程序教程第20期:DSP FFT傅里叶变换(2026-07-12)

[复制链接]

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
123423
QQ
发表于 2 小时前 | 显示全部楼层 |阅读模式
LUA脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用,支持在线调试运行,支持离线运行。TOOL的LUA教程争取做到大家可以无痛调用各种功能函数,不需要学习成本。

H7-TOOL的LUA API手册发布V1.1,方便API检索查阅
https://forum.anfulai.cn/forum.php?mod=viewthread&tid=122382



说明
实数FFT,支持32, 64, 128, 256, 512, 1024和2048点

LUA函数说明
output,re = arm_rfft_fast_f32(x, N)

返回值output,返回FFT幅值续列,个数是N/2,根据FFT幅值谱对称性,返回一半即可
返回值了,re = 1表示成功, re = 0表示失败
第1个参数x是要求FFT的数据序列
第2个参数N是数据序列长度,支持32, 64, 128, 256, 512, 1024和2048点

测试举例:

[Lua] 纯文本查看 复制代码
-- 参数设置
local Fs = 1024    -- 采样率
local N = 1024     -- 采样点数
 
-- 生成序列
local n = {}       -- 采样序列
local t = {}       -- 时间序列  
local f = {}       -- 频率序列
 
local output = {}
 
for i = 0, N-1 do
    n[i+1] = i
    t[i+1] = i / Fs
    f[i+1] = i * Fs / N
end
 
-- 生成信号:直流分量 + 50Hz余弦波
local x = {}
local pi = math.pi
 
for i = 1, N do
    -- x = 1 + cos(2*pi*50*t + pi/3)
    x[i] = 1 + math.cos(2 * pi * 50 * t[i] + pi/3)
end
 
-- 打印结果验证
print("采样率 Fs = " .. Fs .. " Hz")
print("采样点数 N = " .. N)
print("信号时长 = " .. (N/Fs) .. " 秒")
 
output,re = arm_rfft_fast_f32(x, N)
 
    output[1] = output[1] /2 -- 直流分量
for i=1, N/2, 1 do                                 
    s = string.format("%f, %f", x[i], output[i]/512)

    print(s)                                  
    print_wave(s)
    delayms(1)                                  
end


234.png

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-7-12 02:43 , Processed in 2.724257 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表