我一直在使用Accelerate框架进行一些音频信号处理,并且一直在使用vDSP_conv
函数执行一些互相关。通常,返回的值如下所示(左列是数组索引,右列是从vDSP_conv
返回后在该索引处的数组的值):
125001 1.576556
125002 1.523622
125003 1.439102
125004 1.593097
125005 1.171977
125006 0.020228
125007 -0.988876
125008 -1.526720
125009 -1.056652
125010 -0.181521
125011 -0.029592
125012 0.077848
125013 0.319371
125014 0.080034
125015 -0.629983
但是有时结果是这样的,没有明显的原因:
125001 65531903404620711577128764702720.000000
125002 271523249688835947415863891591168.000000
125003 253191001846134141440285462233088.000000
125004 197376212065818453160643396632576.000000
125005 247836891833411757917279954665472.000000
125006 203601464352748581549908776976384.000000
125007 193256115501319341596977567629312.000000
125008 55431884287617507551879029063680.000000
125009 -242471930502532513482802284462080.000000
125010 -259877560883016098488551924039680.000000
125011 -201496656800953613737511541014528.000000
125012 -240627419186810410707269384667136.000000
125013 -241660441463967832878539113234432.000000
125014 -169626548145197368918504628027392.000000
125015 -157041504634723839288379166425088.000000
得到这些结果后,我再次运行该程序,然后它们又回到了原始(正确)的结果。有没有其他人经历过这种情况或对为什么会发生有任何想法?
最佳答案
这可能是您关联的 vector 之一中的某种溢出效果。正如specs所说:“此 vector 的长度必须至少为N + P-1。”所以如果要对长度为n的 vector A进行自相关,则应首先创建一个长度为2 * n的 vector (例如A_extended),将A复制到其中,然后执行
vDSP_conv(A_extended,1,A,1,&result,1,n,n)
关于ios - 从vDSP_conv返回的结果很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24703235/