<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://en.formulasearchengine.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=68.4.97.0%2F24</id>
	<title>formulasearchengine - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://en.formulasearchengine.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=68.4.97.0%2F24"/>
	<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/wiki/Special:Contributions/68.4.97.0/24"/>
	<updated>2026-08-04T16:15:54Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.47.0-wmf.7</generator>
	<entry>
		<id>https://en.formulasearchengine.com/w/index.php?title=Zinc-copper_couple&amp;diff=22129</id>
		<title>Zinc-copper couple</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/w/index.php?title=Zinc-copper_couple&amp;diff=22129"/>
		<updated>2014-01-31T02:19:45Z</updated>

		<summary type="html">&lt;p&gt;68.4.97.46: /* Application */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Overlap–save&#039;&#039;&#039; is the traditional name for an efficient way to evaluate the [[Convolution#Discrete_convolution|discrete convolution]] between a very long signal &amp;lt;math&amp;gt;x[n]&amp;lt;/math&amp;gt; and a [[finite impulse response]] (FIR) filter &amp;lt;math&amp;gt;h[n]&amp;lt;/math&amp;gt;&#039;&#039;&#039;:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{NumBlk|:|&amp;lt;math&amp;gt;y[n] = x[n] * h[n] \ \stackrel{\mathrm{def}}{=} \ \sum_{m=-\infty}^{\infty} h[m] \cdot x[n-m] = \sum_{m=1}^{M} h[m] \cdot x[n-m],\,&amp;lt;/math&amp;gt;|{{EquationRef|Eq.1}}}}&lt;br /&gt;
