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

signal-processing - 加速框架 vDSP、FFT 成帧

我正在尝试使用 Apple 的 vDSP 在录制的音频文件上实现 FFT 计算(假设它是单声道 PCM)。

我在这里进行了研究,发现以下主题非常有用:

例如,我们为 FFT 配置了 frame_size N = 1024 个样本,log2n=10:

代码中的某处:

根据我对 FFT 使用的理解,我现在缺少的是如何获得大型音频文件的完整频谱,让我们假设总共 12800 个样本。


问: 我是否需要将原始数据分成大小为 1024 个样本的帧(~ 12800 / 1024 = 13 帧),然后分别对每个帧执行 FFT,然后以某种方式将 13 个 FFT 结果平均化为结果频谱?如果假设正确,那么如何进行平均?

我真的很感激任何帮助。

0 投票
1 回答
191 浏览

objective-c - 在 MATLAB 文件的 Objective-C 中执行 FFT

对于我正在进行的当前项目,我需要在修改 FFT 以读取实时数据之前,使用 Accelerate Framework 在 MATLAB 中生成的正弦波上测试我在 Objective-C 中实现的 FFT。但是,我对如何将 MATLAB 文件加载到我的 Xcode 项目中,然后用我的 FFT 测试文件有点迷失......有人知道从哪里开始吗?

0 投票
1 回答
1313 浏览

performance - OpenCL 慢——不知道为什么

我通过尝试优化 mpeg4dst 参考音频编码器来自学 OpenCL。我通过在 CPU 上使用矢量指令实现了 3 倍的加速,但我认为 GPU 可能会做得更好。

我专注于计算 OpenCL 中的自相关向量,这是我的第一个改进领域。CPU代码是:

在我的测试文件中,这个函数大约需要 188 毫秒才能完成。

这是我的 OpenCL 方法:

这就是它的名称:

根据 Instruments 的说法,我的 OpenCL 实现似乎需要大约 13 毫秒,大约 54 毫秒的内存复制开销 (gcl_memcpy)。

当我使用更大的测试文件时,2 声道音乐 1 分钟 vs 6 声道 1 秒,而 OpenCL 代码的测量性能似乎相同,CPU 使用率下降到 50% 左右,整个程序需要大约 2 倍的时间来运行。

我在 Instruments 中找不到导致此问题的原因,而且我还没有阅读任何内容表明我应该预期在进出 OpenCL 时会有非常沉重的开销。

0 投票
1 回答
312 浏览

signal-processing - vDSP 怎么了?

在尝试使用 zrvmul、vvsinf 和 vvcosf(在 vForce.h 中定义)之类的函数时,我得到“没有匹配函数”错误。我#包括加速框架,并在构建阶段将其链接起来。此外,我正在使用其他加速功能,如 vDSP_fft_zip 没有问题。

当然,我可以使用 for 循环来解决这个问题。但是任何人都可以为我说明情况吗?有没有办法仍然使用 vForce 功能?如果有怎么办?

0 投票
1 回答
1753 浏览

signal-processing - 用于信号合成的重叠添加

如果这个问题非常基本,我深表歉意。

我正在使用 FFT 将音频信号(目前是纯正弦波)从时域转换到频域,然后返回时域以比较与原始信号的差异。

目前我这样做:
- 采用非重叠帧(例如每帧 1024 个样本)。
- FFT 该帧
- iFFT 频域信息
- 将输出发送到扬声器

编辑(1):
这似乎现在可以工作(参见没有和有窗口的图像,其中输入=棕色,输出=蓝色)。
在此处输入图像描述
在此处输入图像描述
结束编辑 (1)

现在我想执行overlapp-add 方法:
- 采用50% 重叠的帧(样本0-1023、512-1535、1024-2047...)
- 将Hanning 窗口应用于ecah 帧
- FFT
- iFFT
- ?? ? 这是我的问题!!

所以在我的 iFFT 结束时,我有一个 1024 个样本的输出帧。这是否意味着我需要将前 512 个样本发送给扬声器,而其他 512 个样本 (512-1023) 应该保存在缓冲区中以添加到下一帧的前 512 个样本中?是这么简单还是我误解了什么?

谢谢!

0 投票
2 回答
1662 浏览

audio - 音频分析合成中的重叠添加

