使用不同BLAS实现的NumPy的性能
我正在运行一种在Python中实现并使用numpy的算法.该算法最昂贵的一部分涉及求解一组线性系统(即呼叫numpy.linalg.solve().我提出了这个小基准: import numpy as np import time # Create two large random matrices a = np.random.randn(5000, 5000) b = np.random.randn(5000, 5000) t1 = time.time() # That's the expensive call: np.linalg.solve(a, b) print time.time() - t1 我一直在运行以下操作: 我的笔记本电脑,2013年末MacBook Pro 15",4个核心(sysctl -n machdep.cpu.brand_string)给我 intel(r)core(tm)i7-4750hq cpu @ 2.00ghz )) Amazo
4 2024-01-24
编程技术问答社区
快速傅里叶变换结果:频率轴刻度?
我成功地实现了获取数组数据并使用Apple的加速框架(在iOS设备上执行)的代码. 我现在的问题是频率轴的比例是多少?结果在某些频率范围内具有预期的峰值,但我不确定该频率应该是多少.加速框架的FFT功能具有数组,并吐出具有相同(或更多)数据点数的数组.它是否假定所有这些点都在及时间隔?它不将采样频率或时间变量作为输入.频率轴的比例(即每个点上的频率增加)只是抽样周期除以2*pi(或类似的东西吗?),我在文档中找不到很多信息.我一直在网上寻找类似的问题,尚未找到任何问题. 在某些方面,这是一个数学问题,尽管它在很大程度上取决于加速框架的实现. 谢谢 编辑 我问了一个后续问题在这里,但还没有人回答.请看看! 解决方案 FFT为您提供线性间隔的频率箱,直至采样频率.这意味着垃圾箱之间的间距为(样品频率)/(垃圾箱数). 其他解决方案 频率轴刻度不取决于加速框架的实现,仅取决于时域数据的采样率(FS)和FFT的长度(n).任何FFT. 对于严格的真实
6 2024-01-09
编程技术问答社区
iOS:在64位上使用vDSP功能
在iOS中,我有一个函数调用,该调用取决于vDSP_vgathr, a member of Apple's 加速框架: int pix = image.size.height * image.size.width; float * array = (float *)malloc(sizeof(float) * pix * 4); float * colorPlane = (float *)malloc(sizeof(float) * pix); float * y_r = (float *)malloc(sizeof(float) * pix) int * malloc(sizeof(int) * pix) vDSP_vgathr(colorPlane, (const vDSP_Length *)idx, 1, y_r, 1, (int)(rate*pix)); 我已经看过与我遇到的错误,EXC_I386_GPFLT以及64位系统和非规范指针有关的. 解决方案/esporat
0 2024-01-08
编程技术问答社区
使用加速框架在swift中进行矩阵乘法的32位与64位比较
我试图使用加速框架在Swift中进行矩阵乘法.使用VDSP_MMULD.这在iPhone6,6 Plus,iPad Air Simulator(全64位体系结构)中都可以很好地工作,但与32位体系结构设备中的任何一个都没有使用. 它看到像VDSP_MMULD一样被32位体系结构所识别,并且该程序没有构建.显示的错误消息显示"使用未解决的标识符'vdsp_mmuld'"是否有人看到此错误?请让我知道你的想法.我正在使用Xcode 6.1. 谢谢. 解决方案 简单解决方案:使用cblas_dgemm(也是加速的一部分).至少在所有系统上的vDSP_mmulD> vDSP_mmulD的速度都快得多(在iOS 8和Yosemite中,vDSP_mmulD实际上只是cblas_dgemm> cblas_dgemm的包装器),实际上应该在这里工作. . 我怀疑您的32位模拟器失败了.在i386上,vdsp_mmuld实际上是mmuld周围的宏,而Swift不完全支持C语言宏.
4 2024-01-08
编程技术问答社区
使用苹果公司的加速框架、FFT、汉恩窗口和叠加
我正在尝试为一个项目设置FFT,但实际上并没有清楚地了解事物... 基本上,我正在使用Audio Units从设备的麦克风中获取数据.然后,我想在该数据上做FFT.这是我到目前为止了解的:我需要为数据设置圆形缓冲区.在每个填充的缓冲区上,我使用Hann window,然后进行FFT.但是,我仍然需要一些帮助.为了获得更精确的结果,我了解我需要使用它,尤其是因为我使用窗口.但是,我什么都找不到... 这是我到目前为止所拥有的(用于音高检测): // Setup ------------- UInt32 log2N = 10; // 1024 samples UInt32 N = (1
4 2023-12-18
编程技术问答社区
使用加速器框架将单精度浮点值转换为Int 16
如何在加速框架的帮助下将单个精确浮点转换为INT 16. int16 float: import Accelerate let rr: [Int16] = [ 18, 21, 41, 42, 48, 50, 55, 90] var float = [Float](repeating: 0, count: rr.count) vDSP_vflt16(rr, 1, &float, 1, vDSP_Length(rr.count)) 现在,我尝试将其浮动到int16? 解决方案 您可以使用var ints = [Int16](repeating: 0, count: rr.count) vDSP_vfix16(float, 1, &ints, 1, vDSP_Length(float.count)) print(ints) // [18, 21, 41, 42, 48, 50, 55, 90] vDSP_vfix16回合朝0.您可以找到其他功能,这些功能在
4 2023-10-09
编程技术问答社区
在波动的时间间隔内捕获的线性重采样数据点,以快速的时间间隔进行重采样。
我想线性插值一些在有时波动的捕获的一些指标,以固定时间间隔. let original_times:[Double] = [0.0,1.3,2.2,3.4,4.2,5.5,6.6,7.2,8.4,9.5,10.0] let metric_1:[Double] = [4,3,6,7,4,5,7,4,2,7,2] let wanted_times:[Double] = [0,1,2,3,4,5,6,7,8,9,10] //linearly resample metric_1 (with corresponding sampling times 'original_times') to fixed time interval times 'wanted_times' Accelerate提供 vdsp_vlint ,但我正在努力弄清楚如何为我的应用程序实现它. func vDSP_vlint(_ __A: UnsafePointer, _ __B: Unsaf
10 2023-10-09
编程技术问答社区
vDSP_zrvmul没有返回任何结果(或全是零)。
根据其他用户的评论,我已经对代码进行了整理并凝结,以使其可读.我有一个复杂的Floatarray类,用于存储复杂向量的数组 class complexFloatArray { var reals: [Float] var imaginaries: [Float] init(reals: [Float], imaginaries: [Float]){ self.reals = reals self.imaginaries = imaginaries } } i然后在该类的扩展中定义了一些函数.一个是: func useAsDSPSplitComplex(_ closure: (inout DSPSplitComplex) -> R) -> R { return reals.withUnsafeMutableBufferPointer { realBufferPointer in return i
6 2023-10-09
编程技术问答社区
在Swift 3中绘制CGImage的柱状图
我在尝试将库从Swift 2转换为Swift 3版本时有一个问题.问题是该方法仅接受"直方图"参数为 UnsafeMutablePointer?> 但是Swift 3构造 let histogram = UnsafeMutablePointer>(mutating: rgba) 返回未包装的值,因此我无法正确键入. 编译器错误是: :无法调用类型的初始器 'untafemutablepointer?>'with 类型的参数列表'(突变: [UnsafemutablePointer])' 您有一些想法吗?我试图添加"?"直方图常数,但后来我收到错误: 'init'不可用:使用'with ememoryrebound(to:tocation:_)' 暂时将内存视为另一种与布局兼容的类型. 有一些编译器建议,但我不
4 2023-10-07
编程技术问答社区
Swift中的DFT结果与MATLAB的结果不同
import Cocoa import Accelerate let filePath = Bundle.main.path(forResource: "sinusoid", ofType: "txt") let contentData = FileManager.default.contents(atPath: filePath!) var content = NSString(data: contentData!, encoding: String.Encoding.utf8.rawValue) as? String var idx = content?.characters.index(of: "\n") idx = content?.index(after: idx!) repeat { //let fromIndex = index(from: ) content = content?.substring(from: idx!) idx = con
20 2023-10-07
编程技术问答社区
在Swift中从字符串中获取不安全的可移动指针<Int8>。
我正在加速框架中的拉帕克实现中使用dgeev算法来计算矩阵的特征向量和特征值. Sadly the LAPACK functions are not described in the Apple Documentation with a mere link to http://netlib.org/lapack/faq.html 包括. 如果您查找它,您会发现dgeev中的前两个参数是字符表示是否计算特征向量.在Swift中,它要求UnsafeMutablePointer.当我简单地使用"N"时,我会出现错误. dgeev函数和错误在以下屏幕截图 > 我该怎么办? 解决方案 "问题"是前两个参数被声明为char * 而不是const char *,即使字符串未通过函数修改: int dgeev_(char *__jobvl, char *__jobvr, ...); 被映射到Swift func dgeev_(__jobvl: UnsafeM
12 2023-10-06
编程技术问答社区
加速框架vDSP,FFT构架
我正在尝试在录制的音频文件上使用Apple的VDSP来实现FFT计算(让我们假设它是单个PCM). 我在这里进行了一项研究,并且发现以下主题很有用: 使用Apple FFT并加速加速 框架 使用Exted Audio File Service读取音频 (Extaudiofileread) 例如,我们用frame_size n = 1024样本配置了fft,log2n = 10: m_setupReal = vDSP_create_fftsetup(LOG_2N, FFT_RADIX2); // allocate space for a hamming window m_hammingWindow = (float *) malloc(sizeof(float) * N); // generate the window values and store them in the hamming window buffer vDSP_hamm_window(m
64 2023-09-03
编程技术问答社区
Objective-C 峰值检测加速框架
我在这里不是数学大师,所以我想问一个熟悉数字信号处理的人,检测实时峰的最佳方法是什么?我一秒钟我得到大约30帧/值,我尝试实现用于检测峰的坡度算法,它可以正常工作,大约80%的情况,但实际上还不够好:(. 我搜索的内容应该使用快速的傅立叶变换,但是我不知道如何开始,也许我错过了在这种情况下如何使用FFT的一般想法. 在iOS中,我们有一个惊人的加速框架,应该帮助我做FFT的事情,但只要我没有得到一般的想法对我来说毫无用处. 任何人都可以通过将我指向正确的方向来以某种方式启发我:-)? 非常感谢,新年快乐! 解决方案 因此,每秒生成30个样本的每秒生成的摄影光值阵列.您想知道每秒的峰值是多少?还是要使用加速计算向量中的最大值,您可以使用vDSP_maxv函数. 您是否正在尝试检测每秒给定阈值以上的所有峰?在这种情况下,您可以生成一个矢量,该向量包含与搜索峰值的向量相同长度的阈值.然后,您可以使用vDSP_vmax函数来查找以上阈值以上的所有值.
8 2023-09-03
编程技术问答社区
自动相关的倒频谱
我正在尝试检测来自麦克风的声音中的一些回声.回声将是周期性的,并且是两个可能的偏移之一.我听说我需要自动授权信号的cepstrum,以检测这些回声的存在.您可以使用加速框架提供代码,该框架显示如何在音频数据中检测回声? 解决方案 我不确定为什么您会自动将Cepstrum关联.但是,自动相关性为您提供了与Cepstrum相关的表示形式,因此我想您只想自动关联信号. 以最简单的形式进行,如下所示: int sample = 0; int sampleMax = inSize; while( sample
6 2023-09-03
编程技术问答社区
为什么 Swift 中的 FFT 与 Python 中的不同?
我正在尝试使用加速框架将一些python numpy代码移植到Swift. 在python中我写 import numpy as np frames = np.array([1.0, 2.0, 3.0, 4.0]) fftArray = np.fft.fft(frames, len(frames)) print(fftArray) ,输出为: [10.+0.j -2.+2.j -2.+0.j -2.-2.j] 因此,在Swift中,我试图计算这样的FFT: import Foundation import Accelerate func fftAnalyzer(frameOfSamples: [Float]) { // As above, frameOfSamples = [1.0, 2.0, 3.0, 4.0] let analysisBuffer = frameOfSamples
20 2023-09-03
编程技术问答社区
加速框架FFT vDSPztoc拆分实数形式来拆分实数向量
我使用加速框架在iOS中实现了基于加速度计的FFT,但是我仍然有些困惑的一件事是: /* The output signal is now in a split real form. Use the function * vDSP_ztoc to get a split real vector. */ vDSP_ztoc(&A, 1, (COMPLEX *) obtainedReal, 2, nOver2); 最终阵列是什么样的? 我对"拆分真实形式"和"拆分真实向量"之间的区别感到困惑.我可能对这意味着什么有一定的了解,但是我想确保我有正确的想法. 通过VDSP_CTOZ将启动数据,一个双打数组,代表输入数据(例如加速度)的次数.然后结果以此形式(从Apple的VDSP指南复制): {[DC,0],C[1],C[2],...,C[n/2],[NY,0],Cc[n/2],...,Cc[2],Cc[1]} where 1. DC and NY are t
12 2023-09-03
编程技术问答社区
手工重新实现vDSP_deq22的Biquad IIR滤波器
我正在移植一个当前使用Apple特异性(加速)VDSP函数VDSP_DEQ22的过滤器库(在没有加速的情况下). FilterBank是一组带通滤波器,每个滤波器都会返回其各自频段的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 s
26 2023-09-03
编程技术问答社区
使用加速框架的iOS的FFT间距检测?
我已经阅读了FFT和音高检测已有一段时间了,但是我很难将它们拼凑在一起. 我已经确定了加速框架可能是最好的方法,并且我已经阅读了Apple的示例代码,以查看如何将其用于FFT.如果我想实时运行音高检测,则FFT的输入数据是什么?我只是从麦克风传递到音频流吗?我该怎么做? 另外,在获得FFT输出后,如何从中获得频率?我一直在阅读到处阅读,找不到任何例子或解释? 感谢您的任何帮助. 解决方案 频率和音高不是同一件事 - 频率是物理数量,音调是一种心理学感知 - 它们是相似的,但是存在重要的差异,这可能对您而言可能无关紧要,具体取决于类型您试图测量音高的乐器. 您需要在各种音高检测算法(以及俯仰本身的含义)上进行一些阅读,请确定要使用的算法,只有,然后设置 设置了实现它.请参阅对于使用FFT来识别频谱及其相关频率的峰/4364823/how-to-get-from-from-fft-result/4371627#4371627">我如何在fft中获得每个值的频率
6 2023-09-03
编程技术问答社区
峰值均衡器的IIR系数,如何将其传递给vDSP_deq22?
我有这6个用于峰值等式的系数: b0 = 1 + (α ⋅ A) b1 = −2⋅ωC b2 = 1 - (α ⋅ A) a0 = 1 + (α / A) a1 = −2 ⋅ ωC a2 = 1 − (α / A) 使用这些中间变量: ωc = 2 ⋅ π ⋅ fc / fs ωS = sin(ωc) ωC = cos(ωc) A = sqrt(10^(G/20)) α = ωS / (2Q) vDSP_deq22()的文档指出"应该传递5个单精制输入,过滤系数",但我有6个系数!另外,我以什么顺序将它们传递给vDSP_deq22()? 更新(17/05):我建议大家使用我在github上发布的DSP类: https://github.com/bartolsthoorn/nvdsp 它可能会为您节省很多工作. 解决方案 可以将2阶过滤器表示为以下差异方程(a和b可以根据您的定义方式进行互换): a0.y[n] = b0.x[n] + b1.x[n-
10 2023-09-03
编程技术问答社区
在iPhone上进行FFT以忽略背景噪声并找到较低的音调
我已经实施了Demetri的 pitch detector iPhone项目的项目在两个问题上遇到了两个问题. 1)任何形式的背景噪声都会发送频率读取香蕉和2)较低的频率声音无法正确音调.我试图调整吉他,而较高的字符串起作用 - 调谐器无法正确辨别低e. 音调检测代码位于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 f
8 2023-09-03
编程技术问答社区