标签: accelerate-framework

使用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
查看次数

将AVCaptureAudioDataOutput数据传递到vDSP/Accelerate.framework

我正在尝试创建一个在麦克风数据上运行FFT的应用程序,因此我可以检查输入中最响亮的频率.

我看到有很多获取音频输入的方法(RemoteIO AudioUnit,AudioQueue服务和AVFoundation),但似乎AVFoundation是最简单的.我有这个设置:

// Configure the audio session
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryRecord error:NULL];
[session setMode:AVAudioSessionModeMeasurement error:NULL];
[session setActive:YES error:NULL];

// Optional - default gives 1024 samples at 44.1kHz
//[session setPreferredIOBufferDuration:samplesPerSlice/session.sampleRate error:NULL];

// Configure the capture session (strongly-referenced instance variable, otherwise the capture stops after one slice)
_captureSession = [[AVCaptureSession alloc] init];

// Configure audio device input
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:NULL];
[_captureSession addInput:input];

// Configure audio data output
AVCaptureAudioDataOutput *output = …
Run Code Online (Sandbox Code Playgroud)

signal-processing core-audio avfoundation ios accelerate-framework

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

如何使用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
查看次数

来自Swift中String的UnsafeMutablePointer <Int8>

我正在使用dgeevAccelerate框架中LAPACK实现的算法来计算矩阵的特征向量和特征值.遗憾的是,Apple文档中没有描述LAPACK功能,仅包含http://netlib.org/lapack/faq.html的链接.

如果你查一下,你会发现前两个参数dgeev是表示是否计算特征向量的字符.在Swift,它是要求的UnsafeMutablePointer<Int8>.当我只是使用时"N",我收到一个错误.的dgeev功能和错误在下面的截图中描述在此输入图像描述

我该怎么做才能解决这个问题?

pointers char lapack accelerate-framework swift

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

如何在Mac之外使用Accelerate框架

我正在尝试编译和运行使用Accelerate Framework的代码(它包括Accelerate/accelerate.h).我在Linux中这样做.我没有Mac,也没有Xcode.我可以去任何地方下载这个库的源代码,或者进行编译吗?

我已经广泛搜索了这个,但没有找到明确的答案.有些网站建议我需要下载LAPACK和BLAS,但我不知道这是否足够.

linux macos xcode accelerate-framework

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

手动重新实现Biquad IIR滤波器的vDSP_deq22

我正在移植一个过滤器库,该过滤器库目前使用Apple特定的(加速)vDSP功能vDSP_deq22到Android(其中Accelerate不可用).滤波器组是一组带通滤波器,每个滤波器滤波器返回其各自频带的RMS幅度.目前代码(ObjectiveC++,改编自NVDSP)如下所示:

