Overlap–save method: Difference between revisions

Content deleted Content added
m fixed dashes using a script; dashes
m use \triangleq
Line 1:
'''Overlap–save''' is the traditional name for an efficient way to evaluate the [[Convolution#Discrete convolution|discrete convolution]] between a very long signal <math>x[n]</math> and a [[finite impulse response]] (FIR) filter <math>h[n]</math>''':'''
 
{{NumBlk|:|<math>y[n] = x[n] * h[n] \ \stackrel{\mathrm{def}}{=}triangleq \ \sum_{m=-\infty}^{\infty} h[m] \cdot x[n-m] = \sum_{m=1}^{M} h[m] \cdot x[n-m],\,</math>|{{EquationRef|Eq.1}}}}
 
where h[m]=0 for m outside the region [1, ''M''].
Line 8:
The concept is to compute short segments of ''y''[''n''] of an arbitrary length ''L'', and concatenate the segments together. Consider a segment that begins at ''n'' = ''kL''&nbsp;+&nbsp;''M'', for any integer ''k'', and define''':'''
 
:<math>x_k[n] \ \stackrel{\mathrm{def}}{=}triangleq
\begin{cases}
x[n+kL] & 1 \le n \le L+M-1\\
Line 15:
</math>
 
:<math>y_k[n] \ \stackrel{\mathrm{def}}{=}triangleq \ x_k[n]*h[n] = \sum_{m=1}^{M} h[m] \cdot x_k[n-m].</math>
 
Then, for ''kL''&nbsp;+&nbsp;''M'' &nbsp;≤&nbsp; ''n'' &nbsp;≤&nbsp; ''kL''&nbsp;+&nbsp;''L''&nbsp;+&nbsp;''M''&nbsp;−&nbsp;1, and equivalently ''M'' &nbsp;≤&nbsp; ''n''&nbsp;−&nbsp;''kL'' &nbsp;≤&nbsp; ''L''&nbsp;+&nbsp;''M''&nbsp;−&nbsp;1, we can write''':'''
 
:<math>y[n] = \sum_{m=1}^{M} h[m] \cdot x_k[n-kL-m] \ \ \stackrel{\mathrm{def}}{=}triangleq \ \ y_k[n-kL].</math>
 
The task is thereby reduced to computing ''y''<sub>''k''</sub>[''n''], for ''M'' &nbsp;≤&nbsp; ''n'' &nbsp;≤&nbsp; ''L''&nbsp;+''&nbsp;M''&nbsp;−&nbsp;1. The process described above is illustrated in the accompanying figure.
Line 25:
Now note that if we periodically extend ''x''<sub>''k''</sub>[''n''] with period ''N'' &nbsp;≥&nbsp; ''L''&nbsp;+&nbsp;''M''&nbsp;−&nbsp;1, according to''':'''
 
:<math>x_{k,N}[n] \ \stackrel{\mathrm{def}}{=}triangleq \ \sum_{\ell=-\infty}^{\infty} x_k[n - \ell N],</math>
 
the convolutions &nbsp;<math>(x_{k,N})*h\,</math>&nbsp; and &nbsp;<math>x_k*h\,</math>&nbsp; are equivalent in the region ''M'' &nbsp;≤&nbsp; ''n'' &nbsp;≤&nbsp; ''L''&nbsp;+&nbsp;''M''&nbsp;−&nbsp;1. So it is sufficient to compute the '''N'''-point [[circular convolution|circular (or cyclic) convolution]] of <math>x_k[n]\,</math> with <math>h[n]\,</math>&nbsp; in the region [1,&nbsp;''N'']. &nbsp;The subregion [''M'',&nbsp;''L''&nbsp;+&nbsp;''M''&nbsp;−&nbsp;1] is appended to the output stream, and the other values are <u>discarded</u>.