问题标签 [vdsp]
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.
fft - 在苛刻的场景下加速 vDSP FFT 导致 NaN
我正在将 vDSP 框架用于基于 FFT 计算的实时音频应用程序。
在尝试找出算法产生错误结果的原因后遇到很多问题,我在官方 vDSP FFT 帮助代码中发现了以下评论(DemonstrateFFT.c,第 242、416、548 行)
为了重现错误,只需注释第 247 行(信号不为零)并在第 273 行添加类似于以下行的内容(就在 vDSP_fft_zrip 方法之后)
有趣的是,减少 N(即增加每个时间单位的 FFT 数量)会使 zrip 算法之前失败,这是有道理的,因为评论建议执行重复 FFT。
使用 vDSP_fft_zrop 算法也可以观察到这种行为。
我真的很想知道按照评论中的建议执行“零数据”的 FFT 有什么意义。要么我遗漏了一些重要的东西,要么肯定 vDSP 框架根本不适合实时音频处理。
ios - 如何运行具有数据长度的 Apple Accelerate fft 算法,这不是 2 的幂?
我想将一个算法从 Android 移植到用 C 编写的 iOS。对于 Android,我使用 fftw3 库。它能够对任何大小的输入数据运行算法。例如我在调试中看到的大小是 14996。而且它非常有效。当我从这里阅读文档时:https ://developer.apple.com/documentation/accelerate/1449739-vdsp_dft_zrop_createsetup?language= objc 我发现输入长度有一些特殊要求。有没有办法避免这种情况或修改输入数据以满足要求?
swift - 不安全可变指针vDSP_fft_zip 返回的立即被覆盖
在 Swift 4 中,我正在创建一个 DSPSplitComplex 以在 vDSP_fft_zip() 中使用,但下次我创建另一个 DSPSplitComplex 时它会立即被覆盖。
(DSPSplitComplex结构有2个UnsafeMutablePointer<Float>
)
我现在可以在调试器中看到 UnsafeMutablePointer 的splitComplex2.realp
地址与 相同splitComplex1.realp
,因此我对 splitComplex2 所做的任何事情都会覆盖 splitComplex1
我猜线索可能在标题“不安全”中,但如果它实际上不可用,那么存储返回的 DSPSplitComplex 内容的正确策略是什么?
我想从它们创建新的 [Float] 数组是制作永久副本的一种方式
...但似乎,尽管阅读了 Swift 文档,但我仍然误解了 UnsafeMutablePointer 的观点,为什么 vDSP_fft_zip() 会返回一些从一开始就无法使用的东西?
ios - 加速框架 - vDSP_zvmags - Swift 4.2
在 Swift 4.0 Xcode 9.4.1 中使用 vDSP_zvmags 函数并传递一个 inout 浮点数组变量是有效的,但是在 Swift 4.2 Xcode 10.1 中抱怨当期望浮点类型时无法传递数组参数。
错误信息:
&self.magnitudes!红色下划线。
有人能解释一下为什么它在 Swift 4.0 中是可以接受的,而在 Swift 4.2 中是不可接受的吗?两个函数之间的函数似乎没有变化,我查看了 Apple 的文档并查看了 vDSP 库文档。
swift - 我应该如何从图像数据中为快速傅里叶变换(fft,swift)创建复数?
我有灰度数组,例如[0.0, 0.0, 0.0, 255.0, 255.0, 255.0, 130.0, 130.0, 130.0]
3x3 维,我需要为 fft 函数创建复数数组。我应该如何转换这个数组?
我使用的是 swift 4,它适用于 iOS,但我认为没关系。并且还使用 Apple 的 Accelerate 框架
所以有3个问题
- 我应该如何转换这个数组?
- 有什么共同的理论是怎么做到的吗?
- 使用通道时,我应该如何处理 RGB?
vectorization - 我怎样才能使这个功能和 vDSP 版本一样快?
我编写了下面的函数,它使用 vDSP 函数调用来计算某个结果。我认为如果我使用 128 位 vFloat 数据类型重写它以避免 vDSP 函数调用,它会更快。但是我的 vFloat 代码仍然比 vDSP 版本慢 2-3 倍。
我主要针对 iOS,但最好是代码在 Mac OS 上也能正常运行。
我在长度为 256 的数组上测量这些函数的速度,这是我的应用程序的典型数组长度。我想知道如何让这个功能尽可能快地运行,因为我有很多其他人喜欢它,我希望一旦我弄清楚如何优化这个功能,我可以对所有其他人使用相同的原则。
这是 vDSP 版本,在 Mac OS 上启用积极优化后速度提高 50%,或者在不积极的编译器设置下速度提高 2-3 倍:
这是我的 vFloat 版本,我认为它会更快,因为它避免了所有函数调用,但对于我的应用程序的标准向量长度 256,它并不更快:
我希望让 asymptoticLimitTest3() 比 asymptoticLimitTest2() 运行得更快。我很想听听任何可以加快 asymptoticLimitTest3() 的建议
在此先感谢您的帮助。
ios - 将浮点数组转换为 UnsafePointer 数组
我有这样创建的浮点数组
这个数组有 256 个元素,实部。所有虚部都为零。
我需要做一个
但是这个 APIanArray
需要UnsafePointer<DSPComplex>
我如何转换myArray
为这种格式?
ios - 使用 Accelerate 平均像素颜色
是的,我知道使用CIAreaAverate
CIFilter
来获取像素的平均颜色。
我正在尝试创建一些替代方案,Accelerate Framework
以查看是否可以更快地提供一些东西。
我正在渲染CIImage
一个上下文。为此,我有这个CIImage extension
...
在这一点上,我已经bitmap
包含了交错的 BGRA 字节。
要获得 R、G 和 B 的平均值,我所要做的就是这样:
但for
正如预期的那样,这个循环非常慢。
我正在考虑使用一些Accelerate
功能,比如
但是这个函数需要是一个...bitmap
的数组UnsafePointer<Double>
我可以转换bitmap
为那个,但这需要一个for
循环,这很慢......
有什么方法可以提取那些 R、G 和 B 像素,并使用一些加速的东西来获得它们各自的平均值吗?
swift - vDSP_zrvmul 不返回任何结果(或全为零)
根据其他用户的评论,我整理了我的代码并对其进行了压缩以使其可读。我有一个 complexFloatArray 类,用于存储复杂向量的数组
然后我在这个类的扩展中定义了一些函数。一个是:
这个想法是当在 complexFloatArray 的实例上调用时,它会创建一个 DSPSplitComplex 指针以用于 Accelerate 框架。
最后,我有一个加速函数,我想使用 (vDSP_zrvmul) 将我的复数向量乘以实数向量。
我使用以下方法调用该函数:
其中 sine 是一个 complexFloatArray,而 gauss 是一个 FloatArray,两者的长度相等以创建一个 morlet 小波。然而,结果是一个用零填充的 complexFloatArray。
调试时,我可以在 floatMultiply 函数中的任何点放置断点,并确认 self 和 other(正弦和高斯)都充满了 vales。所以它在 vDSP 调用中的某个地方没有返回正确的结果。
为了完整性,complexFloatArray.stride = 1(该值在 complexFloatArray 类中声明)。
'zeros' 是 complexFloatArray 中的一个函数,用于填充具有一定长度的零的数组。(数组(重复:0,计数:N)
有什么建议为什么我在这个电话的结果中得到零?
我现在包含了完整的代码,而不是提供不完整图片的片段。
ComplexFloatArray 类的完整代码如下:
我的 CWT 类的完整代码如下:
最后在我的 ViewController 类中,我有以下内容:
如果我对此进行调试并暂停 makeMorlet 函数,则 FloatMultiply 的结果全为零,尽管等式的左侧和右侧具有相同的长度值。