2016-01-23 90 views
-2

我試圖使MATLAB CONV功能C.到目前爲止,我有這樣的:Matlab的卷積碼

int n=Length(SignalArray); 
int m=Length(FilterArray); 
TempX=[SignalArray,Zeros(1,FilterArray)]; 
TempH=[FilterArray,Zeros(1,SignalArray)]; 
for(int i=0;i<n+m-1;i++){ 
     ResultArray(i)=0; 
     for(int j=0;j<=m-1;j++){ 
      if(i-j+1>0){ 
       int TempVal=ResultArray(i)+TempX(j)*TempH(i-j); 
       ResultArray(i)=TempVal; 
      } 
     } 
    } 

卷積結果的第一要素出來要罰款,但最後一個元素要麼是正確的,要麼是被證明是非常高的數字(類似於權力9的10)。

請幫忙。

+0

這是如何編譯的? –

+0

它沒有。這只是僞代碼。 –

回答

1

好的。所以我使用了下面的函數(其中函數AddAtSpecificIndex具有原型AddAtSpecificIndex(Array,Value,Index)):

// CONVOLVE TWO ARRAYS FUNCTION 
void ConvolveArrays(Array * SignalArray, Array * KernelArray, Array * ResultArray){ 

int m=SignalArray->used; 
int x=KernelArray->used; 

InitNullArray(ResultArray); 

    for (int n=0; n < m+x-1; n++){ 
    int kmin, kmax, k; 
    AddAtSpecificIndex(ResultArray,0,n); 

    if(n>=x-1){kmin= n-x-1;} 
    else{kmin=0;} 

    if(n < m-1){kmax = n;} 
    else{kmax=m-1;} 

     for (k=kmin;k<=kmax;k++) 
     {int TempVal=ResultArray->array[n]+ SignalArray->array[k] * KernelArray->array[n-k];AddAtSpecificIndex(ResultArray,TempVal,n);} 
    } 

}