问题标签 [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.
dft - DFT频率减法
如果 DFT 变换的最大幅度 M = A^2 + B^2 对应于频率 F,(A - 实数,B - DFT 的虚输出,频率为 F),那么执行以下操作是否正确:
为了从原始波数据中消除(减去)频率影响?假设数据是几个具有不同频率的正弦和余弦的总和,并乘以不同的系数。
EDIT1:我可以通过减法实现取消,结果是正确的。上面有一个错误,但可以做到。如果有兴趣,我可以发布这样做的方式。
EDIT2:如果您进行下一次 DFT 变换,您将在 A 和 B 值处获得一个非常小的接近零的值。但是您需要记住,原始数据可以是 4 个频率(正弦和余弦)的总和,但 DFT 变换会为您提供与 DFT 大小除以 2 一样多的值。
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] 值呢?
我想不通
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 也许这些函数正在执行广度优先算法?我仍然不能这么说,但形状似乎一样
java - 如何将一组离散的数据传输到频域并返回(最好是无损的)
我想获取一个大小约为 70-80k 的字节数组,并将它们从时域转换为频域(可能使用 DFT)。到目前为止,我一直在关注 wiki 并获得了此代码。
据我所知,这可以找到每个频率窗口/箱的幅度。然后我穿过窗户,找到震级最高的那一个。我在该频率上添加了一个标志,以便在重建信号时使用。我检查重建的信号是否与我的原始数据集匹配。如果它没有找到下一个最高频率窗口,并在重建信号时标记它。
这是我用来重建信号的代码,我很确定这是非常错误的(它应该执行 IDFT):
freqUsed 是一个布尔数组,用于标记在重建信号时是否应使用频率窗口。
无论如何,这是出现的问题:
- 即使使用了所有频率窗口,也不会重建信号。这可能是由于...
- 有时 Math.exp() 的值太高,因此返回无穷大。这使得难以获得准确的计算。
- 虽然我一直关注 wiki 作为指南,但很难判断我的数据是否有意义。这使得测试和识别问题变得困难。
脱离问题:
我对此很陌生,并不完全了解所有内容。因此,感谢任何帮助或见解。感谢您花时间阅读所有内容,并提前感谢您提供的任何帮助。任何帮助真的会很好,即使你认为我这样做是最糟糕的可怕方式,我想知道。再次感谢。
-
编辑:
所以我更新了我的代码,如下所示:
对于原始变换和:
为逆变换。虽然我仍然担心它不能正常工作。我生成了一个包含单个正弦波的数组,它甚至无法分解/重建它。关于我缺少什么的任何见解?
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 并且它是空的......
任何人都可以对此有所了解吗?
c++ - 有人可以用更好的逻辑编写这段代码吗?
我被这个问题困扰了2天。有人可以帮我解释一下逻辑吗?
我正在开发 C++ 程序以获得良好的算法。我现在正在研究 Danielson-Lanczos 算法来计算序列的 FFT。
看着
有什么方法可以逻辑地编写代码,使整个for-loop
部分减少到只有 4 行代码(甚至更好)?
c++ - 为 DFT 生成方波
我正在执行一项任务,即在频率为 500Hz 的方波上以 20kHz 的采样频率执行 200 点 DFT,其幅度在 0 和 20 之间交替。
我正在使用 C++,并且我已经想出了如何编写 DFT 方程,我的问题是我无法使用 for 循环在代码中表示方波。
我真正感到困惑的是,在我的 200 点样本中,这个方波有多少个周期。
谢谢
opencv - 无法使用 cvMerge、DFT 进行转换
我正在尝试制作一个单通道图像的 dft,并且由于 cvDft 期望复杂的值,我被建议将原始图像与另一个全为 0 的图像合并,因此最后一个将被视为虚部。
我的问题是在使用 cvmerge 函数时出现的,
它给了我下一个错误:无法将 cvMAt 转换为 cvArr
任何人都可以帮助我吗?谢谢!