【kissfft】使用kiss_fft做FFT与iFFT-程序员宅基地

技术标签: DSP  kissfft  

长时间没有使用kissfft有点忘记API的使用了,这里记录一下最最基本的使用。 FFT与iFFt

FFT

使用FFT的时候先初始化kiss_fft_cfg,其中第二个参数0/1表示是做fft还是ifft

kiss_fft_state = kiss_fft_alloc(nfft, 0, 0, 0);

构建输入参数

kiss_fft输入参数是复数,但是我们时域的数据为实数,所以需要构建等长的复数参数,然后把时域信号赋值到real部分,image部分置0.

iFFT

kiss_fft_state = kiss_fft_alloc(nfft, 1, 0, 0);

iFFT的时候,可能kissfft没有做scaling,所以结果需要除以N。

最后的结果是输出复数的real部分。

实例代码


static kiss_fft_scalar rand_scalar(void) {
    
    kiss_fft_scalar s = (kiss_fft_scalar) ((rand() + 10) % 256);
    return s / 256.;
}

static void print_fft_result(kiss_fft_cpx *x, int n) {
    
    int l = 0;
    for (int i = 0; i < n; i++) {
    
        printf("(%4.4f+%4.4fi), ", x[i].r, x[i].i);
        if (l++ == 7) {
    
            l = 0;
            printf("\n");
        }
    }
    printf("\n");
}

void test_fft() {
    
    int i = 0;
    int nfft = 20;
    kiss_fft_cpx cin[nfft];
    kiss_fft_cpx cout[nfft];
    kiss_fft_cpx sout[nfft];
    kiss_fft_cfg kiss_fft_state;

    kiss_fft_scalar zero;
    memset(&zero, 0, sizeof(zero));

    for (i = 0; i < nfft; ++i) {
    
        cin[i].r = rand_scalar();
        cin[i].i = zero;
    }
    printf("\n");

    printf(" init data for kiss_fft (cin): \n");
    print_fft_result(cin, nfft);

    memset(cout, 0, sizeof(short) * nfft);
    memset(sout, 0, sizeof(short) * nfft);

    kiss_fft_state = kiss_fft_alloc(nfft, 0, 0, 0);

    kiss_fft(kiss_fft_state, cin, cout);
    kiss_fft_free(kiss_fft_state);

    printf(" results from kiss_fft (cout): \n");
    print_fft_result(cout, nfft);

    kiss_fft_state = kiss_fft_alloc(nfft, 1, 0, 0);

    for (i = 0; i < nfft; i++) {
    
        cout[i].r /= nfft;
        cout[i].i /= nfft;
    }
    // case A.
    kiss_fft(kiss_fft_state, cout, sout);

    // end case
    kiss_fft_free(kiss_fft_state);

    printf(" results from kiss_ifft (sout): \n");
    print_fft_result(sout, nfft);
    printf("\n");
}

int main(int argc, char *const argv[]) {
    

    test_fft();

    return 0;
}

结果如下:
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mimiduck/article/details/118304727

智能推荐

linux下 boa cgi移植(转)-程序员宅基地

文章浏览阅读181次。http://blog.chinaunix.net/u1/33226/showart_485155.html嵌入式WEB服务器常见的有lighttpd shttpd thttpdboa mathopd minihttpdappwebgoahead=========================================================..._cgipath /bin:/usr/bin:/usr/local/bin

结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程...-程序员宅基地

文章浏览阅读452次。1、bootstrap-fileinpu的简单介绍在前面的随笔,我介绍了Bootstrap-table表格插件的具体项目应用过程,本篇随笔介绍另外一个Bootstrap FieInput插件的使用,整合两者可以实现我们常规的Web数据导入操作,导入数据操作过程包括有上传文件,预览数据,选择并提交记录等一系列操作。关于这个插件,我在早期随笔《Boots..._c# bootstrap excel导入

编写应用程序,有一个标题为“计算”的窗口,窗口的布局为FlowLayout布局。窗口中添加两个文本区,当我们在一个文本区中输入若干数时,另一个文本区不断地更新求和及平均值。_实现标题计算的窗口,随着用户输入,输出求和及平均值-程序员宅基地

文章浏览阅读4.8k次,点赞8次,收藏46次。import javax.swing.*;import javax.swing.event.DocumentEvent;import javax.swing.event.DocumentListener;import java.awt.*;import java.util.Scanner;public class Dzj { public static void main(String[] args) { new DzjWin("计算"); }}class ._实现标题计算的窗口,随着用户输入,输出求和及平均值

Android 音视频采集与软编码总结_android 软编码算法-程序员宅基地

文章浏览阅读1.1w次,点赞11次,收藏36次。前言本文总结了笔者在 Android 音视频采集与软编码中的一些经验与技巧,包括移植 FFmpeg、YUV 视频帧处理、最新的 JNI 编写技巧、 ndk 开发技巧等,为了不扯太远本文不会对音视频编码的一些原理性东西进行剖析,也不会大量贴源码,更注重使用方法与流程的讲解。 文章最后将展示一个实现了音视频采集功能与本地视频压缩功能的完整项目。采用软编码利弊众所周知_android 软编码算法

