问题标签 [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.

0 投票
1 回答
1401 浏览

dft - DFT频率减法

如果 DFT 变换的最大幅度 M = A^2 + B^2 对应于频率 F,(A - 实数,B - DFT 的虚输出,频率为 F),那么执行以下操作是否正确:

为了从原始波数据中消除(减去)频率影响?假设数据是几个具有不同频率的正弦和余弦的总和,并乘以不同的系数。

EDIT1:我可以通过减法实现取消,结果是正确的。上面有一个错误,但可以做到。如果有兴趣,我可以发布这样做的方式。

EDIT2:如果您进行下一次 DFT 变换,您将在 A 和 B 值处获得一个非常小的接近零的值。但是您需要记住,原始数据可以是 4 个频率(正弦和余弦)的总和,但 DFT 变换会为您提供与 DFT 大小除以 2 一样多的值。

0 投票
2 回答
1760 浏览

python - 简单 python 脚本中的 Cooley Tukey 旋转因子

我正在阅读cooley tukey 方法的工作原理,但是以下python 脚本存在一些问题:

twiddles = [math.e**(inv*2j*math.pi*k/N) for k in xrange(M)]+[N] 行有什么作用?看起来像一个数组,但为什么是 +[N]?

那么为什么要访问 twiddles[-1] 值呢?

我想不通

0 投票
2 回答
795 浏览

c++ - CUDA 卷积FFT2D 示例 - 我无法理解

我研究了 Cooley Tukey 算法并理解了它。我得到了 CUDA 卷积FFT2D 示例中的所有内容,直到这些内核:

spProcess2D 调用 -> spProcess2D_kernel 调用了很多 -> spPostprocessC2C、mulAndScale 和 spPreprocessC2C

这是完整的代码: http : //nopaste.info/30c13e44fe.html(convolutionFFT2D.cu,这里是 spProcess2D 函数) http://nopaste.info/78d22afac2.html(convolutionFFT2D.cuh,这里是其他函数)

我已经阅读了所有 nvidia sdk 论文,但我仍然无法弄清楚这些函数的作用(他们使用 twiddles,但那里似乎没有什么像 Cooley Tukey 算法)

如果可以的话,请帮助我,或者至少指出我在哪里解决我的问题

更新:我找到了这个链接:http ://cnx.org/content/m16336/latest/#uid38 也许这些函数正在执行广度优先算法?我仍然不能这么说,但形状似乎一样

0 投票
2 回答
697 浏览

java - 如何将一组离散的数据传输到频域并返回(最好是无损的)

我想获取一个大小约为 70-80k 的字节数组,并将它们从时域转换为频域(可能使用 DFT)。到目前为止,我一直在关注 wiki 并获得了此代码。

据我所知,这可以找到每个频率窗口/箱的幅度。然后我穿过窗户,找到震级最高的那一个。我在该频率上添加了一个标志,以便在重建信号时使用。我检查重建的信号是否与我的原始数据集匹配。如果它没有找到下一个最高频率窗口,并在重建信号时标记它。

这是我用来重建信号的代码,我很确定这是非常错误的(它应该执行 IDFT):

freqUsed 是一个布尔数组,用于标记在重建信号时是否应使用频率窗口。

无论如何,这是出现的问题:

  1. 即使使用了所有频率窗口,也不会重建信号。这可能是由于...
  2. 有时 Math.exp() 的值太高,因此返回无穷大。这使得难以获得准确的计算。
  3. 虽然我一直关注 wiki 作为指南,但很难判断我的数据是否有意义。这使得测试和识别问题变得困难。

脱离问题:

我对此很陌生,并不完全了解所有内容。因此,感谢任何帮助或见解。感谢您花时间阅读所有内容,并提前感谢您提供的任何帮助。任何帮助真的会很好,即使你认为我这样做是最糟糕的可怕方式,我想知道。再次感谢。

-

编辑:

所以我更新了我的代码,如下所示:

对于原始变换和:

为逆变换。虽然我仍然担心它不能正常工作。我生成了一个包含单个正弦波的数组,它甚至无法分解/重建它。关于我缺少什么的任何见解?

0 投票
2 回答
425 浏览

math - 如何将离散信号从时域传输到频域并返回而不会丢失数据?

几个星期以来,我一直在尝试实现一个 DFT,它采用任意字节集并将它们视为信号。然后将它们转换到频域。之后,它将它们转换回来。它最初只是尝试使用一些组件来重建原始信号。当这失败时,我尝试使用所有组件,但仍然失败。

我一直遵循维基百科的方程式作为如何执行此操作的指南,并且我的代码似乎与给出的方程式(在我的脑海中)相匹配:

密度泛函:

身份证:

任何人都可以帮我确定问题所在吗?

我之前问过一个关于同一个项目的问题,但措辞很糟糕,编辑可能会造成更多的混乱,而不是更少。此外,虽然这个问题可能已经得到解答,但我还有更多需要弄清楚。可以在这里找到

0 投票
2 回答
9381 浏览

c# - 离散傅里叶变换

我目前正在尝试编写一些傅立叶变换算法。我从数学定义中描述的简单 DFT 算法开始:

所以我用下面的代码测试了这个算法:

转换工作正常,但前提是 numberValues 是 samplingFrequency 的倍数(在本例中:120、240、360,...)。那是我对 240 个值的结果:

转换效果很好。

如果我试图计算 280 个值,我会得到以下结果:

如果更改计算值的数量,为什么会得到不正确的结果?我不确定我的问题是我的代码有问题还是对 DFT 的数学定义有误解。无论哪种方式,任何人都可以帮助我解决我的问题吗?谢谢。

0 投票
1 回答
3490 浏览

c - OpenCV 上的逆滤波 - 访问 DFT 值和乘以 DFT 矩阵

我正在尝试在频域中执行逆滤波和伪逆滤波。

但是,我在访问 DFT 系数和之后乘以 DFT 矩阵时遇到了麻烦,因为我得到了复数,因此实际上是两个矩阵......

基本上逆滤波执行

F = G/H,

其中 F 是恢复图像,G 是模糊图像,H 是模糊图像的内核。

伪逆需要访问 H 中的值,因为如果该值接近 0,则应将其替换以避免恢复中的问题。为此,我们必须更改 H 以便:

H(u,v) = 1/H(u,v) 如果 H(u,v) > 阈值,否则 = 0

我有一个 kernel1 (h_1),以及图像 imf(已恢复)和 img(模糊)。这是代码:

我在最后一行有一个错误: --- OpenCV Error: Assertion failed (src.depth() == dst.depth() && src.size() == dst.size()) in cvCopy, file /build /buildd/opencv-2.1.0/src/cxcore/cxcopy.cpp,第 466 行

我知道它与大小或深度有关,但我不知道如何控制。无论如何,我试图显示 image_Re1 并且它是空的......

任何人都可以对此有所了解吗?

0 投票
4 回答
1416 浏览

c++ - 有人可以用更好的逻辑编写这段代码吗?

我被这个问题困扰了2天。有人可以帮我解释一下逻辑吗?

我正在开发 C++ 程序以获得良好的算法。我现在正在研究 Danielson-Lanczos 算法来计算序列的 FFT。

看着

资料来源:http ://www.eetimes.com/design/signal-processing-dsp/4017495/A-Simple-and-Efficient-FFT-Implementation-in-C--Part-I

有什么方法可以逻辑地编写代码,使整个for-loop部分减少到只有 4 行代码(甚至更好)?

0 投票
4 回答
1089 浏览

c++ - 为 DFT 生成方波

我正在执行一项任务,即在频率为 500Hz 的方波上以 20kHz 的采样频率执行 200 点 DFT,其幅度在 0 和 20 之间交替。

我正在使用 C++,并且我已经想出了如何编写 DFT 方程,我的问题是我无法使用 for 循环在代码中表示方波。

我真正感到困惑的是,在我的 200 点样本中,这个方波有多少个周期。

谢谢

0 投票
1 回答
695 浏览

opencv - 无法使用 cvMerge、DFT 进行转换

我正在尝试制作一个单通道图像的 dft,并且由于 cvDft 期望复杂的值,我被建议将原始图像与另一个全为 0 的图像合并,因此最后一个将被视为虚部。

我的问题是在使用 cvmerge 函数时出现的,

它给了我下一个错误:无法将 cvMAt 转换为 cvArr

任何人都可以帮助我吗?谢谢!