标签: accelerate-framework

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框架进行FFT时如何设置缓冲区?

我正在使用Accelerate框架来执行快速傅立叶变换(FFT),并且我正在尝试找到一种方法来创建一个缓冲区,以便使用长度为1024的缓冲区.我可以访问平均峰值和峰值.我想做FFT的信号.

有人可以帮我或给我一些提示吗?

iphone cocoa fft accelerate-framework

5
推荐指数
1
解决办法
3741
查看次数

什么可能导致FFT数据在错误的频率上出现尖峰?

我使用的是苹果的加速框架,讨论了关于iPhone执行FFT间距检测很多 次这里之前.

我理解相位偏移,bin频率,并且已经研究了几种使用FFT技术(简单音调检测,自相关,倒谱等)来检测音调的开源调谐器.这是我的问题:

我的FFT结果始终偏离5-10 Hz(+/-),即使这些箱仅相隔1-2赫兹.我尝试过不同的算法,即使是以高分辨率采样的简单FFT也会显示出看似错误的地方的幅度峰值.这不是一致的偏移; 有些太高,有些太低.

例如,440Hz的音调为445.2 Hz; 220Hz为214Hz; 880Hz为874Hz; 使用音调发生器,1174Hz为1183Hz.使用几乎完全相同的算法的Mac 类似的开源调谐器没有问题完美地检测音调.(这些差异在设备上与模拟器不同,但它们仍处于关闭状态.)

我不认为问题是分辨率,因为实际音调和检测到的幅度尖峰之间通常有几个分档.好像输入只是听错了音调.

我在下面粘贴了我的代码.一般流程很简单:

向FFT缓冲区推进一步 - > Hann窗口 - > FFT - >相位/幅度 - >最大间距错误.

enum {
    kOversample = 4,
    kSamples = MAX_FRAME_LENGTH,
    kSamples2 = kSamples / 2,
    kRange = kSamples * 5 / 16,
    kStep = kSamples / kOversample
};



const int PENDING_LEN = kSamples * 5;
static float pendingAudio[PENDING_LEN * sizeof(float)];
static int pendingAudioLength = 0;