我编写了一些将音频信号(当前为正弦波)作为输入的代码,并执行以下操作:

  1. n取(1024) 个样本的帧
  2. 应用 FFT
  3. 应用 iFFT
  4. 播放输出

通过这个过程,输出信号与输入信号基本相同。

现在,在第二次尝试中,我做了:

  1. 从输入中获取重叠帧
  2. 应用窗口函数
  3. 快速傅里叶变换
  4. 快速傅里叶变换
  5. 重叠输出帧

在步骤 1 中,如果我使用 2 的幂(4、8、256...)的跳跃大小(跳到下一帧的样本数)来获取重叠帧,则输出声音很平滑并且类似于原始输入声音,但是对于任何其他的跃点大小,声音开始减弱。这发生在输入信号的任何频率上。问题 1. 为什么只有 hop size 为 2^n 时声音才流畅?.

目前我使用汉宁窗。当跳数较大(例如 512)时,输出声音的音量低于跳数较小(例如 64)时的音量。这似乎是一种预期行为,因为小跳数意味着用更多帧重构样本,因此添加了更多信号。问题 2. 有没有办法正确缩放输出信号,使音量类似于原始信号?

谢谢!

0 投票
1 回答
586 浏览

ios - iOS:在 64 位中使用 vDSP 功能

在 iOS 中,我有一个依赖于vDSP_vgathr的函数调用,它是 Apple Accelerate 框架的成员:

我看到了一个与我得到的错误有关的问题EXC_I386_GPFLT,以及 64 位系统和非规范指针。我见过的解决方案(和另一个tgmath.h)建议包括,但是当使用(成功编译)时,它什么也不做,我仍然得到EXC_I386_GPFLT.

我尝试了许多其他潜在的解决方案,包括类型转换各种对象和不同的函数调用。我怎样才能使这个函数调用在 64 位架构下工作?

0 投票
2 回答
287 浏览

ios - 加快对向量中的分量求和

我想通过将四个块中的组件相加来从另一个数组创建一个数组,例如:

我想加快这一进程。我查看了 iOS 中可用的库,例如 vDSP 和 vForce,但没有找到任何适合的库。最接近的候选者是 vDSP_vswsum,但这不是我想要的。有没有人有关于如何加快速度的提示?

0 投票
0 回答
1139 浏览

ios - 使用 Accelerate 框架 (vDSP) 和 Novocaine 的带通滤波器录音

我对信号处理相当陌生,所以请多多包涵。我正在尝试实现一个带通滤波器以应用于从 iPad 获得的录音。录音已使用 ExtFile 函数和 AudioBufferList 转换为 Float32 指针。采样率为 44100Hz。录音长约 9 秒(大约 396900 个样本),包含 2-6kHz 的啁啾声和一些环境噪声。我需要对 2-6kHz 频率范围内的录音进行带通滤波,以便找出啁啾声发生的时间点。我参考了以下资源来创建带通滤波器:

https://github.com/bartolsthoorn/NVDSP/blob/master/NVDSP.mm

https://github.com/bartolsthoorn/NVDSP/blob/master/Filters/NVBandpassFilter.m

我的问题是,我可以简单地将用于记录的浮点值数组传递给上面的带通滤波器吗?我已经尝试过了,但我不确定它是否有效,因为它似乎只是减少了数组中每个值的值。通过录音后我应该看到什么

但是,我看到一些资源说我首先需要使用 FFT 将值从时域转换为频域。我已经尝试使用一些 vDSP 函数来执行以下代码:

但我不明白这个函数返回了什么。如果在将记录传递给过滤器之前确实需要应用 FFT,那么需要从 calculateFFT 函数返回什么然后传递给过滤器?

提前致谢。

0 投票
1 回答
166 浏览

ios - 从 vDSP_conv 返回的奇怪结果

我一直在使用 Accelerate 框架进行一些音频信号处理,并且一直在使用该vDSP_conv函数来执行一些互相关。通常,返回的值是这样的(左列是数组索引,右列是从返回后该索引处的数组值vDSP_conv):

但有时结果看起来像这样,没有明显的原因:

得到这些结果后,我再次运行程序,它们又回到了原始(正确)结果。有没有其他人经历过这种情况或对为什么会发生有任何想法?