&lt;br /&gt;
where h[m]=0 for m outside the region [1, &#039;&#039;M&#039;&#039;].&lt;br /&gt;
&lt;br /&gt;
[[Image:Overlap-save algorithm.png|thumb|500px|A sequence of 4 plots depicts one cycle of the Overlap-save convolution algorithm. The 1st plot is a long sequence of data to be processed with a lowpass FIR filter. The 2nd plot is one segment of the data to be processed in piecewise fashion. The 3rd plot is the filtered segment, with the usable portion colored red. The 4th plot shows the filtered segment appended to the output stream.]]&lt;br /&gt;
The concept is to compute short segments of &#039;&#039;y&#039;&#039;[&#039;&#039;n&#039;&#039;] of an arbitrary length &#039;&#039;L&#039;&#039;, and concatenate the segments together.  Consider a segment that begins at &#039;&#039;n&#039;&#039; = &#039;&#039;kL&#039;&#039;&amp;amp;nbsp;+&amp;amp;nbsp;&#039;&#039;M&#039;&#039;, for any integer &#039;&#039;k&#039;&#039;, and define&#039;&#039;&#039;:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;x_k[n]  \ \stackrel{\mathrm{def}}{=}&lt;br /&gt;
\begin{cases}&lt;br /&gt;
x[n+kL] &amp;amp; 1 \le n \le L+M-1\\&lt;br /&gt;
0 &amp;amp; \textrm{otherwise}.&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;y_k[n] \ \stackrel{\mathrm{def}}{=} \ x_k[n]*h[n]\,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, for &#039;&#039;kL&#039;&#039;&amp;amp;nbsp;+&amp;amp;nbsp;&#039;&#039;M&#039;&#039; &amp;amp;nbsp;≤&amp;amp;nbsp; &#039;&#039;n&#039;&#039; &amp;amp;nbsp;≤&amp;amp;nbsp; &#039;&#039;kL&#039;&#039;&amp;amp;nbsp;+&amp;amp;nbsp;&#039;&#039;L&#039;&#039;&amp;amp;nbsp;+&amp;amp;nbsp;&#039;&#039;M&#039;&#039;&amp;amp;nbsp;−&amp;amp;nbsp;1, and equivalently &#039;&#039;M&#039;&#039; &amp;amp;nbsp;≤&amp;amp;nbsp; &#039;&#039;n&#039;&#039;&amp;amp;nbsp;−&amp;amp;nbsp;&#039;&#039;kL&#039;&#039; &amp;amp;nbsp;≤&amp;amp;nbsp; &#039;&#039;L&#039;&#039;&amp;amp;nbsp;+&amp;amp;nbsp;&#039;&#039;M&#039;&#039;&amp;amp;nbsp;−&amp;amp;nbsp;1, we can write&#039;&#039;&#039;:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
y[n] = \sum_{m=1}^{M} h[m] \cdot x_k[n-kL-m]&lt;br /&gt;
&amp;amp;= x_k[n-kL] * h[n] \\&lt;br /&gt;
&amp;amp;\stackrel{\mathrm{def}}{=} \ y_k[n-kL].&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The task is thereby reduced to computing &#039;&#039;y&#039;&#039;&amp;lt;sub&amp;gt;&#039;&#039;k&#039;&#039;&amp;lt;/sub&amp;gt;[&#039;&#039;n&#039;&#039;], for &#039;&#039;M&#039;&#039; &amp;amp;nbsp;≤&amp;amp;nbsp; &#039;&#039;n&#039;&#039; &amp;amp;nbsp;≤&amp;amp;nbsp; &#039;&#039;L&#039;&#039;&amp;amp;nbsp;+&#039;&#039;&amp;amp;nbsp;M&#039;&#039;&amp;amp;nbsp;−&amp;amp;nbsp;1.&lt;br /&gt;
&lt;br /&gt;
Now note that if we periodically extend &#039;&#039;x&#039;&#039;&amp;lt;sub&amp;gt;&#039;&#039;k&#039;&#039;&amp;lt;/sub&amp;gt;[&#039;&#039;n&#039;&#039;] with period &#039;&#039;N&#039;&#039; &amp;amp;nbsp;≥&amp;amp;nbsp; &#039;&#039;L&#039;&#039;&amp;amp;nbsp;+&amp;amp;nbsp;&#039;&#039;M&#039;&#039;&amp;amp;nbsp;−&amp;amp;nbsp;1, according to&#039;&#039;&#039;:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;x_{k,N}[n] \ \stackrel{\mathrm{def}}{=} \ \sum_{k=-\infty}^{\infty} x_k[n - kN],&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
the convolutions &amp;amp;nbsp;&amp;lt;math&amp;gt;(x_{k,N})*h\,&amp;lt;/math&amp;gt;&amp;amp;nbsp; and &amp;amp;nbsp;&amp;lt;math&amp;gt;x_k*h\,&amp;lt;/math&amp;gt;&amp;amp;nbsp; are equivalent in the region &#039;&#039;M&#039;&#039; &amp;amp;nbsp;≤&amp;amp;nbsp; &#039;&#039;n&#039;&#039; &amp;amp;nbsp;≤&amp;amp;nbsp; &#039;&#039;L&#039;&#039;&amp;amp;nbsp;+&amp;amp;nbsp;&#039;&#039;M&#039;&#039;&amp;amp;nbsp;−&amp;amp;nbsp;1.  So it is sufficient to compute the &#039;&#039;&#039;N&#039;&#039;&#039;-point [[circular convolution|circular (or cyclic) convolution]] of &amp;lt;math&amp;gt;x_k[n]\,&amp;lt;/math&amp;gt; with &amp;lt;math&amp;gt;h[n]\,&amp;lt;/math&amp;gt;&amp;amp;nbsp; in the region [1,&amp;amp;nbsp;&#039;&#039;N&#039;&#039;]. &amp;amp;nbsp;The subregion [&#039;&#039;M&#039;&#039;,&amp;amp;nbsp;&#039;&#039;L&#039;&#039;&amp;amp;nbsp;+&amp;amp;nbsp;&#039;&#039;M&#039;&#039;&amp;amp;nbsp;−&amp;amp;nbsp;1] is appended to the output stream, and the other values are &amp;lt;u&amp;gt;discarded&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The advantage is that the circular convolution can be computed very efficiently as follows, according to the [[Discrete_Fourier_transform#Circular_convolution_theorem_and_cross-correlation_theorem|circular convolution theorem]]&#039;&#039;&#039;:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;y_k[n] = \scriptstyle \text{DFT}^{-1} \displaystyle  (\ \scriptstyle \text{DFT} \displaystyle (x_k[n])\cdot \scriptstyle \text{DFT} \displaystyle (h[n])\ ),&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where&#039;&#039;&#039;:&#039;&#039;&#039;&lt;br /&gt;
*DFT and DFT&amp;lt;sup&amp;gt;−1&amp;lt;/sup&amp;gt; refer to the Discrete Fourier transform and inverse Discrete Fourier transform, respectively, evaluated over &#039;&#039;N&#039;&#039; discrete points, and&lt;br /&gt;
*&#039;&#039;N&#039;&#039; is customarily chosen to be an integer power-of-2, which enables use of the [[Fast Fourier transform|FFT]] algorithm.&lt;br /&gt;
&lt;br /&gt;
==Pseudocode==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;(&#039;&#039;Overlap–save algorithm for linear convolution&#039;&#039;)&amp;lt;/span&amp;gt;&lt;br /&gt;
  h = FIR_impulse_response&lt;br /&gt;
  M = length(h)&lt;br /&gt;
  overlap = M-1&lt;br /&gt;
  N = 4*overlap    &amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;(or a nearby power-of-2)&amp;lt;/span&amp;gt;&lt;br /&gt;
  step_size = N-overlap&lt;br /&gt;
  H = DFT(h, N)&lt;br /&gt;
  position = 0&lt;br /&gt;
  &#039;&#039;&#039;while&#039;&#039;&#039; position+N &amp;lt;= length(x)&lt;br /&gt;
      yt = IDFT( DFT( x(1+position : N+position), N ) * H, N )&lt;br /&gt;
      y(1+position : step_size+position) = yt(M : N)    #discard M-1 y-values&lt;br /&gt;
      position = position + step_size&lt;br /&gt;
  &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Efficiency==&lt;br /&gt;
When the DFT and its inverse is implemented by the FFT algorithm, the pseudocode above requires about &#039;&#039;&#039;N log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(N) + N&#039;&#039;&#039; complex multiplications for the FFT, product of arrays, and IFFT.&amp;lt;ref&amp;gt;Cooley-Tukey FFT algorithm for N=2&amp;lt;sup&amp;gt;k&amp;lt;/sup&amp;gt; needs (N/2) log&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;(N) - see [[Fast_Fourier_transform#Definition_and_speed|FFT - Definition and speed]]&amp;lt;/ref&amp;gt;  Each iteration produces &#039;&#039;&#039;N-M+1&#039;&#039;&#039; output samples, so the number of complex multiplications per output sample is about&#039;&#039;&#039;:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{NumBlk|:|&amp;lt;math&amp;gt;\frac{N \log_2(N) + N}{N-M+1}.\,&amp;lt;/math&amp;gt;|{{EquationRef|Eq.2}}}}&lt;br /&gt;
&lt;br /&gt;
For example, when &#039;&#039;&#039;M&#039;&#039;&#039;=201 and &#039;&#039;&#039;N&#039;&#039;&#039;=1024, {{EquationNote|Eq.2}} equals 13.67, whereas direct evaluation of {{EquationNote|Eq.1}} would require up to 201 complex multiplications per output sample, the worst case being when both &#039;&#039;&#039;x&#039;&#039;&#039; and &#039;&#039;&#039;h&#039;&#039;&#039; are complex-valued.  Also note that for any given &#039;&#039;&#039;M&#039;&#039;&#039;, {{EquationNote|Eq.2}} has a minimum with respect to &#039;&#039;&#039;N&#039;&#039;&#039;.  It diverges for both small and large block sizes.&lt;br /&gt;
&lt;br /&gt;
==Overlap–discard==&lt;br /&gt;
&#039;&#039;Overlap–discard&#039;&#039;&amp;lt;ref&amp;gt;Harris 1987.&amp;lt;/ref&amp;gt; and &#039;&#039;Overlap–scrap&#039;&#039;&amp;lt;ref&amp;gt;Frerking 1994.&amp;lt;/ref&amp;gt; are less commonly used labels for the same method described here.  However, these labels are actually better (than &#039;&#039;overlap–save&#039;&#039;) to distinguish from [[Overlap–add method|overlap–add]], because &amp;lt;u&amp;gt;both&amp;lt;/u&amp;gt; methods &amp;quot;save&amp;quot;, but only one discards.  &amp;quot;Save&amp;quot; merely refers to the fact that &#039;&#039;M&#039;&#039;&amp;amp;nbsp;−&amp;amp;nbsp;1 input (or output) samples from segment &#039;&#039;k&#039;&#039; are needed to process segment &#039;&#039;k&#039;&#039; + 1.&lt;br /&gt;
&lt;br /&gt;
===Extending overlap–save===&lt;br /&gt;
The overlap-save algorithm may be extended to include other common operations of a system:&amp;lt;ref&amp;gt;Carlin et al. 1999, p 31, col 20.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Borgerding 2006, pp 158–161.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* additional channels can be processed more cheaply than the first by reusing the forward FFT&lt;br /&gt;
* sampling rates can be changed by using different sized forward and inverse FFTs&lt;br /&gt;
* frequency translation (mixing) can be accomplished by rearranging frequency bins&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*Rabiner, Lawrence R.; Gold, Bernard (1975). &#039;&#039;Theory and application of digital signal processing&#039;&#039;. Englewood Cliffs, N.J.: Prentice-Hall. pp 65–67. [http://isbndb.com/d/book/theory_and_application_of_digital_signal_processing.html ISBN 0139141014].&lt;br /&gt;
*Harris, F.J. (1987). &amp;quot;Time domain signal processing with the DFT&amp;quot;. &#039;&#039;Handbook of Digital Signal Processing&#039;&#039;, D.F.Elliot, ed., San Diego: Academic Press. pp 633–699. [http://isbndb.com/d/book/handbook_of_digital_signal_processing.html ISBN 0122370759].&lt;br /&gt;
*Frerking, Marvin (1994). &#039;&#039;Digital Signal Processing in Communication Systems&#039;&#039;. New York: Van Nostrand Reinhold. [http://isbndb.com/d/book/digital_signal_processing_in_communication_systems.html ISBN 0442016166].&lt;br /&gt;
* {{Citation&lt;br /&gt;
 | inventor-last =Carlin&lt;br /&gt;
 | inventor-first =Joe &lt;br /&gt;
 | inventor2-last =Collins&lt;br /&gt;
 | inventor2-first =Terry &lt;br /&gt;
 | inventor3-last =Hays&lt;br /&gt;
 | inventor3-first =Peter &lt;br /&gt;
 | inventor4-last =Hemmerdinger&lt;br /&gt;
 | inventor4-first =Barry &lt;br /&gt;
 | inventor5-last =Kellogg&lt;br /&gt;
 | inventor5-first =Robert &lt;br /&gt;
 | inventor6-last =Kettig&lt;br /&gt;
 | inventor6-first =Robert &lt;br /&gt;
 | inventor7-last =Lemmon&lt;br /&gt;
 | inventor7-first =Bradley &lt;br /&gt;
 | inventor8-last =Murdock&lt;br /&gt;
 | inventor8-first =Thomas &lt;br /&gt;
 | inventor9-last =Tamaru&lt;br /&gt;
 | inventor9-first =Robert &lt;br /&gt;
 | inventor10-last =Ware&lt;br /&gt;
 | inventor10-first =Stuart &lt;br /&gt;
 | publication-date = 1999&lt;br /&gt;
 | issue-date = 2005&lt;br /&gt;
 | title = Wideband communication intercept and direction finding device using hyperchannelization &lt;br /&gt;
 | country-code = US&lt;br /&gt;
 | description = patent &lt;br /&gt;
 | patent-number = 6898235&lt;br /&gt;
}}&lt;br /&gt;
* {{Citation&lt;br /&gt;
  | last = Borgerding&lt;br /&gt;
  | first = Mark&lt;br /&gt;
  | title = Turning Overlap-Save into a Multiband Mixing, Downsampling Filter Bank&lt;br /&gt;
  | journal = IEEE Signal Processing Magazine&lt;br /&gt;
  | volume = &lt;br /&gt;
  | issue = March 2006&lt;br /&gt;
  | pages = 158–161&lt;br /&gt;
  | year = 2006&lt;br /&gt;
  | url = http://www.3db-labs.com/01598092_MultibandFilterbank.pdf&lt;br /&gt;
  }}&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Overlap-save method}}&lt;br /&gt;
[[Category:Signal processing]]&lt;br /&gt;
[[Category:Transforms]]&lt;br /&gt;
[[Category:Fourier analysis]]&lt;br /&gt;
[[Category:Numerical analysis]]&lt;/div&gt;</summary>
		<author><name>68.4.97.46</name></author>
	</entry>
</feed>