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

0 投票
1 回答
264 浏览

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 框架根本不适合实时音频处理。

0 投票
1 回答
267 浏览

ios - 如何运行具有数据长度的 Apple Accelerate fft 算法,这不是 2 的幂?

我想将一个算法从 Android 移植到用 C 编写的 iOS。对于 Android,我使用 fftw3 库。它能够对任何大小的输入数据运行算法。例如我在调试中看到的大小是 14996。而且它非常有效。当我从这里阅读文档时:https ://developer.apple.com/documentation/accelerate/1449739-vdsp_dft_zrop_createsetup?language= objc 我发现输入长度有一些特殊要求。有没有办法避免这种情况或修改输入数据以满足要求?

0 投票
1 回答
230 浏览

swift - 为什么 vDSP_maxv 找不到向量中的最大值?

vDSP_maxv没有在下面的代码中分配最大值output

我希望最后一行 print 2,但它每次都打印不同的东西,通常是一个非常大或小的数字,比如2.8026e-45

我已经阅读了本教程文档和头文件中的内联文档vDSP_maxv,但我不明白为什么下面的代码没有产生预期的结果。

制作numbersanUnsafePointer而不是 anUnsafeMutablePointer没有用,我尝试过的其他一些事情也没有,所以也许我错过了一些基本的东西。

0 投票
1 回答
181 浏览

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() 会返回一些从一开始就无法使用的东西?

0 投票
1 回答
246 浏览

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 库文档。

0 投票
1 回答
411 浏览

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个问题

  1. 我应该如何转换这个数组?
  2. 有什么共同的理论是怎么做到的吗?
  3. 使用通道时,我应该如何处理 RGB?
0 投票
1 回答
92 浏览

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() 的建议

在此先感谢您的帮助。

0 投票
2 回答
263 浏览

ios - 将浮点数组转换为 UnsafePointer 数组

我有这样创建的浮点数组

这个数组有 256 个元素,实部。所有虚部都为零。

我需要做一个

但是这个 APIanArray需要UnsafePointer<DSPComplex>

我如何转换myArray为这种格式?

0 投票
2 回答
581 浏览

ios - 使用 Accelerate 平均像素颜色

是的,我知道使用CIAreaAverate CIFilter来获取像素的平均颜色。

我正在尝试创建一些替代方案,Accelerate Framework以查看是否可以更快地提供一些东西。

我正在渲染CIImage一个上下文。为此,我有这个CIImage extension...

在这一点上,我已经bitmap包含了交错的 BGRA 字节。

要获得 R、G 和 B 的平均值,我所要做的就是这样:

for正如预期的那样,这个循环非常慢。

我正在考虑使用一些Accelerate功能,比如

但是这个函数需要是一个...bitmap的数组UnsafePointer<Double>

我可以转换bitmap为那个,但这需要一个for循环,这很慢......

有什么方法可以提取那些 R、G 和 B 像素,并使用一些加速的东西来获得它们各自的平均值吗?

0 投票
1 回答
146 浏览

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 的结果全为零,尽管等式的左侧和右侧具有相同的长度值。