声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

楼主: lebronze

[FFT] 长度随机的信号FFT如何实现

[复制链接]
发表于 2016-7-9 10:39 | 显示全部楼层
lebronze 发表于 2016-7-8 22:36
多谢回复,我这两天看了一下张明的代码。
他相当于使用多组基的fft来做,但是问题是它的代码是C++的,我 ...

如果检查N不等于2的整数幂,可以用DFT来做,但不是FFT的速度了,速度慢了几十几百倍,你不在意就好。

点评

sd
会慢那么多!!!????  详情 回复 发表于 2016-7-11 08:47
回复 支持 反对
分享到:

使用道具 举报

发表于 2016-7-11 08:47 | 显示全部楼层
hcharlie 发表于 2016-7-9 10:39
如果检查N不等于2的整数幂,可以用DFT来做,但不是FFT的速度了,速度慢了几十几百倍,你不在意就好。

会慢那么多!!!????

点评

sd
哇!差这么多!真是学习了。  详情 回复 发表于 2016-7-11 11:25
对于1024点,DFT计算100万次。FFT只需2万次,50倍,点数越多,倍数越多。  发表于 2016-7-11 10:52
 楼主| 发表于 2016-7-11 09:42 | 显示全部楼层
hcharlie 发表于 2016-7-9 10:39
如果检查N不等于2的整数幂,可以用DFT来做,但不是FFT的速度了,速度慢了几十几百倍,你不在意就好。

亲测,慢了上百倍。。。。我查了很多方法,现在也只有混合基FFT,和直接DFT的方法适用于非2的整数幂点信号的FFT。DFT的确很慢,但是混合基没有找到C代码,自己编写又真的太复杂了。
不知您有没有什么好方法
发表于 2016-7-11 11:24 | 显示全部楼层
lebronze 发表于 2016-7-8 22:36
多谢回复,我这两天看了一下张明的代码。
他相当于使用多组基的fft来做,但是问题是它的代码是C++的,我 ...

我有个同学就把matlab程序改为c++的了  他说学习起来还不算太难  
发表于 2016-7-11 11:25 | 显示全部楼层
sd 发表于 2016-7-11 08:47
会慢那么多!!!????

哇!差这么多!真是学习了。
 楼主| 发表于 2016-7-11 14:01 | 显示全部楼层
Generation 发表于 2016-7-11 11:24
我有个同学就把matlab程序改为c++的了  他说学习起来还不算太难

问题是我现在找不到matlab里的fft.m文件,他好像用.p封装起来了。。。
麻烦你能不能问下你同学matlab里fft实现的代码在哪个文件里啊?我找到了好改一改

点评

那要是p文件就没招了  详情 回复 发表于 2016-7-11 14:42
发表于 2016-7-11 14:42 | 显示全部楼层
lebronze 发表于 2016-7-11 14:01
问题是我现在找不到matlab里的fft.m文件,他好像用.p封装起来了。。。
麻烦你能不能问下你同学matlab里f ...

那要是p文件就没招了
 楼主| 发表于 2016-7-11 15:07 | 显示全部楼层
Generation 发表于 2016-7-11 14:42
那要是p文件就没招了

啊?你不是说你同学用C++实现过吗?他是怎么做的啊

点评

他不是做这个 是改别的程序  详情 回复 发表于 2016-7-11 16:26
发表于 2016-7-11 16:26 | 显示全部楼层
lebronze 发表于 2016-7-11 15:07
啊?你不是说你同学用C++实现过吗?他是怎么做的啊

他不是做这个  是改别的程序
发表于 2016-7-11 22:47 | 显示全部楼层
lebronze 发表于 2016-7-5 22:58
多谢回复,不过我这边是要搞嵌入式开发,FFT,IFFT只能自己写,不能调用库

http://blog.csdn.net/syrchina/article/details/22713337
我没有试验,你可以试试

点评

这是什么????  详情 回复 发表于 2016-7-12 08:29
发表于 2016-7-12 08:29 | 显示全部楼层
impulse 发表于 2016-7-11 22:47
http://blog.csdn.net/syrchina/article/details/22713337
我没有试验,你可以试试

这是什么????
发表于 2016-7-12 11:18 | 显示全部楼层
lebronze 发表于 2016-7-6 15:17
多谢各位的热心回复,很感动。
不过2的整数幂的fft我也会做,现在的问题是如果信号长度是任意的,可能不是 ...

如果你想完成任意长度的数据是很难实现的,Matlab中关于这段代码从来不显示。我常用的方法就是加零数据延长到2的整数次幂。你也可以试一下,效果还可以!!!

评分

1

查看全部评分

发表于 2016-7-12 11:21 | 显示全部楼层
可以参考 胡广书著《数字信号处理理论、算法与实现》的10.4节、11.2.1节
 楼主| 发表于 2016-7-12 14:56 | 显示全部楼层
本帖最后由 lebronze 于 2016-7-12 15:02 编辑

多谢
我也尝试过将任意点数信号补零或者截断到2的整数幂,结果做FFT后发现相位会有变化。如下图:原始信号fft结果(长度  7169): 原始信号.jpg
截断后信号fft结果(长度4096): 截断.jpg
补零后fft结果(长度8192)  :      补零.jpg
信号频谱的相位还是变化了

点评

经过FFT之后所有的相位都会有变化,只不过一般我们用不到而已,如果你想得到准确的相位值,那么最好再做一下矫正!!!  详情 回复 发表于 2016-7-14 09:41
发表于 2016-7-12 15:37 | 显示全部楼层
Agoni 发表于 2016-7-12 08:29
这是什么????

FFTW算法在DSP核心板上的编译。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-28 18:55 , Processed in 0.079571 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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