- (float) filterContiguousData: (float *)data numFrames:(UInt32)numFrames channel:(UInt32)channel {

    // Init float to store RMS volume
    float rmsVolume = 0.0f;

    // Provide buffer for processing
    float tInputBuffer[numFrames + 2];
    float tOutputBuffer[numFrames + 2];

    // Copy the two frames we stored into the start of the inputBuffer, filling the rest with the current buffer data 
    memcpy(tInputBuffer, gInputKeepBuffer[channel], 2 * sizeof(float));
    memcpy(tOutputBuffer, gOutputKeepBuffer[channel], 2 * sizeof(float));
    memcpy(&(tInputBuffer[2]), data, numFrames * sizeof(float));

    // Do the processing
    vDSP_deq22(tInputBuffer, 1, coefficients, tOutputBuffer, 1, numFrames);
    vDSP_rmsqv(tOutputBuffer, …
Run Code Online (Sandbox Code Playgroud)

filtering signal-processing accelerate-framework

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

使用Mac OS X 10.7的vecLib框架将矩阵和向量相乘的问题

我刚刚开始使用vecLib框架来使程序在Mac OS X 10.7上进行密集的矩阵向量乘法.我做了一个这样简单的程序; 将矩阵a与向量x相乘,并将结果加到向量y上.

#include <vecLib/vectorOps.h>
#include <stdio.h>

float a[8][4] =     // the matrix to be multiplied
{
    {1.0f, 0.0f, 0.0f, 0.0f},
    {0.0f, 1.0f, 0.0f, 0.0f},
    {1.0f, 1.0f, 0.0f, 0.0f},
    {0.0f, 0.0f, 1.0f, 1.0f},
    {1.0f, 0.0f, 1.0f, 0.0f},
    {1.0f, 0.0f, 1.0f, 0.0f},
    {1.0f, 1.0f, 1.0f, 0.0f},
    {0.0f, 0.0f, 0.0f, 1.0f},
};

float x[4] = {1.0f, 2.0f, 4.0f, 8.0f};  // the vector to be multiplied
float y[8] = {0.f, 0.f, 0.f, 0.f,       // the result vector
              0.f, 0.f, 0.f, 0.f}; …
Run Code Online (Sandbox Code Playgroud)

math macos blas accelerate-framework

4
推荐指数
1
解决办法
2743
查看次数

带浮动缓冲器AudioUnit的FFT输出

我的vDSP_zrip和AudioUnit使用和配置有问题.实际上我配置了AudioUnit来将打包数据保存为float.我创建一个循环缓冲区,当这个缓冲区已满时,我计算一个fft.我有结果,但我不明白为什么fft输出不好(参见图)

AudioUnit配置:

// describe format
AudioStreamBasicDescription audioFormat;
audioFormat.mSampleRate       = 44100;
audioFormat.mFormatID         = kAudioFormatLinearPCM;
audioFormat.mFormatFlags      = kAudioFormatFlagsNativeEndian|kAudioFormatFlagIsPacked|kAudioFormatFlagIsFloat|kAudioFormatFlagIsNonInterleaved;
audioFormat.mFramesPerPacket  = 1;
audioFormat.mChannelsPerFrame = 1; // mono
audioFormat.mBitsPerChannel   = sizeof(float) * 8;
audioFormat.mBytesPerFrame    = audioFormat.mChannelsPerFrame * sizeof(float);
audioFormat.mBytesPerPacket   = audioFormat.mFramesPerPacket * audioFormat.mBytesPerFrame;
Run Code Online (Sandbox Code Playgroud)

循环缓冲区:

_audioSample = new AudioSample(8192, 44100);
// in recording callback :
for(int i = 0; i < bufferList.mNumberBuffers; ++i)
{
    if(!status)
    {
        if(_sample->needData())
            _sample->put((float*)bufferList.mBuffers[i].mData,
                    bufferList.mBuffers[i].mDataByteSize);
        [...]
    }
}
Run Code Online (Sandbox Code Playgroud)

vDSP电话:

  // get a split complex vector (real signal divided into an even-odd …
Run Code Online (Sandbox Code Playgroud)

core-audio audiounit ios accelerate-framework

4
推荐指数
1
解决办法
1670
查看次数

iOS Accelerate Framework vImage - 性能改进?

我一直在使用OpenCV和Apple的Accelerate框架,发现Accelerate的性能很慢,Apple的文档有限.我们举个例子:

void equalizeHistogram(const cv::Mat &planar8Image, cv::Mat &equalizedImage)
{
    cv::Size size = planar8Image.size();
    vImage_Buffer planarImageBuffer = {
        .width = static_cast<vImagePixelCount>(size.width),
        .height = static_cast<vImagePixelCount>(size.height),
        .rowBytes = planar8Image.step,
        .data = planar8Image.data
    };

    vImage_Buffer equalizedImageBuffer = {
        .width = static_cast<vImagePixelCount>(size.width),
        .height = static_cast<vImagePixelCount>(size.height),
        .rowBytes = equalizedImage.step,
        .data = equalizedImage.data
    };

    TIME_START(VIMAGE_EQUALIZE_HISTOGRAM);
    vImage_Error error = vImageEqualization_Planar8(&planarImageBuffer, &equalizedImageBuffer, kvImageNoFlags);
    TIME_END(VIMAGE_EQUALIZE_HISTOGRAM);
    if (error != kvImageNoError) {
        NSLog(@"%s, vImage error %zd", __PRETTY_FUNCTION__, error);
    }
}
Run Code Online (Sandbox Code Playgroud)

此调用大约需要20ms.这具有在我的应用程序中无法使用的实际意义.也许直方图的均衡本质上很慢,但我也测试了BGRA->灰度,发现OpenCV可以在~5ms内完成,vImage需要~20ms.

在测试其他功能时,我发现了一个项目,该项目创建了一个带有模糊功能(gist)的简单滑块应用程序,我将其清理干净以进行测试.大约~20ms.

是否有一些技巧可以让这些功能更快?

opencv ios accelerate-framework vimage

4
推荐指数
3
解决办法
2107
查看次数

在 swift 中使用 vImageHistogramCalculation 计算图像的直方图

我正在尝试使用 AcceleratevImageHistogramCalculation_ARGBFFFF函数计算图像的直方图,但我得到了一个vImage_Error类型kvImageNullPointerArgument(错误代码是-21772)。

这是完全相同的问题,但我在 Swift 中工作:使用 vImageHistogramCalculation 计算图像的直方图

    // Get CGImage from UIImage
    var image:UIImage = UIImage(named: "happiness1")!
    var img:CGImageRef = image.CGImage

    // Create vImage_Buffer with data from CGImageRef
    var inProvider:CGDataProviderRef = CGImageGetDataProvider(img)
    var inBitmapData:CFDataRef = CGDataProviderCopyData(inProvider)

    // The next three lines set up the inBuffer object
    var height:vImagePixelCount = CGImageGetHeight(img)
    var width:vImagePixelCount = CGImageGetWidth(img)
    var rowBytes:UInt = CGImageGetBytesPerRow(img)
    var data:UnsafePointer<Void> = UnsafePointer<Void>(CFDataGetBytePtr(inBitmapData))

    // Setup inBuffer
    var inBuffer = vImage_Buffer(data: &data, height: …
Run Code Online (Sandbox Code Playgroud)

histogram ios accelerate-framework swift vimage

4
推荐指数
1
解决办法
3055
查看次数