QT+FFTW库 实现傅里叶变换

这篇具有很好参考价值的文章主要介绍了QT+FFTW库 实现傅里叶变换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

傅里叶变换理论知识

DFT(FFT)结果,采样率,信号频谱的理解 - 知乎 (zhihu.com)]
(28条消息) FFT与采样点数的关系原理_CodingAsura的博客-CSDN博客_fft点数和采样点数

概括为:假设采样频率为Fs,采样点数为N,做FFT之后,某一点n(n从1开始)表示的频率为:Fn=(n-1)*Fs/N;该点的模值除以N/2就是对应该频率下的信号的幅度(对于直流信号是除以N),根据麦奎斯特采样定理,只有在采样率高于模拟信号包含频率的最高频率的两倍,我们看到的才是真实的频谱,采样频率如果达不到真实信号最高频率的两倍的话,真实最高频率信号所对应的幅值就会叠加到频率较低的信号上

环境QT5.14.1+Mingw32+FFTW3.3

1.下载FFTW包 ,下载库文件Win运行用要用的dll文件

fftw资源下载:fftw

2.win下lib文件链接用;dll运行用使用Visual Studio的lib.exe工具生成链接用的lib文件

2.1.找到所需lib.exe文件

D:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.34.31933\bin\Hostx64\x86
	..Bin\Hostx64:pc机是64位
	..Bin\Hostx86:pc机是64位
	\Hostx64\x86: 64位机器,要运行的编译环境是64位
	\Hostx64\x86: 64位机器,要运行的编译环境是32位

2.2以管理员打开CMD,进入lib.exe的目录

