2016-01-12 33 views
0

對不起,如果我說一些愚蠢的東西,請原諒我: 我試圖將Matlab代碼(下面給出)轉換爲使用HDL編碼器的VHDL代碼。它包含一個名爲sum 。但是當我嘗試它給了我錯誤的代碼轉換:使用Matlab HDL編碼器生成VHDL代碼

生成代碼只支持SumModes「SpecifyPrecision」和 「KeepLSB」爲「SUM」時輸入的大小可以在運行時會有所不同。

但事實是我從來沒有使用功能before.Can任何一個請幫我it.How應該改變我的代碼,將其轉換爲VHDL.It將是非常好的!

function y = fcn(n,y1,y2) 
n=10; 
x1c=zeros(2*n-1,1); 
for i=1:2*n-1 
    if(i>n) 
     j1=1; 
     k1=2*n-i; 
     j2=i-n+1; 
     k2=n; 
    else 
     j1=n-i+1; 
     k1=n; 
     j2=1; 
     k2=i; 
    end 
    x1c(i)=sum((y1(j1:k1)).*y2(j2:k2)); 
end 
x1c=flipud(x1c).'; 
y=x1c; 

這是y1和y2的互相關。 y1和y2是兩個長度相同的矢量,n是y1的長度。我真的卡住了,請幫忙! 在此先感謝!

+0

什麼是反彈? –

+0

@BrianDrummond它只是向上/向下翻轉元素。 – Haider

+0

@BrianDrummond如果你有興趣的話,請不吝賜教。 – Haider

回答

0

@Haider:看看

n=10; 
    y1 = 1:n; 
    y2 = n:-1:1; 
    x1c=zeros(1,2*n-1); 
    for i=1:2*n-1 
     y1_temp = zeros(1,2*n-1); 
     y2_temp = zeros(1,2*n-1); 
     if(i>n) 
      j1=1; 
      k1=2*n-i; 
      j2=i-n+1; 
      k2=n; 
     else 
      j1=n-i+1; 
      k1=n; 
      j2=1; 
      k2=i; 
     end 
     y1_temp(j1:k1) = y1(j1:k1); 
     y2_temp(j1:k1) = y2(j2:k2); 
     x1c(i)=sum(y1_temp.*y2_temp); 
    end 

我比較了Matlab的xcorr功能的結果,似乎向量相反。這是否解決了錯誤?

+0

@ dieli.Thanks for the reply。我必須翻轉載體x1c(i),然後它就像xcorr output一樣。你知道更簡單的方法。 – Haider

+0

你用簡單的方法是什麼意思? – dieli