2012-06-06 9 views
7

से vDSP_conv के साथ स्वत: सहसंबंध प्रदर्शन करें मुझे एक सरणी (वेक्टर) का स्वत: सहसंबंध करने की आवश्यकता है, लेकिन मुझे ऐसा करने का सही तरीका खोजने में परेशानी हो रही है। मेरा मानना ​​है कि मुझे त्वरित फ्रेमवर्क से "vDSP_conv" विधि की आवश्यकता है, लेकिन मैं इसे सफलतापूर्वक सेट अप करने के तरीके का पालन नहीं कर सकता। मुझे सबसे ज्यादा फेंकने वाली चीज 2 इनपुट की आवश्यकता है। शायद मेरे पास गलत कार्य है, लेकिन मुझे एक वेक्टर पर संचालित एक नहीं मिला।ऐप्पल त्वरित रूप से फ्रेमवर्क

प्रलेखन पाया जा सकता है here

साइट से कॉपी किया गया

vDSP_conv

निष्पादित या तो सह-संबंध या दो वैक्टर पर घुमाव; सिंगल परिशुद्धता।

शून्य vDSP_conv (स्थिरांक नाव __vDSP_signal [], vDSP_Stride __vDSP_signalStride, स्थिरांक नाव __vDSP_filter [], vDSP_Stride __vDSP_strideFilter, नाव __vDSP_result [], vDSP_Stride __vDSP_strideResult, vDSP_Length __vDSP_lenResult, vDSP_Length __vDSP_lenFilter);

पैरामीटर

__vDSP_signal

Input vector A. The length of this vector must be at least __vDSP_lenResult + __vDSP_lenFilter - 1. 

__vDSP_signalStride

The stride through __vDSP_signal. 

__vDSP_filter

Input vector B. 

__vDSP_strideFilter

The stride through __vDSP_filter. 

__vDSP_result

Output vector C. 

__vDSP_strideResult

The stride through __vDSP_result. 

__vDSP_lenResult

The length of __vDSP_result. 

__vDSP_lenFilter

The length of __vDSP_filter. 

उदाहरण के लिए, मान लें कि आपके पास float x = [1.0, 2.0, 3.0, 4.0, 5.0] की एक सरणी है। मैं उस के स्वायत्तता को कैसे ले जाऊं?

उत्पादन float y = [5.0, 14.0, 26.0, 40.0, 55.0, 40.0, 26.0, 14.0, 5.0] //generated using Matlab's xcorr(x) function

उत्तर

4

autocorrelation प्रदर्शन करने के लिए कुछ इसी तरह होना चाहिए बस आप के साथ ही एक वेक्टर के पार से संबंध लेने का मतलब है। इसके बारे में कुछ भी नहीं है।

अपने मामले में

हां, तो कार्य करें:

vDSP_conv(x, 1, x, 1, result, 1, 2*len_X-1, len_X); 

जांच एक नमूना कोड अधिक जानकारी के लिए: (जो एक घुमाव करता है)

http://disanji.net/iOS_Doc/#documentation/Performance/Conceptual/vDSP_Programming_Guide/SampleCode/SampleCode.html

संपादित करें: हास्यास्पद पर यह सीमाओं, लेकिन आप एक्स मान को एक निश्चित संख्या के शून्य से ऑफसेट करने की आवश्यकता है, जो सिर्फ पागल है।

निम्नलिखित एक काम कोड, एक्स आप इच्छा के मूल्य के सिर्फ सेट फिल्टर है, और यह सही स्थिति में बाकी रखा जाएगा:

float   *signal, *filter, *result; 

int32_t   signalStride, filterStride, resultStride; 

uint32_t  lenSignal, filterLength, resultLength; 

uint32_t  i; 



filterLength = 5; 

resultLength = filterLength*2 -1; 

lenSignal = ((filterLength + 3) & 0xFFFFFFFC) + resultLength; 



signalStride = filterStride = resultStride = 1; 



printf("\nConvolution (resultLength = %d, " 

     "filterLength = %d)\n\n", resultLength, filterLength); 



/* Allocate memory for the input operands and check its availability. */ 

signal = (float *) malloc(lenSignal * sizeof(float)); 

filter = (float *) malloc(filterLength * sizeof(float)); 

result = (float *) malloc(resultLength * sizeof(float)); 



for (i = 0; i < filterLength; i++) 

    filter[i] = (float)(i+1); 

for (i = 0; i < resultLength; i++) 
    if (i >=resultLength- filterLength) 
     signal[i] = filter[i - filterLength+1]; 


/* Correlation. */ 

vDSP_conv(signal, signalStride, filter, filterStride, 

      result, resultStride, resultLength, filterLength); 


printf("signal: "); 
for (i = 0; i < lenSignal; i++)   
    printf("%2.1f ", signal[i]); 


printf("\n filter: "); 
for (i = 0; i < filterLength; i++) 
    printf("%2.1f ", filter[i]); 

printf("\n result: "); 
for (i = 0; i < resultLength; i++) 
    printf("%2.1f ", result[i]); 


/* Free allocated memory. */ 

free(signal); 

free(filter); 

free(result); 
+0

मैं बस अपना उदाहरण के साथ इस की कोशिश की। लेकिन यह थोड़ा गलत डेटा आउटपुट करता है। मैं क्या गलत कर रहा हूं? x = 1 से 5 और परिणाम आकार 9 (5 * 2 -1) vDSP_conv (x, 1, x, 1, परिणाम, 1, 9, 5) है; -> आउटपुट -> 55.0, 40.0, 26.0, 14.0, 5.0, 0.0, 0.0, 0.0, 2 9 4.0 – MrHappyAsthma

+0

मुझे लगता है कि मैंने गलती की है, आपको ज़ीरो के साथ एक्स पैड करने की आवश्यकता हो सकती है ... मेरे पास मेरा मैक सामने नहीं है मेरे बारे में, लेकिन ऐसा लगता है कि इनपुट लंबे समय तक आउटपुट होना चाहिए (जो कम से कम कहने के लिए अजीब है) – Rasman

+0

Blah: P वह बदबू आ रही है। मैं इसके साथ गड़बड़ करने की कोशिश करो। यदि आप इसे निश्चित रूप से ठीक करने के लिए एक तरीके से आते हैं तो कृपया पोस्ट करें: डी – MrHappyAsthma

संबंधित मुद्दे