ifft java_OpenCV DFT_INVERSE与Matlab的ifft不同

article/2025/8/28 1:07:47

我尝试使用opencv的dft函数过滤信号 . 我试图这样做的方式是在时域中获取信号:

x = [0.0201920000000000 -0.0514940000000000 0.0222140000000000 0.0142460000000000 -0.00313500000000000 0.00270600000000000 0.0111770000000000 0.0233470000000000 -0.00162700000000000 -0.0306280000000000 0.0239410000000000 -0.0225840000000000 0.0281410000000000 0.0265510000000000 -0.0272180000000000 0.0223850000000000 -0.0366850000000000 0.000515000000000000 0.0213440000000000 -0.0107180000000000 -0.0222150000000000 -0.0888300000000000 -0.178814000000000 -0.0279280000000000 -0.144982000000000 -0.199606000000000 -0.225617000000000 -0.188347000000000 0.00196200000000000 0.0830530000000000 0.0716730000000000 0.0723950000000000]

使用以下方法将其转换为FOURIER域:

cv::dft(x, x_fft, cv::DFT_COMPLEX_OUTPUT, 0);

消除不需要的频率:

for(int k=0; k<32;k++){

if(k==0 || k>6 )

{

x_fft.ptr(0)[2*k+0]=0;

x_fft.ptr(0)[2*k+1]=0;

}

}

将其转换回时域:

cv::dft(x_fft, x_filt, cv::DFT_INVERSE, 0);

为了检查我的结果,我将它们与Matlab进行了比较 . 我使用相同的信号x,使用 x_mfft = fft(x); 将其转换为FOURIER . 结果类似于我从opencv得到的结果,除了在opencv中我只得到左侧,而在matlab中我也得到了对称值 . 在此之后,我在Matlab中将值设置为 x_mfft(0) and x_mfft(8:32) ,现在信号看起来完全相同,除了在Matlab中它们是复杂形式的事实,而在opencv中它们是分开的,真实部分在一个通道中,虚部在另一个通道中 .

The problem 是当我使用 x_mfilt = ifft(x_mfft) 在matlab中执行逆变换时,结果与使用opencv时的结果完全不同 . Matlab :

0.0126024108604191 + 0.0100628178150509i 0.00278762121814893 - 0.00615997579216921i 0.0116716145588075 - 0.0150834711251450i 0.0204808089882897 - 0.00937680194210788i 0.0187164132302469 - 0.000843687942567208i 0.0132322795522116 - 0.000108642129381095i 0.0140282455278201 - 0.00325620843335947i 0.0190436542174946 - 0.000556561558544529i 0.0182379867325824 + 0.00764390022568001i 0.00964801276734883 + 0.0107158342431018i 0.00405220362962359 + 0.00339496875258604i 0.0108096973356501 - 0.00476499376334313i 0.0236507440224628 - 0.000415067678294738i 0.0266197220512826 + 0.0154626911663024i 0.0142805873081583 + 0.0267004219364679i 0.000314527358302778 + 0.0215255889620223i 0.00173512964620177 + 0.00865151513638104i 0.0169666351363477 + 0.00836162056544561i 0.0255915540012784 + 0.0277878383595920i 0.0118710562486680 + 0.0506446948330055i -0.0160165379892836 + 0.0553846122152651i -0.0354343989166415 + 0.0406080858067314i -0.0370261047451452 + 0.0261077990289579i -0.0365120038155127 + 0.0268311542287801i -0.0541841640123775 + 0.0312446266697320i -0.0854132555297956 + 0.0125342802025550i -0.0989182320365535 - 0.0377079727602073i -0.0686133217915410 - 0.0925138855355046i -0.00474198249025186 - 0.111728716441247i 0.0515933837210975 - 0.0814138940625859i 0.0663201317560107 - 0.0279433757588921i 0.0426055814586485 + 0.00821080477569232i

OpenCV after cv::dft(x_fft, x_filt, cv::DFT_INVERSE, 0);

Channels 1:

0.322008 -0.197121 -0.482671 -0.300055 -0.026996 -0.003475 -0.104199 -0.017810 0.244606 0.342909 0.108642 -0.152477 -0.013281 0.494806 0.854412 0.688818 0.276848 0.267571 0.889207 1.620622 1.772298 1.299452 0.835450 0.858602 0.999833 0.401098 -1.206658 -2.960446 -3.575316 -2.605239 -0.894184 0.262747

Channels 2:

