问题标签 [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 投票
5 回答
18136 浏览

signal-processing - 用于音高检测的倒谱分析

我正在寻找从声音信号中提取音高。

IRC 上的某个人刚刚向我解释了采用双 FFT 是如何实现这一点的。具体来说:

  1. 采取 FFT
  2. 取绝对值平方的对数(可以通过查找表完成)
  3. 再做一次 FFT
  4. 取绝对值

我正在尝试使用 vDSP

我无法理解我之前怎么没有遇到过这种技术。我做了很多狩猎和提问;几个星期的价值。更重要的是,我不明白为什么我没有想到它。

我正在尝试使用 vDSP 库来实现这一点。它看起来好像具有处理所有这些任务的功能。

但是,我想知道最终结果的准确性。

我以前使用过一种技术,该技术可以搜索单个 FFT 的频率区间以获得局部最大值。当它遇到一个时,它会使用一种巧妙的技术(自上次 FFT 以来的相位变化)来更准确地将实际峰值放置在 bin 内。

我担心我在这里介绍的这种技术会失去这种精度。

我想该技术可以在第二次 FFT 之后使用,以准确地获得基础。但看起来信息在第 2 步中丢失了。

由于这是一个潜在的棘手过程,有经验的人可以看看我在做什么并检查它的完整性吗?

另外,我听说有一种替代技术涉及在相邻的 bin 上拟合二次方。这是否具有可比性的准确性?如果是这样,我会喜欢它,因为它不涉及记住 bin 阶段。

所以,问题:

  • 这种方法有意义吗?可以改进吗?
  • 我有点担心“对数方”组件;似乎有一个 vDSP 函数可以做到这一点:vDSP_vdbcon。但是,没有迹象表明它预先计算了一个日志表——我认为它没有,因为 FFT 函数需要调用一个显式的预先计算函数并将其传递给它。而这个功能没有。
  • 是否存在拾取谐波的危险?
  • 有没有什么巧妙的方法可以让 vDSP 拉出最大值,最大的优先?
  • 谁能指出我对这种技术的一些研究或文献?

  • 主要问题:它是否足够准确?精度可以提高吗?一位专家刚刚告诉我,准确性确实不够。这是行的尽头吗?

圆周率

PS 当我想创建标签时我很生气,但不能。:| 我已经向维护者建议跟踪尝试的标签,但我确定我被忽略了。我们需要 vDSP、加速框架、倒谱分析的标签

0 投票
5 回答
7556 浏览

iphone - 使用 Accelerate Framework 和 vDSP 的 iPhone 图像处理

更新:请参阅下面的附加问题以及更多代码;

我正在尝试编写用于模糊图像的类别。我的出发点是Jeff LaMarche 的示例。虽然这(在其他人建议的修复之后)工作正常,但对于我的要求来说它太慢了一个数量级 - 在 3GS 上,可能需要 3 秒才能做一个像样的模糊,我想把它降到 0.5 以下秒全屏(越快越好)。

他提到 Accelerate 框架是一种性能增强,所以我花了最后一天研究这个,特别是根据 Apple 文档的 vDSP_f3x3

通过使用 3x3 内核执行二维卷积来过滤图像;单精度。

完美 - 我有一个合适的过滤器矩阵,我有一个图像......但这就是我难过的地方。

vDSP_f3x3 假设图像数据是 (float *) 但我的图像来自;

上下文来自 CGBitmapContextCreate 和 kCGImageAlphaPremultipliedFirst,所以我的 srcData 实际上是 ARGB,每个组件有 8 位。

我怀疑我真正需要的是带有浮动组件的上下文,但根据这里的 Quartz 文档,kCGBitMapFloatComponents 仅在 Mac OS 上可用,在 iOS 上不可用:-(

有没有一种使用加速框架将我拥有的整数分量转换为 vDSP_f3x3 需要的浮点分量的快速方法?我的意思是我可以自己做,但是当我这样做时,然后是卷积,然后再转换回来,我怀疑我会让它变得比现在更慢,因为我可以边做边做卷积。

也许我有错误的方法?

有人对我使用 vDSP 在 iphone 上进行了一些图像处理有什么建议吗?我可以找到的文档非常面向参考,并且在涉及此类事情时对新手不太友好。

如果有人有关于真正快速模糊的参考(和高质量,而不是降低分辨率,然后重新缩放我见过的看起来很裤子的东西),那就太棒了!

编辑:

谢谢@Jason。我已经这样做了,它几乎可以工作了,但现在我的问题是,虽然图像确实模糊,但在每次调用时它都会向左移动 1 个像素。它似乎也使图像变成黑白的,但这可能是别的东西。

这段代码中有什么明显不正确的地方吗?我还没有优化它,它有点粗糙,但希望卷积代码足够清晰。

我应该补充一点,如果我注释掉 vDSP_conv 行,并将下面的行更改为;

然后正如预期的那样,我的结果是原始来源的克隆。在颜色上而不是向左移动。这对我来说意味着这是错误的卷积,但我看不出在哪里:-(

想法:实际上考虑到这一点,在我看来,卷积需要知道输入像素是 ARGB 格式,否则卷积会将这些值相乘而不知道它们的含义(即它将多个 R * B 等) . 这可以解释为什么我得到了我认为的黑白结果,而不是转变。同样,我认为可能需要比我这里的幼稚版本更多...

最后的想法:我认为向左移动是过滤器的自然结果,我需要查看图像尺寸并可能将其填充......所以我认为代码实际上工作正常,因为我已经提供了它。

0 投票
1 回答
2128 浏览

iphone - 如何包含 vDSP-Framework (iOS)?

我在包含 vDSP-Framework 时遇到问题。我认为这只是要做的步骤:

但是如果我尝试构建,我会得到一个错误:

我想我没有链接框架。但我该怎么做呢?

0 投票
1 回答
458 浏览

iphone - 是否有计算 Accelerate Framework for iPhone 中点数组的线性回归的函数?

我正在寻找一种最快/最简单的解决方案来计算存储在数组中的一堆双点的回归。
我试图在 Accelerate 框架或教程中找到合适的功能,但没有运气。

有人做过吗?

0 投票
2 回答
433 浏览

iphone - 将 std::complex 与 iPhone 的 vDSP 功能一起使用

我一直在研究一些 vDSP 代码,但遇到了一个烦人的问题。我的代码是跨平台的,因此使用 std::complex 来存储其复杂值。

现在我假设我可以按如下方式设置 FFT:

然后在适当的 vDSP_fft_* 调用中使用 2 的步幅。

然而,这似乎不起作用。我可以通过做一个 vDSP_ztoc 来解决这个问题,但这需要我真的不想闲逛的临时缓冲区。有没有办法直接在交错的复杂数据上使用 vDSP_fft_* 函数?也有人可以解释为什么我不能像上面那样以 2 的步幅做吗?

谢谢

编辑:正如 Bo Persson 所指出的那样, real 和 imag 函数实际上并没有返回引用。

但是,如果我改为执行以下操作,它仍然不起作用

所以我原来的问题仍然存在:(

0 投票
0 回答
455 浏览

c++ - vDSP_ztoc 产生奇怪的结果

我试图弄清楚 vDSP 功能,我得到的结果很奇怪。

这与这个问题有关:

将 std::complex 与 iPhone 的 vDSP 功能一起使用

基本上,当我从 std::complex<float> 的向量开始时​​,我试图理解 vDSP_vdist。现在,我应该能够通过简单地执行以下操作来计算幅度:

但是,当我这样做时,我会看到在矢量中点周围反射的光谱。这很奇怪。

然而,奇怪的是,如果我使用 vDSP_ztoc 后跟 vDSP_vdist,我会得到我期望的结果。所以我写了一些代码来尝试理解出了什么问题。

现在奇怪的是,上面的代码在 idx = 1 时开始失败并一直持续到最后。原因是 dspsc.realp[1] == pIn[0].imag()。就像它没有将其拆分为 2 个不同的缓冲区,而是将 std::complexes 的一半向量直接 memcpy 放入 dspsc.realp。即 2 浮动在 std::complex[0] 然后 2 浮动在 std::complex[1] 等等。dspsc.imagp 大致相同。dspsc.imagp[1] = pIn[1].real()。

这没有任何意义。有人可以解释我到底在哪里无法理解发生了什么吗?

0 投票
1 回答
507 浏览

gcc - blackfin gcc-toolchain 链接错误未定义对“Ret_Add”的引用

以下注意事项:

https://blackfin.uclinux.org/gf/project/uclinux-dist/forum/?_forum_action=ForumMessageBrowse&thread_id=46813&action=ForumBrowse&forum_id=39

我正在将 VDSP 编译器的 FFT 算法转换为裸机应用程序以在核心 B 上运行并在核心 A 上运行 uclinux。我有一个链接错误,我不明白它来自哪里:

调用:'/opt/uClinux/bfin-elf/bin/../bfin-elf/bin/ld.real''-v''-o''test_ad1836_driver''-T''coreb_test_ad1836_driver.lds''--只是符号''../../icc_core/icc''queue.o''ezkit_561.o''heap_2.o''port.o''tasks.o''test_ad1836_driver.o''list.o' 'croutine.o' 'user_isr.o' 'bfin_isr.o' 'app_c.o' 'context_sl_asm.o' 'cycle_count.o' 'CFFT_Rad4_NS_NBRev.o' '-Ttext' '0x3c00000' '-L' '/opt/ uClinux/bfin-elf/bfin-elf/lib''-L''/opt/uClinux/bfin-elf/bfin-elf/lib''-lc' GNU ld 版本 2.17 cycle_count.o:在函数Compute_Cycle_Count': /home/william/Development_new/Music_Recognition/code/uCLinux/uclinux-dist/user/blkfin-apps/icc_utils/example/DSP_imp/CFFT_Rad4_NS_NBRev/corea/cycle_count.asm:22: undefined reference toRet_Add'/home/william/Development_new/Music_Recognition/code/uCLinux/uclinux-dist/user/blkfin-apps/icc_utils/example/DSP_imp/CFFT_Rad4_NS_NBrev/corea/cycle_count.asm:23:未定义的参考Ret_Add' /home/william/Development_new/Music_Recognition/code/uCLinux/uclinux-dist/user/blkfin-apps/icc_utils/example/DSP_imp/CFFT_Rad4_NS_NBRev/corea/cycle_count.asm:27: undefined reference toSave_R7'/home/william/Development_new/Music_Recognition/code/uCLinux/uclinux-dist/user/blkfin-apps/icc_utils/example/DSP_imp/CFFT_Rad4_NS_NBRev/corea/cycle_count.asm:28:未定义对Save_R7' /home/william/Development_new/Music_Recognition/code/uCLinux/uclinux-dist/user/blkfin-apps/icc_utils/example/DSP_imp/CFFT_Rad4_NS_NBRev/corea/cycle_count.asm:44: undefined reference toSave_R7'/home/william 的引用/Development_new/Music_Recognition/code/uCLinux/uclinux-dist/user/blkfin-apps/icc_utils/example/DSP_imp/CFFT_Rad4_NS_NBrev/corea/cycle_count.asm:45:未定义对Save_R7' /home/william/Development_new/Music_Recognition/code/uCLinux/uclinux-dist/user/blkfin-apps/icc_utils/example/DSP_imp/CFFT_Rad4_NS_NBRev/corea/cycle_count.asm:48: undefined reference toRet_Add 的引用'/home/william/Development_new/Music_Recognition/code /uCLinux/uclinux-dist/user/blkfin-apps/icc_utils/example/DSP_imp/CFFT_Rad4_NS_NBRev/corea/cycle_count.asm:49:未定义对“Ret_Add”的引用

代码如下:

.section l1.data;
.对齐4;
.var _Ret_Add =0;
.var _Save_R7 =0;

.section l1.text;
.global _Compute_Cycle_Count;
.对齐 8;
_Compute_Cycle_Count:P0.L = _Ret_Add;
P0.H = _Ret_Add;
R3 = RETS;
[P0] = R3;

...........

谢谢

威廉

0 投票
1 回答
829 浏览

transform - vDSP 和离散余弦变换

我是 FFT、DCT 等的新手。最近,我正在查看 Apple 提供的 vDSP 库的文档,但找不到 DCT 实现。我想知道是否有人知道使用 vDSP 中提供的 FFT 函数之一计算 DCT 的方法?

一点上下文。我正在根据我一直在阅读的图形纸构建图像处理实现。他们提到在执行一些图像采样后使用 DCT。

如果可能的话,我真的很想利用 vDSP 的速度。

0 投票
2 回答
745 浏览

ios - 使用 vecLib/vDSP 创建带包络的正弦音发生器

我想用 Accelerate 框架创建一个正弦音发生器。我希望我的发生器具有启动/释放设置(即幅度包络)。

我了解如何创建一个充满正弦值的向量。我不知道如何将幅度包络应用于我的矢量数据。

我知道我可以使用 vDSP_vgen 创建一个斜坡向量来创建一个线性体积包络向量,并将我的正弦向量乘以我的包络向量。不过,这似乎很浪费,因为我正在处理许多数据点并创建一个中间向量来存储幅度包络在我的环境中非常浪费内存。

使用 Accelerate 框架处理幅度包络的最佳方法是什么?

0 投票
2 回答
2435 浏览

ios - Accelerate 的 vImage 与 vDSP

我正在尝试使用 iOS 上的 Accelerate 框架来绕过 iOS 上的 Core Image 不支持自定义过滤器/内核的事实。我正在开发一个边缘检测滤波器,使用两个卷积和一个Sobel 内核,但是从一个简单的高斯模糊开始来掌握它的窍门。我知道 vImage 适合作为矩阵进行图像处理,而 vDSP 专注于使用傅里叶变换处理数字信号。但是虽然我开始使用 vImage 函数(vImageConvolve_XXXX 等),但我听到很多人在讨论使用 vDSP 的函数(vDSP_conv、vDSP_imgfir 等)来做卷积之类的事情。所以这让我想到了手头的问题:我什么时候应该使用一个而不是另一个?它们在卷积操作方面有什么区别?我到处寻找,但找不到明确的答案。有人可以阐明它,或者指出我正确的方向吗?

谢谢!