标签: accelerate-framework

在iPhone上进行FFT以忽略背景噪音并找到较低的音高

我已经为iPhone 实施了Demetri的Pitch Detector项目,并遇到了两个问题.1)任何类型的背景噪声发送频率读取香蕉和2)较低频率的声音没有正确调整.我试着调整我的吉他,而更高的琴弦工作 - 调谐器无法正确辨别低音.

音高检测代码位于RIOInterface.mm中,就像这样......

// get the data
AudioUnitRender(...);

// convert int16 to float
Convert(...);

// divide the signal into even-odd configuration
vDSP_ctoz((COMPLEX*)outputBuffer, 2, &A, 1, nOver2);

// apply the fft
vDSP_fft_zrip(fftSetup, &A, stride, log2n, FFT_FORWARD);

// convert split real form to split vector
vDSP_ztoc(&A, 1, (COMPLEX *)outputBuffer, 2, nOver2);
Run Code Online (Sandbox Code Playgroud)

然后Demetri继续确定"主导"频率如下:

float dominantFrequency = 0;
int bin = -1;
for (int i=0; i<n; i+=2) {
    float curFreq = MagnitudeSquared(outputBuffer[i], outputBuffer[i+1]);
    if (curFreq > dominantFrequency) {
        dominantFrequency …
Run Code Online (Sandbox Code Playgroud)

iphone signal-processing fft pitch-tracking accelerate-framework

7
推荐指数
1
解决办法
5747
查看次数

峰值均衡器的IIR系数,如何将它们传递给vDSP_deq22?

我有这6个峰值均衡系数:

b0 = 1 + (? ? A)
b1 = ?2??C
b2 = 1 - (? ? A)
a0 = 1 + (? / A)
a1 = ?2 ? ?C
a2 = 1 ? (? / A)
Run Code Online (Sandbox Code Playgroud)

有了这些中间变量:

?c = 2 ? ? ? fc / fs
?S = sin(?c)
?C = cos(?c)
A = sqrt(10^(G/20))
? = ?S / (2Q)
Run Code Online (Sandbox Code Playgroud)

vDSP_deq22()应该通过"5个单精度输入,滤波器系数" 的状态记录,但我有6个系数!另外,我以什么顺序将它们传递给vDSP_deq22()

更新(17/05):我建议大家使用我在github上发布的DSP类:https://github.com/bartolsthoorn/NVDSP它可能会为你节省很多工作.

c macos signal-processing core-audio accelerate-framework

7
推荐指数
1
解决办法
1192
查看次数

使用Accelerate Framework进行iOS的FFT间距检测?

我已经阅读了一段时间的FFT和音高检测,但是我在拼凑它时遇到了麻烦.

我已经知道Accelerate框架可能是最好的方法,我已经阅读了apple的示例代码,看看如何将它用于FFT.如果我想实时运行音调检测,那么FFT的输入数据是什么?我只是从麦克风传入音频流吗?我该怎么做?

另外,在我得到FFT输出后,如何从中获得频率?我到处读书,找不到任何例子或解释?

谢谢你的帮助.

signal-processing fft objective-c ios accelerate-framework

7
推荐指数
1
解决办法
9679
查看次数

使用Apple Accelerate Framework中的vDSP_conv执行自相关

我需要执行数组(向量)的自相关,但我找不到正确的方法.我相信我需要Accelerate Framework中的方法"vDSP_conv",但我无法按照如何成功设置它.最让我失望的是需要2个输入.也许我有错误的功能,但我找不到一个在单个矢量上运行的功能.

文档可以在这里找到

从网站复制

vDSP_conv

对两个向量执行相关或卷积; 单精度.

void vDSP_conv(const float __vDSP_signal [],vDSP_Stride __vDSP_signalStride,const float __vDSP_filter [],vDSP_Stride __vDSP_strideFilter,float __vDSP_result [],vDSP_Stride __vDSP_strideResult,vDSP_Length __vDSP_lenResult,vDSP_Length __vDSP_lenFilter);

参数

__vDSP_signal

Input vector A. The length of this vector must be at least __vDSP_lenResult + __vDSP_lenFilter - 1.
Run Code Online (Sandbox Code Playgroud)

__vDSP_signalStride

The stride through __vDSP_signal.
Run Code Online (Sandbox Code Playgroud)

__vDSP_filter

Input vector B.
Run Code Online (Sandbox Code Playgroud)

__vDSP_strideFilter

The stride through __vDSP_filter.
Run Code Online (Sandbox Code Playgroud)

__vDSP_result

Output vector C.
Run Code Online (Sandbox Code Playgroud)

__vDSP_strideResult

The stride through __vDSP_result.
Run Code Online (Sandbox Code Playgroud)

__vDSP_lenResult

The length of __vDSP_result.
Run Code Online (Sandbox Code Playgroud)

__vDSP_lenFilter

The length of __vDSP_filter.
Run Code Online (Sandbox Code Playgroud)

举个例子,假设你有一个数组float x = …

c iphone accelerate-framework cross-correlation

7
推荐指数
1
解决办法
3449
查看次数

在iOS上如何快速将RGB24转换为BGR24?

我使用vImageConvert_RGB888toPlanar8vImageConvert_Planar8toRGB888来自Accelerate.framework将RGB24转换为BGR24,但是当需要转换的数据非常大时,例如3M或4M,需要花费的时间大约是10ms.所以有人知道一些足够快的想法吗?.我的代码如下:

- (void)transformRGBToBGR:(const UInt8 *)pict{
rgb.data = (void *)pict;

vImage_Error error = vImageConvert_RGB888toPlanar8(&rgb,&red,&green,&blue,kvImageNoFlags);
if (error != kvImageNoError) {
    NSLog(@"vImageConvert_RGB888toARGB8888 error");
}

error = vImageConvert_Planar8toRGB888(&blue,&green,&red,&bgr,kvImageNoFlags);
if (error != kvImageNoError) {
    NSLog(@"vImagePermuteChannels_ARGB8888 error");
}

free((void *)pict);
}
Run Code Online (Sandbox Code Playgroud)

rgb assembly neon ios accelerate-framework

7
推荐指数
1
解决办法
1425
查看次数

如何在Objective C中对齐内存?

Apple建议您在使用Accelerate Framework时将数据对齐16字节.你在实践中如何做到这一点?

如果我有阵列int[10000];,有pragma吗?如何将其与16字节对齐?

objective-c ios accelerate-framework

7
推荐指数
1
解决办法
907
查看次数

线性回归 - 加速Swift中的框架

我在Stackoverflow的第一个问题...希望我的问题足够具体.

我在Swift中有一个数组,在某些日期有测量值.喜欢:

var myArray:[(day: Int, mW: Double)] = []
myArray.append(day:0, mW: 31.98)
myArray.append(day:1, mW: 31.89)
myArray.append(day:2, mW: 31.77)
myArray.append(day:4, mW: 31.58)
myArray.append(day:6, mW: 31.46)
Run Code Online (Sandbox Code Playgroud)

有些日子不见了,我只是没有进行测量......所有测量都应该在一条线上,或多或少.所以我想到了线性回归.我找到了Accelerate框架,但缺少文档,我找不到示例.

对于缺失的测量,我希望有一个功能,输入缺失的一天,输出最佳猜测,基于其他测量.

func bG(day: Int) -> Double {
    return // return best guess for measurement
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.一月

accelerate-framework swift

7
推荐指数
1
解决办法
2370
查看次数

iPhone上的线性代数(python/numpy?)

本学期,我正在将压缩感知算法实现为iPhone应用程序.为此,我需要一些好的矩阵/线性代数库.我对iOS和Python都有点新意,我正在寻找一些帮助来评估我的选择.

我知道iPhone有Accelerate框架,其中包括vecLib,BLAS和LAPACK,但我不熟悉它们的API(它们看起来相当令人困惑).

我玩过Python/numpy,我真的很喜欢它的使用方式 - 如果我有选择的话,我宁愿使用numpy over Accelerate.

我知道嵌入Python是可能的,但我自己也没有运气.我试图在一个XCode项目中包含Enthought的EPD.framework,但是在玩了一个小时左右之后没有让它工作.我认为编译numpy会更糟.

作为另一种选择,我可以使用Cython(http://cython.org/)生成C文件然后从中调用函数吗?我也试过这个,但是遇到了包含.so库并调用它的更多问题.有没有办法让Cython生成.c和.h文件?会说.c和.h文件仍然依赖于numpy?

我已经阅读了一些关于PyInstaller和freeze.py的内容.这些可以帮助我吗?

除了Accelerate或Python + numpy之外还有其他选择吗?Python + numpy是一个不错的选择,还是很难编译/构建?Cython是一个有效的解决方案吗?

谢谢!

python iphone numpy python-embedding accelerate-framework

6
推荐指数
1
解决办法
2950
查看次数

如何使用Accelerate Framework将iOS相机图像转换为灰度?

看起来这应该比我发现它更简单.

AVFoundation在标准委托方法中有一个框架:

- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
       fromConnection:(AVCaptureConnection *)connection
Run Code Online (Sandbox Code Playgroud)

我想在哪里使用Accelerate.Framework.将帧转换为灰度.

框架中有一系列转换方法,包括vImageConvert_RGBA8888toPlanar8(),看起来它可能是我想看到的,但是,我找不到任何如何使用它们的示例!

到目前为止,我有代码:

- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
       fromConnection:(AVCaptureConnection *)connection
{

      @autoreleasepool {
            CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
            /*Lock the image buffer*/
            CVPixelBufferLockBaseAddress(imageBuffer,0);
            /*Get information about the image*/
            uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer);
            size_t width = CVPixelBufferGetWidth(imageBuffer);
            size_t height = CVPixelBufferGetHeight(imageBuffer);
            size_t stride = CVPixelBufferGetBytesPerRow(imageBuffer);

            // vImage In
            Pixel_8 *bitmap = (Pixel_8 *)malloc(width * height * sizeof(Pixel_8));
            const vImage_Buffer inImage = { bitmap, height, width, stride };

            //How …
Run Code Online (Sandbox Code Playgroud)

iphone image-processing objective-c accelerate-framework vimage

6
推荐指数
1
解决办法
3143
查看次数

如何从链接到 Apple Accelerate 框架的源代码构建 NumPy?

据我了解,NumPy 在 1.20.0 版本中放弃了对使用 Accelerate BLAS 和 LAPACK 的支持。根据 NumPy 1.21.1 的发行说明,这些错误已得到解决,现在可以再次在 MacOS >= 11.3 上使用 Accelerate 框架从源代码构建 NumPy:https: //numpy.org/doc/stable/release/1.21 .0-notes.html,但我找不到任何有关如何执行此操作的文档。这似乎是一件有趣的事情,因为 Accelerate 框架应该针对 M 系列处理器进行了高度优化。我想这个过程是这样的:

  1. 下载 numpy 源代码文件夹并导航到该文件夹​​。
  2. 创建一个site.cfg类似于以下内容的文件:
[DEFAULT]
library_dirs = /some/directory/
include_dirs = /some/other/directory/

[accelerate]
libraries = Accelerate, vecLib
Run Code Online (Sandbox Code Playgroud)
  1. 跑步python setup.py build

问题是我不知道 1. 变量library_dirsinclude_dirs应该是什么,以便 NumPy 知道使用 Accelerate BLAS 和 LAPACK 以及 2. 是否需要采取任何其他额外步骤。如果有人知道如何做到这一点或可以提供任何见解,我们将不胜感激。

python numpy build accelerate-framework apple-m1

6
推荐指数
2
解决办法
4811
查看次数