Fork me on GitHub

随笔 - 997  文章 - 5  评论 - 181  阅读 - 300万 
壹:
fft在数字信号处理领域是一个神一样的存在。要好好熟悉一下。这里给出频移的算法源码解析。
所谓的频移,就是把数字信号的频频顺序打乱,移动一些。这个在防止啸叫和辅听领域应用十分广泛。
贰:
这个源码不是很复杂,这里直接给出一个仿真源码:
复制代码
#include <stdio.h>
#include <math.h>

typedef short spx_int16_t;
typedef spx_int16_t spx_word16_t;

void dump16(spx_word16_t *data,short len)
{
  for (short i = 0; i < len; i++)
  {
    /* code */
    printf("%d,",data[i]);
  }

  printf("\n\r");

}

void swap(spx_int16_t *v1, spx_int16_t *v2)
{
    spx_int16_t tmp = *v1;
    *v1 = *v2;
    *v2 = tmp;
}

void fftshift(spx_int16_t *data, int count)
{
    int k = 0;
    int c = (int) floor((float)count/2);
    // For odd and for even numbers of element use different algorithm
    if (count % 2 == 0)
    {
        for (k = 0; k < c; k++)
            swap(&data[k], &data[k+c]);
    }
    else
    {
        spx_int16_t tmp = data[0];
        for (k = 0; k < c; k++)
        {
            data[k] = data[c + k + 1];
            data[c + k + 1] = data[k + 1];
        }
        data[c] = tmp;
    }
}

void ifftshift(spx_int16_t *data, int count)
{
    int k = 0;
    int c = (int) floor((float)count/2);
    if (count % 2 == 0)
    {
        for (k = 0; k < c; k++)
            swap(&data[k], &data[k+c]);
    }
    else
    {
        spx_int16_t tmp = data[count - 1];
        for (k = c-1; k >= 0; k--)
        {
            data[c + k + 1] = data[k];
            data[k] = data[c + k];
        }
        data[c] = tmp;
    }
}

int main()
{
        spx_int16_t array[8] = {1,2,3,4,5,6,7,8};

        printf("before the fftshift is:\n\r");
        dump16(array,8);
        fftshift(array,8);
        printf("after the fftshift is:\n\r");
        dump16(array,8);

        return 0;
}
复制代码
叁:
上面的结果是:
before the fftshift is:
1,2,3,4,5,6,7,8,
after the fftshift is:
5,6,7,8,1,2,3,4,
posted on   虚生  阅读(203)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
历史上的今天:
2020-02-03 python 检测端口是否被占用
点击右上角即可分享
微信分享提示