输入lib有输出正常	([出错参考](https://blog.csdn.net/weixin_39914245/article/details/83689817))
	lib /out:E:\fft\fftw-3.3.5-dll32\libfftw3-3.lib /MACHINE:X64 /DEF:E:\fft\fftw-3.3.5-dll32\libfftw3-3.def
	lib /out:E:\fft\fftw-3.3.5-dll32\libfftw3f-3.lib /MACHINE:X64 /DEF:E:\fft\fftw-3.3.5-dll32\libfftw3f-3.def
	lib /out:E:\fft\fftw-3.3.5-dll32\libfftw3l-3.lib /MACHINE:X64 /DEF:E:\fft\fftw-3.3.5-dll32\libfftw3l-3.def

	lib /out:(LIB文件生成目录) /MACHINE:X64 /DEF:(def文件目录)
	/MACHINE:IX86:32位机器,/MACHINE:X64:64位机器

2.3至此程序链接和运行用的文件均已拥有

3.QT项目配置

3.1将fftw3.h和libfftw3-3.lib,libfftw3l-3.lib,libfftw3f-3.lib(三种精度,也可任选其中之一)
 复制项目目录(.pro文件所在目录)。
3.2.将libfftw3-3.dll,libfftw3l-3.dll,libfftw3f-3.dll文件放到文件构建的目录下
  项目构建目录可在QT左边“项目”中查看为****_MinGW_32bit-Debug
  我的是:E:\QT_Project\My_Model\BuildLocal\Fir
3.3项目的头文件右击添加现有文件:fftw3.h
3.4在pro文件配置编译指令,LIBS += -L$$PWD/lib/ -llibfftw3-3.lib

4.使用

4.1wight.h

		 #include "fftw3.h"

4.2wight.cpp

	    int FFTWN = EEGDATALENGTH*AllNum ; //采集点数目
	    int FFTWNFs = 1000;    //采集频率,1000hZ
	
	     double *in;
	    fftw_complex *out;
	    fftw_plan my_plan;
	   // in = (fftw_complex *)fftw_malloc(sizeof(fftw_complex) * FFTWN);
	    in = (double *)fftw_malloc(sizeof( double) * FFTWN);
	    out = (fftw_complex *)fftw_malloc(sizeof(fftw_complex) * FFTWN);
	
	
	    for (int i = 0; i <FFTWN; i++)
	    {
	        in[i] = EndEEGData[i];
	    }
           my_plan = FFTW3_H::fftw_plan_dft_r2c_1d(FFTWN, in, out, FFTW_ESTIMATE);
	    fftw_execute(my_plan);
	
	
	     QVector<double> data_power;
	     QVector<double> data_power_x;
	     QVector<double> data_freq;
	
	
	    for( int i = 0; i < FFTWN/2+1; i++) 
	    {
	     data_power.append((out[i][0] * out[i][0] + out[i][1] * out[i][1])/(FFTWNFs*FFTWN));
	     data_freq.append((double)FFTWNFs / FFTWN*i);
	    }
	    fftw_destroy_plan(my_plan);
	    fftw_free(in);
	    fftw_free(out);
	
	    WaveInSignal->SetxAxisRange(0, FFTWNFs/2);
	    WaveInSignal->SetyAxisRange(0,10);
	    WaveInSignal->SetData(data_freq, data_power);
        qDebug()<<"输入信号频域图绘制完成";

5.结果

	可以看到13-20Hz信号

原始数据结果:
QT+FFTW库 实现傅里叶变换

放大后::QT+FFTW库 实现傅里叶变换
原始数据滤波后:QT+FFTW库 实现傅里叶变换文章来源地址https://www.toymoban.com/news/detail-414217.html

到了这里,关于QT+FFTW库 实现傅里叶变换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从傅里叶变换,到短时傅里叶变换,再到小波分析(CWT),看这一篇就够了(附MATLAB傻瓜式实现代码)

    本专栏中讲了很多时频域分析的知识,不过似乎还没有讲过时频域分析是怎样引出的。 所以本篇将回归本源,讲一讲从傅里叶变换→短时傅里叶变换→小波分析的过程。 为了让大家更直观得理解算法原理和推导过程,这篇文章将主要使用图片案例。 频谱分析可以告诉我们一

    2024年01月16日
    浏览(35)
  • FPGA:实现快速傅里叶变换(FFT)算法

    第一次使用FPGA实现一个算法,搓手手,于是我拿出一股势在必得的心情打开了FFT的视频教程,看了好几个视频和好些篇博客,于是我迷失在数学公式推导中,在一位前辈的建议下,我开始转换我的思维, 从科研心态转变为先用起来 ,于是我关掉我的推导笔记,找了一篇叫我

    2024年02月03日
    浏览(39)
  • 快速傅里叶变换(FFT)c语言实现

    基本原理在这里就不多讲了,可以看看其他高浏览量的博文,这篇文章针对c语言的实现         我们都知道C语言本身是没有复数运算的,很多DSP、单片机要用到也没有开源库可以使用复数运算,针对FFT在硬件上运行只能手动从底层开始 定义复数类型         这里用最简单

    2023年04月15日
    浏览(38)
  • 【快速傅里叶变换(fft)和逆快速傅里叶变换】生成雷达接收到的经过多普勒频移的脉冲雷达信号(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 本文的

    2024年02月10日
    浏览(36)
  • 基于STM32&FFT(快速傅里叶变换)音频频谱显示功能实现

    + v hezkz17进数字音频系统研究开发交流答疑 一实验效果   二 设计过程 要用C语言实现STM32频谱显示功能,可以按照以下步骤进行操作: 1 确保已经安装好了适当的开发环境和工具链,例如Keil MDK或者GCC工具链。 2 创建一个新的STM32项目,并选择适合的MCU型号。 3 配置GPIO引脚用

    2024年02月12日
    浏览(31)
  • [JavaScript]使用opencv.js实现基于傅里叶变换的频域水印(隐水印)

    PS:查了多方资料,都没有提到用 JavaScript 来实现频域水印的教程,故经过笔者的实践,遂写一篇教程来简单介绍。 通过了解频域水印的相关知识,我理解了频域水印就是先将图片进行傅里叶变换,得到频域图,然后将水印文字加到频域图中,在将频域图转换回去得到加了频

    2024年02月09日
    浏览(70)
  • 傅里叶级数和傅里叶变换之间的关系推理及应用

    傅里叶级数和傅立叶变换是傅里叶分析的两个主要工具,它们之间有密切的关系。 傅里叶级数是将一个周期函数分解为一系列正弦和余弦函数的和。它适用于周期性信号,可以将周期函数表示为一组振幅和相位不同的谐波分量的和。傅里叶级数展示了一个周期函数在不同频率

    2024年02月07日
    浏览(48)
  • java 使用 jtransforms 傅里叶变换库实现删除 wav 歌曲中的人声、提取歌曲旋律功能

    引入 maven 依赖: 原理: 将音频信号进行分帧处理,将每一帧的数据进行傅里叶变换,得到短时傅里叶变换(STFT)。 对于每一帧的频谱,可以通过观察频谱图的特征来确定人声和旋律所在的频率范围。 根据人声和旋律所在的频率范围,可以将频谱图中对应的频率区域置零,

    2024年01月23日
    浏览(35)
  • 傅里叶变换

    在计算机视觉中,有一个经典的变换被广泛使用——傅里叶变换。傅里叶变换是将时间域上的信号转变为频率域上的信号,进而进行图像去噪、图像增强等处理。 什么是时域(Time domain)?从我们出生,我们看到的世界都以时间贯穿,股票的走势、人的身高、汽车的轨迹都会

    2024年02月03日
    浏览(38)
  • 图傅里叶变换

    目录 什么是图信号? 如何理解图信号的”谱“? 图傅里叶变换是什么? 图傅里叶变换中特征值和图信号的总变差有什么关系? 让我们先总结一下,我们想要把图信号  正交分解到一组基  上; 那么怎么得到?可以通过对图的拉普拉斯矩阵 做特征分解得到,即. 于是   

    2024年02月06日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包