0

私は 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  

これらの結果を取得した後、プログラムを再度実行したところ、元の (正しい) 結果に戻りました。他の誰かがこれを経験したことがありますか、またはなぜそれが起こっているのかについて何か考えがありますか?

4

1 に答える 1

0

おそらくこれは、相関しているベクトルの 1 つでのオーバーフロー効果です。仕様にあるように、「このベクトルの長さは少なくとも N + P - 1 でなければなりません。」たとえば、長さ n のベクトル A の自己相関を行っている場合、最初に長さ 2*n のベクトル (A_extended など) を作成し、A をそのベクトルにコピーして、vDSP_conv(A_extended, 1, A, 1, &result, 1 、n、n)

于 2015-07-17T08:16:34.307 に答える