<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: FFT based Cross Correlation ?! in Intel® Integrated Performance Primitives</title>
    <link>https://community.intel.com/t5/Intel-Integrated-Performance/FFT-based-Cross-Correlation/m-p/944344#M17989</link>
    <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;as you can see from IPP header file&lt;/P&gt;&lt;FONT color="#000080" size="2"&gt;
&lt;P&gt;/* //////////////////////////////// Algorithm /////////////////////////////////////&lt;BR /&gt;// Let us examine two variants of cross-correlation:&lt;BR /&gt;// a) srcLen1 &amp;gt; srcLen2, for example&lt;BR /&gt;// pSrc1 = y0,y1,y2,y3,y4,y5,y6,y7,y8 ( srcLen1 = 9 )&lt;BR /&gt;// pSrc2 = x0,x1,x2,x3,x4 ( srcLen2 = 5 )&lt;BR /&gt;// lowLag = -8 ( full cross-correlation )&lt;BR /&gt;// Output will be as below: _&lt;BR /&gt;// x0*y8 &lt;BR /&gt;// x0*y7+x1*y8 | this part has length = first ( see function ),&lt;BR /&gt;// x0*y6+x1*y7+x2*y8 | ownFirstTriangle function is used;&lt;BR /&gt;// x0*y5+x1*y6+x2*y7+x3*y8 _/&lt;BR /&gt;// x0*y4+x1*y5+x2*y6+x3*y7+x4*y8 &lt;BR /&gt;// x0*y3+x1*y4+x2*y5+x3*y6+x4*y7 | this part has length = filter ( see function ),&lt;BR /&gt;// x0*y2+x1*y3+x2*y4+x3*y5+x4*y6 | ownBackFilter function is used;&lt;BR /&gt;// x0*y1+x1*y2+x2*y3+x3*y4+x4*y5_/&lt;BR /&gt;// x0*y0+x1*y1+x2*y2+x3*y3+x4*y4 &lt;BR /&gt;// x1*y0+x2*y1+x3*y2+x4*y3 | this part has length = last ( see function ),&lt;BR /&gt;// x2*y0+x3*y1+x4*y2 | ownLastTriangle function is used,&lt;BR /&gt;// x3*y0+x4*y1 | note: this part starts from lag = 0;&lt;BR /&gt;// x4*y0 _/&lt;BR /&gt;//&lt;BR /&gt;// b) srcLen1 &amp;lt; srcLen2, for example&lt;BR /&gt;// pSrc1 = y0,y1,y2,y3,y4 ( srcLen1 = 5 )&lt;BR /&gt;// pSrc2 = x0,x1,x2,x3,x4,x5,x6,x7,x8 ( srcLen2 = 9 )&lt;BR /&gt;// lowLag = -4 ( full cross-correlation )&lt;BR /&gt;// Output will be as below: _&lt;BR /&gt;// x0*y4 &lt;BR /&gt;// x0*y3+x1*y4 | this part has length = first ( see function ),&lt;BR /&gt;// x0*y2+x1*y3+x2*y4 | ownFirstTriangle function is used;&lt;BR /&gt;// x0*y1+x1*y2+x2*y3+x3*y4 _/&lt;BR /&gt;// x0*y0+x1*y1+x2*y2+x3*y3+x4*y4  note: this part starts from lag = 0,&lt;BR /&gt;// x1*y0+x2*y1+x3*y2+x4*y3+x5*y4 | this part has length = filter ( see function ),&lt;BR /&gt;// x2*y0+x3*y1+x4*y2+x5*y3+x6*y4 | ownForwFilter function is used;&lt;BR /&gt;// x3*y0+x4*y1+x5*y2+x6*y3+x7*y4_/&lt;BR /&gt;// x4*y0+x5*y1+x6*y2+x7*y3+x8*y4 &lt;BR /&gt;// x5*y0+x6*y1+x7*y2+x8*y3 | this part has length = last ( see function ),&lt;BR /&gt;// x6*y0+x7*y1+x8*y2 | ownLastTriangle function is used,&lt;BR /&gt;// x7*y0+x8*y1 |&lt;BR /&gt;// x8*y0 _/&lt;BR /&gt;//&lt;BR /&gt;// As one can see from (a) and (b) the functions ownFirstTriangle and ownLastTriangle&lt;BR /&gt;// are symmetrical, so the same algorithm can be implemented. The same words can be said&lt;BR /&gt;// about the functions ownBackFilter and ownForwFilter.&lt;BR /&gt;//&lt;BR /&gt;// For long enough vectors ( "net" dstLen &amp;gt; IPPSCROSSCORR_START_FFT_USE ) the algorithm&lt;BR /&gt;// with FFT is used instead of direct calculations:&lt;BR /&gt;// pSrc1 = y0,y1,y2,...,y[n-1], srcLen1 = n,&lt;BR /&gt;// pSrc2 = x0,x1,x2,...,x[k-1], srcLen2 = k;&lt;BR /&gt;// l = n + k - 1 - full cross-correlation length;&lt;BR /&gt;// the order of FFT would be "m" from inequality: l &amp;lt;= 2^m;&lt;BR /&gt;// the vectors for transform would be formed as below: ( zero padded )&lt;BR /&gt;// y = y0,y1,y2,...,y[n-1],0&lt;N&gt;,0[n+1],...,0[l-1] "0" means zero here;&lt;BR /&gt;// x = 0[0],0[1],...,0[n-2],x0,x1,x2,...,x[k-1],0,0,...,0[l-1];&lt;BR /&gt;// Y = FFT( y );&lt;BR /&gt;// X = FFT( x );&lt;BR /&gt;// Z = Y~ * X; (~ means complex conjugate );&lt;BR /&gt;// pDst = FFT^(-1)( Z );&lt;BR /&gt;////////////////////////////////////////////////////////////////////////////////////// */&lt;/N&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face="Arial CYR" color="#000080" size="2"&gt;
&lt;P&gt;#define IPPSCROSSCORR_REAL32f_START_FFT_USE 383&lt;BR /&gt;#define IPPSCROSSCORR_REAL64f_START_FFT_USE 511&lt;BR /&gt;#define IPPSCROSSCORR_CPLX32fc_START_FFT_USE 255&lt;BR /&gt;#define IPPSCROSSCORR_CPLX64fc_START_FFT_USE 511&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Regards,&lt;BR /&gt; Vladimir&lt;/P&gt;
&lt;DIV&gt;&lt;/DIV&gt;</description>
    <pubDate>Thu, 16 Mar 2006 04:14:39 GMT</pubDate>
    <dc:creator>Vladimir_Dudnik</dc:creator>
    <dc:date>2006-03-16T04:14:39Z</dc:date>
    <item>
      <title>FFT based Cross Correlation ?!</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/FFT-based-Cross-Correlation/m-p/944343#M17988</link>
      <description>Hello, &lt;BR /&gt;i would like to know if the ippsCrossCorr function is based on the FFT ?&lt;BR /&gt;&lt;BR /&gt;thanx,&lt;BR /&gt;Lutz Altmann</description>
      <pubDate>Fri, 24 Feb 2006 23:47:39 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/FFT-based-Cross-Correlation/m-p/944343#M17988</guid>
      <dc:creator>Lutz_A_</dc:creator>
      <dc:date>2006-02-24T23:47:39Z</dc:date>
    </item>
    <item>
      <title>Re: FFT based Cross Correlation ?!</title>
      <link>https://community.intel.com/t5/Intel-Integrated-Performance/FFT-based-Cross-Correlation/m-p/944344#M17989</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;as you can see from IPP header file&lt;/P&gt;&lt;FONT color="#000080" size="2"&gt;