0.403275 0.089205 0.373494 0.655387 0.598925 0.423432 0.448903 0.609397 0.583616 0.308737 0.129670 0.345907 0.756820 0.851827 0.456976 0.010063 0.055522 0.542928 0.818924 0.379870 -0.512527 -1.133893 -1.184826 -1.168379 -1.733893 -2.733226 -3.165383 -2.195622 -0.151738 1.650990 2.122242 1.363375

我错过了什么?结果不应该相似吗?如何检查opencv中的逆变换是否正确完成?

后来编辑:在经历了几个小时的问题挣扎之后,我决定用Matlab和OpenCV绘制结果,令我惊讶的是他们非常相似 .

虚部

9b7b793a-0625-4c0d-9b86-872f14857c34.png

实物零件:

506a5d53-1f6f-4f0a-ba96-67e8f71b194c.png

所以很明显这是关于SCALE因素的 . 在逐个元素地将它们分开之后,这个因子显然是32 - 信号的长度 . 有人能解释为什么会这样吗?显而易见的解决方案是使用 cv::dft(x_fft, x_filt, cv::DFT_INVERSE+cv::DFT_SCALE, 0); 所以我想这个主题得到了解答,但我仍然对这种方式感兴趣 .


http://chatgpt.dhexx.cn/article/5THQDTO2.shtml

相关文章

4.8 IFFT/FFT

4.8.1 IFFT/FFT原理 1. IFFT、FFT在OFDM系统中的应用 2、IFFT/FFT原理 3、DIT的基2FFT算法 4、DIF的基2FFT运算 5、基于的频率抽选FFT算法 4.8.2 基于 DIF FFT的硬件 结构 1、各级的蝶形运算硬件实现 2、transfer12、 transfer34、transfer56硬件实现 3、transfer23、 transfe…

Python实现FFT及IFFT

运行环境及编译工具 WindowsVS Code 编程语言及库版本 库版本Python3.7.0copy无numpy1.19.2opencv3.4.2PIL8.1.0matplotlib3.4.3 可执行文件 HW_2.pyHW_2.ipynb在HW_2.ipynb中执行&#xff0c;详细程序信息在HW_2.py中 问题 1 通过计算一维傅里叶变换实现图像二维快速傅里…

matlab FFT 和IFFT

代码&#xff1a; fs100;N128; n0:N-1;tn/fs; xsin(2*pi*40*t)sin(2*pi*15*t); subplot(221);plot(n,x,b); xlabel(时间/s);ylabel(x);title(原始信号); grid on;yfft(x,N); magabs(y); fn*fs/N; subplot(222);plot(f(1:N/2),mag(1:N/2)*2/N,b); xlabel(频率/Hz);ylabel(振幅)…

基于vivado实现FFT/IFFT

文章目录 前言一、基本过程二、vivado配置1.新建工程2.调用DDS的IP核2.调用FFT的IP核 三、编写Verilog程序1.顶层文件fft.v2.仿真文件fft_tb.v 四、运行仿真1. 运行仿真设置2. 仿真波形设置3. 结果分析 前言 使用vivado2018.3实现FFT&#xff0f;IFFT&#xff0c;过程比较详细…

python fft ifft

文章目录 条件代码实例 条件 任何一个满足狄利克雷条件的函数都可以通过傅里叶基数展开。 numpy和scipy中都有fft变换&#xff0c;且效果都是一样的。 代码 import numpy as np from scipy.fftpack import fft,ifft import matplotlib.pyplot as plt from matplotlib.pylab …

FFT专题:IFFT后信号如何重建

ifft(outFFTData, g_fft_temp, inFFTData, g_twiddle_ifft, twiddle_stride, F_WLEN);//思考ifft输出的复数结果怎么给到硬件输出 之前一直关注FFT后信号奔赴到频域处理,那么频域处理完后,怎么重建信号呢? 给出一段FFT和IFFT函数源码 int nFrameRunCount 0;#pragma section…

数字信号处理基础(二):FFT和IFFT的使用以及详细分析代码书写思路

目录 1. fft和ifft的原理1.1 fft1.2 ifft 2. 书写代码思路3. 完整代码4. 结果图 1. fft和ifft的原理 1.1 fft fft是快速傅里叶变换&#xff0c;是MATLAB中计算信号频谱的函数&#xff0c;使用方法是fft(x)&#xff0c;直接对信号x进行fft计算。 由于fft函数计算信号的频谱是0…

信号处理中的反傅里叶变换(IFFT)原理