css中级选择器_css 子类怎么设置-程序员宅基地

文章浏览阅读479次,点赞3次,收藏2次。讲述了一些常见的css中级选择器,例如派生选择器(所有子代)、直接子类选择器(只找儿子)、分组选择器(不同标签,相同样式时)、兄弟选择器(找右边临近的第一个元素)_css 子类怎么设置

平板鸿蒙系统实测,平板电脑已预装鸿蒙系统,我们来看看效果-程序员宅基地

文章浏览阅读1.6k次。就在近日,华为方面也是再次传来了好消息,根据华为心声社区的最新报道中,华为创始人任正非先生也正式对外透露了,华为最新平板电脑产品已经开始预装鸿蒙OS系统,这意味着大家一直非常期待的华为鸿蒙OS系统终于要被预装到华为平板电脑上,消费者很快就能够看到这款平板电脑上市销售了,但华为任正非并未透露具体的产品上市时间,但这也意味着华为在遭到谷歌的“断供”之后,华为鸿蒙OS系统、华为HMS生态系统服务,终于要..._鸿蒙系统平板

随便推点

CentOS 7 下Docker的安装与部署详细步骤(图文详解)_contos7 pageplug docker-程序员宅基地

文章浏览阅读6.2k次,点赞5次,收藏43次。Docker的安装与部署准备工作操作系统要求操作系统环境设置准备工作1、操作系统:VMWare虚拟机 、 CentOS 7VMware虚拟机下载和安装教程CentOS 7安装教程2、CentOS 7 操作系统网络可用。3、官方参考文档纯英文操作系统要求1、安装docker需要在centos7以上版本;2、linux内核版本需要在3.10以上,可通过uname -r 查看系统内核。操作系统环境设置1、关闭防火墙centos7 以后默认用firewalld取代iptables,这两个防_contos7 pageplug docker

linux的tomcat下载,tomcat linux 64位下载-程序员宅基地

文章浏览阅读1.2k次。tomcat 8发布了,这里为大家带来了 linux版本下载,此版本为8.0.32 tomcat linux 64位下载,它是由Apache 所开发的一个核心项目,由于Tomcat 产品的技术先进、性能稳定,而且免费,因此该程序深受Java 爱好者的喜爱,此软件目前成为了比较流行的Web 应用服务器。下面有详细的安装配置教程,大家可以学习一下。官方介绍使用Apache Tomcat 软件了Jav..._tomcat linux64位下载

Laravel 5 系列入门教程(三)【最适合中国人的 Laravel 教程】_laravel layouts 单选框-程序员宅基地

文章浏览阅读852次。本教程示例代码见:https://github.com/johnlui/Learn-Laravel-5 大家在任何地方卡住,最快捷的解决方式就是去看我的示例代码。本篇教程中,我们将利用 Laravel 5 自带的开箱即用的 Auth 系统对我们的后台进行权限验证,并构建出前台页面,对 Pages 进行展示。1. 权限验证后台地址为 http://fuck._laravel layouts 单选框

CentOS7下安装MySQL5.7.29_mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar-程序员宅基地

文章浏览阅读1.3k次。准备工作Linux 命令教程以下有的不懂命令可以在这里查询理解https://www.runoob.com/linux/linux-comm-rpm.html查看CentOS7版本cat /etc/redhat-release卸载mariadb查询所有mariadb套件同时卸载掉rpm -qa|grep mariadbrpm -e --nodeps mariadb-libs..._mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar

nginx的部署和常用命令_pcre-devel-8.43-程序员宅基地

文章浏览阅读200次。nginx的部署前言在部署项目时,用到nginx,很多时候在内网,无法在线安装,这里使用在线,离线两种方式,部署依赖。一、安装说明系统环境:CentOS7.5软件:nginx-1.18.0.tar.gz其他所需软件:gcc-4.8.0.tar.gz、pcre-8.43.tar.gz、zlib-1.2.11.tar.gz、openssl-1.0.2p.tar.gz安装方式:源码编译安装安装位置:/usr/local/nginxroot用户操作安装,否则无法创建默认目录安装包下载地址:ng_pcre-devel-8.43

c语言求最大公约数和最小公倍数_最大公因数和最小公倍数求法之我见-程序员宅基地

文章浏览阅读1.3k次。随着课程改革的不断推进,老师们逐渐认识到,教材仅仅是课程的一种重要载体,而不是课程的全部。任何课程实施,都需要和开发大量的课程资源。下面就和大家谈一谈除了教材资源,怎样用“数学眼光”来搜索教学资源的。众所周知,最大公因数和最小公倍数有着广泛的应用,特别是在分数四则运算中,更是不可缺失。所以求最大公因数和最小公倍数是小学高年级数学教学的重点,也是难点。下面列举两个数的最大公因数和最小公倍数..._用c语言求24和36的最大公倍数