前言
老板让把matlab的程序移植到QT中,程序主要是信号处理方面,像FFT和IFFT、FFTSHIFT这些的函数。下面总结一下遇到的问题。
提示:以下是本篇文章正文内容,下面案例可供参考
一、QT环境搭建
1.
编译器选择msvc2013,32位,安装完成之后需要对环境变量进行配置,要不然会出现找不到工具的情况,而且这个版本的SDK和编译器还需要单独安装,也就是需要安装WDK,msvc2013对应的WDK版本为8.1,找到资源下载就行,对环境变量的配置可以在C盘programfiles中的VS文件夹里找到VC文件夹中的vcvarsall.bat,和VC文件夹下bin中的vcvars32.bat文件,在cmd中运行即可。
2.
QT使用的是5.5.1版本,32位,这个版本下载的时候需要选择编译器的版本,选择与编译器对应的版本和位数,这里选择msvc2013x86版的。编译完成之后还需要对环境变量进行添加,环境变量添加QT安装目录下面msvc下bin文件夹,以及QT下Tools–>QTCreator–>bin文件夹。
3.
QT环境配置好后打开工程,如果已有现成工程只需要对.pro文件进行修改,注意配置中添加的路径,还有就是.lib文件的位数,编译器用32位对应的lib也要用32位。debug和release要用的库区分开。
4. 编译Qwt
对源码进行编译可以使用QT直接进行,更方便,打开源码中的工程直接release就行,将编译好的lib、dll文件等正确添加到路径就行。
另外还可以使用qmake、nmake在命令行下面进行编译。
二、程序移植
1.
将matlab移植到c++,使用armadillo库,虽然慢一点,但是语法更加接近与matlab,除了保留数据精度外,计算结果与matlab一致。配置方法在网上已经有了,不多说。
由于使用的mscv2013并不能很好地支持c++11,所以armadillo需要使用源码版本9.9以前的,否则编译器编译不通过,会提示需要更新的编译器。
2.
有些函数在armadillo中没有,就只能自己编写了,可以查看matlab中的源码进行重构。在程序中,对一个长880的序列进行fftshift报错,提示维度超出计算能力,只能用笨办法进行重写,重写出的结果运行没有问题。
代码如下(示例):
三、一些软件技巧
1. Dependency Walker
用于查看依赖,例如将打包好的exe文件拖放进去可以自动出现使用到的dll文件的相关信息以及位数。
2. dumpbin
cmd下的一个指令,和上面的类似,可以用于查看lib文件的相关信息,例如
dumpbin /headers libfftw3f-3.dll
总结
之前没怎么接触过这些东西,都是蜻蜓点水,代码还是停留在CV大法,老师的操作让我惊讶,还要学习的东西很多,任重道远。