- (void)processBuffer {
    static float window[kSamples];
    static …
Run Code Online (Sandbox Code Playgroud)

signal-processing fft accelerate-framework

5
推荐指数
1
解决办法
3664
查看次数

使用vDSP功能的自相关

给定浮点数或双精度的一维向量,如何使用加速框架中的vDSP库中的函数计算该向量的自相关?

有人会怀疑vDSP_acor()和vDSP_acorD()函数会执行此计算,但文档vDSP_Library.pdf(此处提供)并不能很好地解释函数参数的使用方式.

类似地,vDSP_conv()和vDSP_convD()函数提到了在两个向量之间执行相关和卷积的能力,但是没有为我提供足够的解释或示例代码以便能够成功地使用它们.例如,如果使用过滤器内核来卷积2D矩阵,我会想象需要两次调用vDSP_convD(),使用不同的signalStride值,但文档中省略了这一点.另一个遗漏是如何打包过滤器中的数据.如果用零填充,如果零首先,最后,或者它们是否需要均匀分布在非零条目的两侧,这是否重要?滤波器长度,结果长度和输入长度是否有要求?

有用示例的建议:使用vDSP_acor()和vDSP_conv()实现向量的自相关.频域中两个数组的二进制乘法,打包为真实数据,使用vDSP_fft2d_zrip()进行前向FFT,将在IFT返回非规范化答案之前用于计算自相关函数.在1D和2D阵列上实现高斯核卷积.一般来说这是一个很棒的库(你能说FAST吗?!),但我发现这些特殊功能有点难以理解,上述例子可能会被广泛使用,因为它们在信号处理和图像分析中非常常见.

对vDSP_Library参考文档的维护者的建议:我假设"空间域"和"时域"在整个文档中是等效的.如果没有,请做出区分.另外,请检查所有公式都有明确定义的参数,这些参数与所讨论函数中声明的参数名称相匹配.

脚注:这里我所指的自相关定义为:A [T] = <(X [t] -m)(X [tT] -m)>/v,其中A [T]是滞后T处的自相关, t是信号X的索引,m是所有t的X的平均值,v是所有t的X的方差,并且尖括号<>表示T的所有可用X对的平均值.

c++ macos signal-processing fft accelerate-framework

5
推荐指数
1
解决办法
2514
查看次数

是否可以将结果存储在vDSP框架中的一个输入向量中

在Accelerate Framework的vDSP功能中,所有功能都要求您输入结果向量.如果我不再需要原始输入向量中的任何内容,将输入向量(或其中一个输入向量)作为结果向量传递是否正确?

我的意思是:

vDSP_vsadd(input_vector,1,scalar_addition,input_vector,1,length);
Run Code Online (Sandbox Code Playgroud)

这将采用input_vector并向所有元素添加scalar_addition.结果将存储在input_vector中.

objective-c accelerate-framework vdsp

5
推荐指数
1
解决办法
442
查看次数

比较iOS中的两个频谱图

我正在使用apple提供的示例代码aurio touch绘制光谱图.现在我想比较iOS中的两个频谱图,看它们是否相同.是否可以使用Accelerate框架比较两个光谱图?

如果有可能,有人知道如何比较两个光谱图吗?如果没有,是否有任何其他算法或库可以在iOS中用于比较频谱图?

signal-processing objective-c spectrogram ios accelerate-framework

5
推荐指数
2
解决办法
1863
查看次数

如何使用Accelerate Framework将图像与蒙版合并到一个单独的UIImage中?

此代码将图像和灰度蒙版图像组合成一个UIImage.它有效,但很慢.

+ (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *) mask
{
    CGImageRef imageReference = image.CGImage;
    CGImageRef maskReference = mask.CGImage;

    CGImageRef imageMask = CGImageMaskCreate(CGImageGetWidth(maskReference),
                                             CGImageGetHeight(maskReference),
                                             CGImageGetBitsPerComponent(maskReference),
                                             CGImageGetBitsPerPixel(maskReference),
                                             CGImageGetBytesPerRow(maskReference),
                                             CGImageGetDataProvider(maskReference),
                                             NULL, // Decode is null
                                             YES // Should interpolate
                                             );

    CGImageRef maskedReference = CGImageCreateWithMask(imageReference, imageMask);
    CGImageRelease(imageMask);

    UIImage *maskedImage = [UIImage imageWithCGImage:maskedReference];
    CGImageRelease(maskedReference);

    return maskedImage;
}
Run Code Online (Sandbox Code Playgroud)

我认为Accelerate Framework可以提供帮助.但我不确定.有vImage,它可以做alpha合成.或者也许我想要的是" vImage变换 ".不像CATransform3D而是"转换"图像.

但我需要的是将照片制作成基于蒙版的透明JPEG.

可以使用Accelerate Framework吗?还是有替代方案吗?

iphone core-graphics uiimage ios accelerate-framework

5
推荐指数
1
解决办法
420
查看次数

iOS 使用 vImage - 加速将 QCAR YUV 转换为 RGB

我正在尝试测试转换 Vuforia 生成的 YUV 图像并将它们转换为UIImage使用 iOS Accelerate Framework 的 vImage 调用的性能。在代码的当前状态下,我只是想让它工作。现在转换会产生暗条纹图像。是否有任何关于 Vuforia 如何在其实现中布置 YUV 格式的已发布详细信息?我最初的假设是他们使用 iOS 设备使用的双平面 420p 格式。相关测试代码如下。

UIImage *imageWithQCARCameraImage(const QCAR::Image *cameraImage)
{
    UIImage *image = nil;

    if (cameraImage) {
        QCAR::PIXEL_FORMAT pixelFormat = cameraImage->getFormat();

        CGColorSpaceRef colorSpace = NULL;
        switch (pixelFormat) {
            case QCAR::YUV:
            case QCAR::RGB888:
                colorSpace = CGColorSpaceCreateDeviceRGB();
                break;
            case QCAR::GRAYSCALE:
                colorSpace = CGColorSpaceCreateDeviceGray();
                break;
            case QCAR::RGB565:
            case QCAR::RGBA8888:
            case QCAR::INDEXED:
                std::cerr << "Image format conversion not implemented." << std::endl;
                break;
            case QCAR::UNKNOWN_FORMAT:
                std::cerr << "Image format …
Run Code Online (Sandbox Code Playgroud)

uiimage ios accelerate-framework vuforia vimage

5
推荐指数
1
解决办法
2030
查看次数

LAPACKE 加速框架

我正在用 C++ 开发一个基于线性代数的工具,允许用户链接到不同操作系统上的 OpenBLAS/ATLAS/Intel MKL。这在 Windows 和 Linux 上都很好,但我更愿意允许 OS X 用户也链接到 Accelerate Framework。但是,我的代码使用LAPACKE,它是 LAPACK 的 C 接口(例如,函数是 LAPACKE_fxname ),它似乎不是 Accelerate Framework 的一部分。相反,它具有 CLAPACK f2c'd 函数(例如函数是 fxname_),它们具有不同的接口并使用列主存储。

由于我的其余代码适用于行优先,因此我不想将矩阵转换为列优先,以便我可以在 OS X 上使用 CLAPACK,但这是我唯一的选择吗?也就是说,用LAPACKE开发跨平台软件时,有没有办法使用Accelerate Framework呢?或者有什么技巧可以用来在行主数组上使用 CLAPACK 函数(也许只是传递“转置”标志来进行“不转置”操作?在我看来,行主矩阵以相同的方式存储作为转置的列顺序矩阵。)?

c++ lapack accelerate-framework

5
推荐指数
0
解决办法
805
查看次数

旋转 CMSampleBuffer/CVPixelBuffer

我目前正在尝试通过首先将其转换为 CVPixelBuffer 然后使用 vImageRotate90_ARGB8888 来转换缓冲区来更改 CMSampleBuffer 的方向。我的代码的问题是当 vImageRotate90_ARGB8888 执行时,它立即崩溃。我知道有答案(比如这个或这个),但是所有这些解决方案在我的情况下都不起作用,我真的找不到任何类型的错误,或者想不出任何会导致这种行为的东西。我当前的代码如下:

- (CVPixelBufferRef)rotateBuffer:(CMSampleBufferRef)sampleBuffer {
CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress(pixelBuffer, 0);

size_t bytesPerRow = CVPixelBufferGetBytesPerRow(pixelBuffer);
size_t width = CVPixelBufferGetWidth(pixelBuffer);
size_t height = CVPixelBufferGetHeight(pixelBuffer);
size_t currSize = bytesPerRow * height * sizeof(unsigned char);
size_t bytesPerRowOut = 4 * height * sizeof(unsigned char);

OSType pixelFormat = CVPixelBufferGetPixelFormatType(pixelBuffer);

void *baseAddress = CVPixelBufferGetBaseAddress(pixelBuffer);
unsigned char *outPixelData = (unsigned char *)malloc(currSize);

vImage_Buffer sourceBuffer = {baseAddress, height, width, bytesPerRow};
vImage_Buffer destinationBuffer = {outPixelData, width, height, …
Run Code Online (Sandbox Code Playgroud)

objective-c ios accelerate-framework cmsamplebuffer cvpixelbuffer

5
推荐指数
0
解决办法
3149
查看次数