问题标签 [dft]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如何使用 cv::findcontours 和 DFT?它会导致调试错误
我正在做的是在预处理图像(通过阈值处理)后找到图像的轮廓。我想获得每个轮廓的离散傅里叶描述符(使用 dft() 函数)我的代码如下,
问题是什么???我找不到它..我认为函数的参数类型(例如 cv::finContours 或 dft )是错误的....
c++ - OpenCV 并使用傅里叶变换 dft()
我正在尝试对两个单独的图像进行逐点乘傅立叶变换,然后转换回普通图像。我对在 OpenCV 中使用傅立叶变换不是很熟悉,但这就是我目前所拥有的。显示输出的最后一行导致“System.Runtime.InteropServices.SEHException”类型的异常,但我不知道如何修复它。我在每个阶段都尝试了各种不同的参数和函数,但似乎都给出了异常或空输出。我究竟做错了什么?感谢你给与我的帮助!
python - numpy的fft结果的幅度要乘以采样周期?
我尝试用一个例子来验证我对 Numpy 的 FFT 的理解:傅里叶变换exp(-pi*t^2)
应该是exp(-pi*f^2)
在直接变换上没有应用缩放时。
但是,我发现要获得这个结果,我需要将 FFT 的结果乘以一个 factor dt
,这是我的函数上两个采样点之间的时间间隔。我不明白为什么。有人可以帮忙吗?
这是一个示例代码:
matlab - DTMF,DFT窗口长度
我们在学校有一项任务是创建一个 DTMF 解码器,但无法理解需要做什么以及如何做。首先,我们需要使用卷积计算信号的能量。我们通过使用窗口长度和输入信号的绝对值来做到这一点:
现在,我们不知道如何获得合适的窗口长度。平滑后的能量用于对信号进行分段,然后使用基向量(?)确定信号中的不同频率。dtmf 脉冲至少有 40 毫秒,间隔至少 40 毫秒。采样频率为 8kHz,我们的信号长度约为 17601 个样本。我们认为通过 fs*0.04 我们可以得到窗口长度。0.04=40ms,但现在平滑的能量信号发生了偏移,因此这些段超出了输入信号的最大样本。
长话短说:我们如何计算“正确”的窗口长度?
提前致谢。
编辑:说明已更新,我们不应该使用卷积。我们应该使用 filter()
matlab - 向量化 5 个嵌套的 FOR 循环
我正在 MATLAB 中编写一个程序,作为我基于 DFT 的项目的一部分。
设N x N
数据矩阵为X
,对应的 DFT 矩阵为Y
,则 DFT 系数可表示为
由于旋转因子 WN 是周期性的,(1)
可以表示为
对于给定的,指数((n1k1 +n2k2)) N = p
由一组 满足。因此,通过对此类数据进行分组并应用 的属性,(n1,n2)
(k1,k2)
WN^(p+N /2) = -(WN^P)
(2)
可以表示为
在哪里
我正在编写一个程序来查找Y(k1,k2,p)
。即我需要从给定的 2D 方阵(即矩阵)创建 2D 矩阵的切片(即,每个切片都是 2D 矩阵的 3D 矩阵X
).. 的维度X
可以高达512.
基于上述方程,我编写了如下代码。我需要对其进行矢量化。
由于有 5 个 FOR 循环,对于 N 的大尺寸,执行时间非常长。因此,请为我提供消除 FOR 循环和矢量化代码的解决方案。我需要使代码以最大速度执行...谢谢再次..
matlab - 图像的功率谱
我已经开始(一个小项目)来计算频域中图像的功率谱。
所以,到目前为止,我所拥有的是以下内容:
到目前为止,它看起来不错;我得到的网格图类似于我在各种学术论文中看到的光谱。
但是,我正在寻找的是这个功率谱与频率的关系图,我不完全确定如何获得这个频率向量。例如,我可以这样做:
但我不相信这是完全正确的,因为这会产生负频率。
如果有人能指出我正确的方向来绘制对数频率与功率谱的关系,我将不胜感激。
signal-processing - 如何在实际输出IFFT中节省一半的计算
实信号的 FFT 具有共轭对称性。该属性可用于节省一半的内存和一半的计算。这个实现非常简单,我已经做到了。
现在我想实现IFFT。这适用于共轭对称信号,并且预期为实信号。由于 IFFT 与具有反转符号旋转因子的 FFT 相同。有没有类似的方法可以节省一半的计算和内存?
opencv - OpenCV DFT_INVERSE 与 Matlab 的 ifft 不同
我尝试使用 opencv 的 dft 函数过滤信号。我尝试这样做的方法是在时域中获取信号:
使用以下方法将其转换为 FOURIER 域:
消除不需要的频率:
将其转换回时域:
为了检查我的结果,我将它们与 Matlab 进行了比较。我采用相同的信号 x,将其转换为 FOURIERx_mfft = fft(x);
结果与我从 opencv 得到的结果相似,除了在 opencv 中我只得到左侧,而在 matlab 中我也得到对称值。在此之后,我在 Matlab 中将值设置为 0,x_mfft(0) and x_mfft(8:32)
现在信号看起来完全相同,除了在 Matlab 中它们是复数形式,而在 opencv 中它们是分开的,实部在一个通道中,虚部在另一个通道中。
问题是,当我使用 matlab 执行逆变换时x_mfilt = ifft(x_mfft)
,结果与我使用 opencv 得到的完全不同。
MATLAB:
cv::dft(x_fft, x_filt, cv::DFT_INVERSE, 0) 之后的 OpenCV;
频道 1:
频道 2:
我错过了什么?结果不应该相似吗?如何检查opencv中的逆变换是否正确完成?
后来的编辑:在解决了几个小时的问题后,我决定绘制 Matlab 和 OpenCV 的结果,令我惊讶的是,它们非常相似。
虚部
实物部分:
所以很明显,这是关于 SCALE 因素的。在将它们逐个元素划分之后,这个因子显然是 32 - 信号的长度。有人可以解释为什么会这样吗?显而易见的解决方案是使用cv::dft(x_fft, x_filt, cv::DFT_INVERSE+cv::DFT_SCALE, 0);
,所以我想这个话题已经得到解答,但我仍然对为什么会这样感兴趣。
audio - 计算 STFT 的赫兹
这个问题主要与这个答案有关:如果@Paul R 有机会看到它,这将是理想的。
我有一个信号,我已经计算了一个 STFT。NFFT 的大小为 256,重叠为 128。这产生了 21 个包含输出的单独块。
因此,我想将其转换为赫兹,以查看信号中每个点的不同赫兹是什么。我使用以下公式计算了幅度:
这会产生以下结果:
我主要对下一部分的工作方式感到困惑。例如,我基本上有一个二维向量,其中包含来自 STFT 的所有块(每个块的大小为 256)。因此,我是否计算块内每个点的幅度,计算幅度的最高数字,然后使用公式freq = i_max * Fs / N
?
如果是这样,它看起来是否类似于以下内容(示例,不是实际数据):
然后,这将为每个 STFT 输出生成幅度矢量。从那里,我可以计算出哪个是最高的(比如说 7),然后我可以计算以下内容:
其中 44100 = 采样率,4 = STFT 块的大小。
然后这会给我每个块的频率。
这是正确的,还是我完全忽略了这一点?
matlab - 带 fft 的点积
根据卷积定理,时域中的卷积是 fft 域中的乘积。使用正确的零填充,它可以工作:
然而,这个定理也应该反过来起作用,时域中的乘积是 fft 域中的卷积。我没有得到这部分:
这给出了 d_bis 的复向量。如何使用频域中的卷积来反转时域中的逐点乘积?