• 9078阅读
  • 11回复

一个FFT显示的小程序 [复制链接]

上一主题 下一主题
离线skygu
 

图酷模式  只看楼主 倒序阅读 楼主  发表于: 2013-08-29
读取wav文件,进行fft运算,显示



源码发给大家,参考一下!我用的是vs2010 qt5.3
附件: QFreq.rar (1337 K) 下载次数:274
离线彩阳

只看该作者 1楼 发表于: 2013-08-30
请教一下,FFT的原理好不好理解?代码量如何?
上海Qt开发联盟,热忱地欢迎你的加入!
离线oio328oio

只看该作者 2楼 发表于: 2013-09-02
可以发布源代码 吗  学习一下
离线ppdayz

只看该作者 3楼 发表于: 2013-09-09
回 1楼(彩阳) 的帖子
FFT这个是数学家的范畴,反正大学时代我是没有搞明白啥是傅里叶变换。。。。只是会考试而已
离线sheng8sheng8
只看该作者 4楼 发表于: 2013-09-10
看着还是不错的
离线ffii4455

只看该作者 5楼 发表于: 2013-09-16
快速傅里叶变换的代码网上都有
离线embeddedking

只看该作者 6楼 发表于: 2013-09-24
楼主这个做工看起来蛮不错的,赞一个!
能请教个Qt的问题么?
离线lyping
只看该作者 7楼 发表于: 2013-11-02
请问楼主的界面是用控件实现的吗?挺好看。
离线杨宇

只看该作者 8楼 发表于: 2014-02-15
请问能把代码发一下吗,qq374782907谢谢
离线hp_201111

只看该作者 9楼 发表于: 2014-05-13
用音频引擎   Bass   吧,   跨平台, 啥都有。  
离线kaze

只看该作者 10楼 发表于: 2014-05-23
给您一个我在《观音》 中用的FFT。
void fft(int n, double theta, double ar[], double ai[])
{
    int m, mh, i, j, k;
    double wr, wi, xr, xi;
    for (m = n; (mh = m >> 1) >= 1; m = mh)
    {
        for (i = 0; i < mh; i++)
        {
            wr = cos(theta * i);
            wi = sin(theta * i);
            for (j = i; j < n; j += m)
            {
                k = j + mh;
                xr = ar[j] - ar[k];
                xi = ai[j] - ai[k];
                ar[j] += ar[k];
                ai[j] += ai[k];
                ar[k] = wr * xr - wi * xi;
                ai[k] = wr * xi + wi * xr;
            }
        }
        theta *= 2;
    }

    i = 0;
    for (j = 1; j < n - 1; j++)
    {
        for (k = n >> 1; k > (i ^= k); k >>= 1);
        if (j < i)
        {
            xr = ar[j];
            xi = ai[j];
            ar[j] = ar;
            ai[j] = ai;
            ar = xr;
            ai = xi;
        }
    }
}

使用例:低域通過濾波器 (Low-pass filter, LPF)
#define FFT_SIZE 1024
void LPF(ar, ai)    
{
    double theta = -8 * atan(1.0) / FFT_SIZE;
    fft(FFT_SIZE, theta, ar, ai);    

    //高周波数部分にゼロを代入する
    for (i = iFreqHightIndex; i < FFT_SIZE / 2; i ++)
    {
        ar = ai = ar[FFT_SIZE - i - 1] = ai[FFT_SIZE - i - 1] = 0.0;
    }

    theta = 8 * atan(1.0) / FFT_SIZE;
    fft(FFT_SIZE, theta, ar, ai);
    for (i = 0; i < FFT_SIZE; i ++)
    {
        ar /= FFT_SIZE;
    }



离线9号公路

只看该作者 11楼 发表于: 2014-07-26
做的不错 可以分享一下源码不呢
快速回复
限100 字节
 
上一个 下一个