C++快速傅里叶变换(MATLAB Coder)

背景:电阻抗成像需要采集正弦激励后电极电压信号,双通道同时采集A/D的数据,对数据进行离散傅里叶变换,得到幅值大小,将两个信号幅值做差,即两个电极之间的电压。

方法:在MATLAB中实现快速傅里叶变换非常简单,而集成到嵌入式中则需要移植C++代码,所以在MATLAB编写function函数,经过MATLAB Coder工具箱生成C++代码,使用VS2013测试数据的正确性,最后将其移植到Linux下的Qt中。

  • MATLAB中快速傅里叶变换

  • MATLAB源码:

  • MATLAB测试代码:

  • MATLAB Coder生成C++代码

  • 在MATLAB的主界面APP中搜索MATLAB Coder:

  • 选择要转化的function函数,MATLAB Coder界面:

  • 设置输入参数,即function函数的输入参数的数据类型:

 

  • 1、选择C++语言;2、选择运行的环境;3、选择编译链。

  • 点击生成,也可以先检验测试文件的正确性,我的检测没通过,但不影响生成,只需在生成的C++代码中修改测试用的输入参数。

  • 在function函数的文件夹下生成了一个文件夹:

  • 将生成文件夹中的.cpp和.h文件拷贝到VS中建立的一个空项目中:

  • 包括子目录的examples下主函数:

 

  • Visual studio 2013测试生成代码

  • 在VS中添加现有文件:

  • 在主函数中,可以看出测试数据是错误的,所以自己重写测试代码,即输入参数的一些数据:
  • 添加头文件:其中define是为了能使用宏定义的π。

  • 测试代码:

  • 测试结果:

  • 可以看出结果是正确的,幅值为(1-0.7=0.3)。

 

  • Linux Qt中移植代码

  • 将修改好的文件添加到Qt的源码中,将主函数中的调用函数移植到Qt某个槽函数中,添加头文件:

测试结果,正确。

总结:这样就有了C++的快速傅里叶变换源码,不用担心抄来的源码的效率问题,毕竟MATLAB源码效率应该不会不差吧;缺点是代码可读性为0,如果出了什么bug不好调试修改,只能勉强修改输入输出。

猜你喜欢

转载自blog.csdn.net/qq_32059343/article/details/86381100