硬汉嵌入式论坛

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

[客户分享] STM32 FFT基于Nuttall窗双谱线插值算法,自封库和DEMO

  [复制链接]

2

主题

14

回帖

20

积分

新手上路

积分
20
发表于 2019-10-4 11:20:31 | 显示全部楼层 |阅读模式
本帖最后由 JimmyKudo 于 2019-10-4 11:50 编辑

做项目用L452三相电流采样做谐波和三相不平衡分析时自己封了一个FFT库,给大家做个参考,如标题,采样的Nuttall窗双谱线插值(hanning窗仿真效果出入不大),不做插值处理相位会偏离较大,如下:


matlab 仿真,幅频相角与序列一致:
图片1.png
在stm32L452上,模拟序列与计算出来的一致(附件:FFT_TEST):
图片2.png


在stm32L431上,TIM定时触发ADC1采样三通道DMA传输(通道间采样转换延迟忽略)。
图片3.png


注:1.封的FFT256是因为本身自己内存空间限制,FFT1024 需要内存空间会较大,如需要可以更改宏重新编译库。
                  #define FFT_NUM                  256
                  arm_cfft_sR_f32_len256
       2.上述库谐波计算1~21次,根据需要可以更改。
                  #define MAX_HARMONIC_TIMES       21
       3.mcu需要支持浮点运算。       4.采样率设置保证序列包含至少2个周波










FFT_TEST.rar

19.17 MB, 下载次数: 602

示例工程

FFT_LIB.rar

10.16 MB, 下载次数: 511

IAR生成.a工程

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2019-10-5 10:18:19 | 显示全部楼层
非常感谢楼主分享
回复

使用道具 举报

0

主题

77

回帖

77

积分

初级会员

积分
77
发表于 2020-5-12 15:54:54 | 显示全部楼层
楼主你好,能讲一下怎么加窗吗?我想在stm32h7上用fft算相位差。但官方的库计算不对,查资料都说要加汗宁窗。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2020-5-12 16:05:02 | 显示全部楼层
艾那的小强 发表于 2020-5-12 15:54
楼主你好,能讲一下怎么加窗吗?我想在stm32h7上用fft算相位差。但官方的库计算不对,查资料都说要加汗宁窗 ...

近期我就发布各种窗的FFT计算代码供大家参考使用。
回复

使用道具 举报

0

主题

77

回帖

77

积分

初级会员

积分
77
发表于 2020-5-12 17:00:39 | 显示全部楼层
eric2013 发表于 2020-5-12 16:05
近期我就发布各种窗的FFT计算代码供大家参考使用。

谢谢硬汉哥!这两天因为这个问题弄的真是太着急了。
回复

使用道具 举报

2

主题

8

回帖

14

积分

新手上路

积分
14
发表于 2021-8-3 18:13:10 | 显示全部楼层
双峰插值原理希望楼主版主详解,或者能指明学习方向也可,膜拜优秀的大神们
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2022-3-12 13:13:04 | 显示全部楼层
你好楼主,请问一下,我用你的fft代码跑了一下。基波修正后的幅值相位和频率很准确,但是谐波的幅值不准,相位和频率都大致准确,目前不知道问题在哪?
4EQ)F7}0KD605R2(~%TI3ZD.png
XTWK@_}89Z_%IWT84()CIFD.png
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2022-3-12 13:25:42 | 显示全部楼层
谐波的相位也不准+1+1+
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2022-3-13 14:01:03 | 显示全部楼层
anian 发表于 2022-3-12 13:25
谐波的相位也不准+1+1+

我是傻逼
回复

使用道具 举报

2

主题

14

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2022-7-8 11:38:07 | 显示全部楼层
anian 发表于 2022-3-12 13:13
你好楼主,请问一下,我用你的fft代码跑了一下。基波修正后的幅值相位和频率很准确,但是谐波的幅值不准, ...

4.采样率设置保证序列包含至少2个周波
回复

使用道具 举报

0

主题

15

回帖

15

积分

新手上路

积分
15
发表于 2022-7-16 00:42:44 | 显示全部楼层
楼主,请问直流分量怎么算
回复

使用道具 举报

0

主题

15

回帖

15

积分

新手上路

积分
15
发表于 2022-7-17 17:41:32 | 显示全部楼层
请问:只有单一频率100Hz的情况计算结果不对,为什么。50Hz到70Hz计算结果都是准的
testInput_f32_10khz=5*arm_sin_f32(2*PI*100*i/fs+PI/3) ;//fs=5kHz 50hz 70hz 100hz
1658050425347.png
d1855e55dffe43dfdf835e400d7452c.png
1658050734553.png
1658050841391.png
回复

使用道具 举报

0

主题

15

回帖

15

积分

新手上路

积分
15
发表于 2022-7-17 18:07:18 | 显示全部楼层
叠加1 2 3次谐波计算结果又是正确的   
for(int i=0;i<1024;i++)//生成信号序列
    {
      testInput_f32_10khz=5*arm_sin_f32(2*PI*i*50/fs+PI/3) + 2.5*arm_sin_f32(2*PI*i*100/fs+PI/3) + 7.2*arm_sin_f32(2*PI*i*150/fs+PI/3);;// //生成实部
    }
1658052364284.png
回复

使用道具 举报

2

主题

14

回帖

20

积分

新手上路

积分
20
 楼主| 发表于 2022-7-19 14:57:47 | 显示全部楼层
GY2022 发表于 2022-7-17 18:07
叠加1 2 3次谐波计算结果又是正确的   
for(int i=0;i

手上没有验证的板子,这个算法确实比较依赖采样率,你可以调整下fs再试试
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2022-8-8 13:49:22 | 显示全部楼层
请问楼主是基于哪篇论文做的?能分享一下论文和matlab的m文件吗?谢谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 20:05 , Processed in 0.401195 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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