信号处理中&#xff0c;经常需要将信号转换到频域进行分析&#xff0c;有时候还会从频域转回时域&#xff0c;用到FFT和IFFT函数。 FFT变换是将信号从时域转换到频域&#xff0c;在时域看起来复杂的信号转换到频域看起来就方便容易了很多。但有时候也需要将频域信号转换到时域…

adb下载、安装、环境配置

一&#xff1a;adb安装 adb下载链接&#xff1a;https://pan.baidu.com/s/1Vd6KyZ6vT2Qtmhazwre4OQ 提取码&#xff1a;3dx1 安装&#xff1a; 1.双击adb.exe文件&#xff0c;并运行。 2.添加环境变量&#xff1a; 右击计算机–属性—高级系统设置—高级—环境变量—新建&…

windows下载安装adb(极其简单)

单独安装adb&#xff0c;不安装sdk 下载adb Google很好的心&#xff0c;直接放出ADB的档案供人下载。下档路径如下&#xff1a; Windows版本&#xff1a;https://dl.google.com/android/repository/platform-tools-latest-windows.zip Mac版本&#xff1a;https://dl.google…

ADB-adb命令安装app

下载adb 安装adb 将名称中含有adb的文件&#xff0c;和fastboot.exe复制到 c:/windows/system32目录将名称中含有adb的所有文件复制到 c:/windows/system目录将adb.exe和AdbWinApi.dll复制到c:/windows/SysWoW64目录 有线安装apk 连接上数据线&#xff0c;然后把手机开发者模…

adb详细教程(一)-下载安装与环境变量配置

对于Android开发来说&#xff0c;adb是再熟悉不过的调试工具 但其实对于移动端的测试来说&#xff0c;adb也是一个十分重要的、能够提高测试工作效率的工具。 文章目录 一、介绍二、下载地址三、安装四、配置环境变量 一、介绍 全称 adb全称全称为Android Debug Bridge&#x…

mac下载安装adb环境

目录 方法一1、下载安装包2、下载完成后进行解压&#xff0c;目录路径注意不得包含中文3、配置环境变量4、验证安装是否成功 方法二1、安装homebrew2、安装adb3、运行adb 方法一 1、下载安装包 安装包下载地址 &#xff1a;https://developer.android.com/studio/releases/pl…

adb工具下载安装

一、adb环境配置 adb即Android Debug Bridge&#xff0c;就是可以通过窗口命令&#xff0c;使在pc端可以调试安卓移动端的一个工具包 我这里是默认电脑已经安装SDK的&#xff0c;如果没有也没关系&#xff0c;直接网上下载一个adb工具包一样的https://developer.android.goo…

adb环境配置

adb环境配置 1.下载工具包 工具包&#xff1a;platform-tools_r30.0.4-windows.zip 获取途径1&#xff1a;链接: https://pan.baidu.com/s/17BiARFlgsQa2wDETmoJIvQ?pwddsd2 提取码: dsd2 获取途径2&#xff1a;https://developer.android.google.cn/studio/releases/plat…

android adb驱动官方下载,adb驱动下载

这里给你简单的介绍一下adb驱动:adb驱动就是电脑与android设备的通信的客户端驱动程序。使用它可以直接操作管理android模拟器或者真实的andriod设备。 adb驱动百科介绍: Android设备(如手机)连接PC时所需要的驱动程序,一般Android设备连接WinXP是无需安装驱动的。 adb的全称…

windows ——adb下载与安装

一、adb下载 链接&#xff1a;https://pan.baidu.com/s/1D3eOkHsuAnZd6WoFEVC7xQ 提取码&#xff1a;sc94 二、adb安装 双击 adb-setup-1.3.exe 安装 可以查看此安装教程[转载]&#xff1a;http://m.mz6.net/detail/4506-13.html 三、adb安装成功验证 键盘快捷键&#xff1a;Wi…

adb下载安装教程(已安装Android studio)

adb下载安装教程&#xff08;已安装Android studio&#xff09; ①找到adb.exe的绝对路径如下&#xff1a; ②将绝对路径放入环境变量path中&#xff08;绝对路径不带入adb.exe&#xff09; 右击“此电脑”>“属性”>”高级系统设置“>”环境变量“>”path“ 双…

ADB下载及常用命令

ADB&#xff0c;即 Android Debug Bridge&#xff0c;它是 Android 开发/测试人员不可替代的强大工具 文章目录 预先准备adb的平台工具软件包下载配置环境变量 连接设备确认连接状态\查询已连设备USB 连接无线连接&#xff08;Android11 及以上&#xff09; 应用管理查看应用列…

ADB 下载地址

adbshell 点击ADBkit下载