&lt;P&gt;/* //////////////////////////////// Algorithm /////////////////////////////////////&lt;BR /&gt;// Let us examine two variants of cross-correlation:&lt;BR /&gt;// a) srcLen1 &amp;gt; srcLen2, for example&lt;BR /&gt;// pSrc1 = y0,y1,y2,y3,y4,y5,y6,y7,y8 ( srcLen1 = 9 )&lt;BR /&gt;// pSrc2 = x0,x1,x2,x3,x4 ( srcLen2 = 5 )&lt;BR /&gt;// lowLag = -8 ( full cross-correlation )&lt;BR /&gt;// Output will be as below: _&lt;BR /&gt;// x0*y8 &lt;BR /&gt;// x0*y7+x1*y8 | this part has length = first ( see function ),&lt;BR /&gt;// x0*y6+x1*y7+x2*y8 | ownFirstTriangle function is used;&lt;BR /&gt;// x0*y5+x1*y6+x2*y7+x3*y8 _/&lt;BR /&gt;// x0*y4+x1*y5+x2*y6+x3*y7+x4*y8 &lt;BR /&gt;// x0*y3+x1*y4+x2*y5+x3*y6+x4*y7 | this part has length = filter ( see function ),&lt;BR /&gt;// x0*y2+x1*y3+x2*y4+x3*y5+x4*y6 | ownBackFilter function is used;&lt;BR /&gt;// x0*y1+x1*y2+x2*y3+x3*y4+x4*y5_/&lt;BR /&gt;// x0*y0+x1*y1+x2*y2+x3*y3+x4*y4 &lt;BR /&gt;// x1*y0+x2*y1+x3*y2+x4*y3 | this part has length = last ( see function ),&lt;BR /&gt;// x2*y0+x3*y1+x4*y2 | ownLastTriangle function is used,&lt;BR /&gt;// x3*y0+x4*y1 | note: this part starts from lag = 0;&lt;BR /&gt;// x4*y0 _/&lt;BR /&gt;//&lt;BR /&gt;// b) srcLen1 &amp;lt; srcLen2, for example&lt;BR /&gt;// pSrc1 = y0,y1,y2,y3,y4 ( srcLen1 = 5 )&lt;BR /&gt;// pSrc2 = x0,x1,x2,x3,x4,x5,x6,x7,x8 ( srcLen2 = 9 )&lt;BR /&gt;// lowLag = -4 ( full cross-correlation )&lt;BR /&gt;// Output will be as below: _&lt;BR /&gt;// x0*y4 &lt;BR /&gt;// x0*y3+x1*y4 | this part has length = first ( see function ),&lt;BR /&gt;// x0*y2+x1*y3+x2*y4 | ownFirstTriangle function is used;&lt;BR /&gt;// x0*y1+x1*y2+x2*y3+x3*y4 _/&lt;BR /&gt;// x0*y0+x1*y1+x2*y2+x3*y3+x4*y4  note: this part starts from lag = 0,&lt;BR /&gt;// x1*y0+x2*y1+x3*y2+x4*y3+x5*y4 | this part has length = filter ( see function ),&lt;BR /&gt;// x2*y0+x3*y1+x4*y2+x5*y3+x6*y4 | ownForwFilter function is used;&lt;BR /&gt;// x3*y0+x4*y1+x5*y2+x6*y3+x7*y4_/&lt;BR /&gt;// x4*y0+x5*y1+x6*y2+x7*y3+x8*y4 &lt;BR /&gt;// x5*y0+x6*y1+x7*y2+x8*y3 | this part has length = last ( see function ),&lt;BR /&gt;// x6*y0+x7*y1+x8*y2 | ownLastTriangle function is used,&lt;BR /&gt;// x7*y0+x8*y1 |&lt;BR /&gt;// x8*y0 _/&lt;BR /&gt;//&lt;BR /&gt;// As one can see from (a) and (b) the functions ownFirstTriangle and ownLastTriangle&lt;BR /&gt;// are symmetrical, so the same algorithm can be implemented. The same words can be said&lt;BR /&gt;// about the functions ownBackFilter and ownForwFilter.&lt;BR /&gt;//&lt;BR /&gt;// For long enough vectors ( "net" dstLen &amp;gt; IPPSCROSSCORR_START_FFT_USE ) the algorithm&lt;BR /&gt;// with FFT is used instead of direct calculations:&lt;BR /&gt;// pSrc1 = y0,y1,y2,...,y[n-1], srcLen1 = n,&lt;BR /&gt;// pSrc2 = x0,x1,x2,...,x[k-1], srcLen2 = k;&lt;BR /&gt;// l = n + k - 1 - full cross-correlation length;&lt;BR /&gt;// the order of FFT would be "m" from inequality: l &amp;lt;= 2^m;&lt;BR /&gt;// the vectors for transform would be formed as below: ( zero padded )&lt;BR /&gt;// y = y0,y1,y2,...,y[n-1],0&lt;N&gt;,0[n+1],...,0[l-1] "0" means zero here;&lt;BR /&gt;// x = 0[0],0[1],...,0[n-2],x0,x1,x2,...,x[k-1],0,0,...,0[l-1];&lt;BR /&gt;// Y = FFT( y );&lt;BR /&gt;// X = FFT( x );&lt;BR /&gt;// Z = Y~ * X; (~ means complex conjugate );&lt;BR /&gt;// pDst = FFT^(-1)( Z );&lt;BR /&gt;////////////////////////////////////////////////////////////////////////////////////// */&lt;/N&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face="Arial CYR" color="#000080" size="2"&gt;
&lt;P&gt;#define IPPSCROSSCORR_REAL32f_START_FFT_USE 383&lt;BR /&gt;#define IPPSCROSSCORR_REAL64f_START_FFT_USE 511&lt;BR /&gt;#define IPPSCROSSCORR_CPLX32fc_START_FFT_USE 255&lt;BR /&gt;#define IPPSCROSSCORR_CPLX64fc_START_FFT_USE 511&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Regards,&lt;BR /&gt; Vladimir&lt;/P&gt;
&lt;DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Thu, 16 Mar 2006 04:14:39 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Integrated-Performance/FFT-based-Cross-Correlation/m-p/944344#M17989</guid>
      <dc:creator>Vladimir_Dudnik</dc:creator>
      <dc:date>2006-03-16T04:14:39Z</dc:date>
    </item>
  </channel>
</rss>

