Content deleted Content added
add a figure and more discussion of efficiency |
Citation bot (talk | contribs) Added bibcode. Removed URL that duplicated identifier. Removed parameters. | Use this bot. Report bugs. | Suggested by Headbomb | Linked from Wikipedia:WikiProject_Academic_Journals/Journals_cited_by_Wikipedia/Sandbox | #UCB_webform_linked 986/990 |
||
(35 intermediate revisions by 17 users not shown) | |||
Line 1:
In [[signal processing]], '''
{{Equation box 1
|indent= |cellpadding= 0 |border= 0 |background colour=white
|equation={{NumBlk|:|<math>
y[n] = x[n] * h[n]
\ \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 {{nowrap|''h''[''m''] {{=}} 0}} for ''m'' outside the region {{nowrap|[1, ''M'']}}.
This article uses common abstract notations, such as <math display="inline">y(t) = x(t) * h(t),</math> or <math display="inline">y(t) = \mathcal{H}\{x(t)\},</math> in which it is understood that the functions should be thought of in their totality, rather than at specific instants <math display="inline">t</math> (see [[Convolution#Notation]]).
[[Image:Overlap-save algorithm.svg|thumb|right|500px|Fig 1: A sequence of
The concept is to compute short segments of ''y''[''n''] of an arbitrary length ''L'', and concatenate the segments together. That requires longer input segments that overlap the next input segment. The overlapped data gets "saved" and used a second time.<ref name=OLA/> First we describe that process with just conventional convolution for each output segment. Then we describe how to replace that convolution with a more efficient method.
:<math>x_k[n] \ \triangleq
\begin{cases}
x[n+kL], & 1 \le n \le L+M-1\\
0, & \textrm{otherwise}.
\end{cases}
</math>
:<math>y_k[n] \ \triangleq \ x_k[n]*h[n]
Then, for <math>kL+M+1 \le n \le kL+L+M</math>, and equivalently <math>M+1 \le n-kL \le L+M</math>, we can write:
:<math>y[n] = \sum_{m=1}^{M} h[m] \cdot x_k[n-kL-m] \ \ \triangleq \ \ y_k[n-kL].</math>
With the substitution
|Shifting the undesirable edge effects to the last M-1 outputs is a potential run-time convenience, because the IDFT can be computed in the <math>y[n]</math> buffer, instead of being computed and copied. Then the edge effects can be overwritten by the next IDFT. A subsequent footnote explains how the shift is done, by a time-shift of the impulse response.}}'''
:<math>x_{k,N}[n] \ \triangleq \ \sum_{\ell=-\infty}^{\infty} x_k[n - \ell N],</math>
the convolutions <math>(x_{k,N})*h\,</math> and <math>x_k*h\,</math> are equivalent in the region
{{Equation box 1
{{NumBlk|:|<math>y_k[n] = \scriptstyle \text{DFT}^{-1} \displaystyle (\ \scriptstyle \text{DFT} \displaystyle (x_k[n])\cdot \scriptstyle \text{DFT} \displaystyle (h[n])\ ),</math>|{{EquationRef|Eq.2}}}}▼
|indent= |cellpadding= 0 |border= 0 |background colour=white
▲|equation={{NumBlk|:|<math>y_k[n]\ =\ \scriptstyle \text{
|{{EquationRef|Eq.2}}}}}}
where''':'''
*DFT<sub>N</sub> and
*{{math|L}} is customarily chosen such that {{math|N {{=}} L+M-1}} is an integer power-of-2, and the transforms are implemented with the [[Fast Fourier transform|FFT]] algorithm, for efficiency.
*
|Not to be confused with the [[Overlap-add method]], which preserves separate leading and trailing edge-effects.
}} and subsequently discarded.{{efn-ua
|1=The edge effects can be moved from the front to the back of the IDFT output by replacing <math>\scriptstyle \text{DFT}_N \displaystyle (h[n])</math> with <math>\scriptstyle \text{DFT}_N \displaystyle (h[n+M-1]) =\ \scriptstyle \text{DFT}_N \displaystyle (h[n+M-1-N]),</math> meaning that the N-length buffer is ''circularly-shifted'' (rotated) by M-1 samples. Thus the h(M) element is at n=1. The h(M-1) element is at n=N. h(M-2) is at n=N-1. Etc.}}
==Pseudocode==
<
h = FIR_impulse_response
M = length(h)
Line 59 ⟶ 72:
[[Image:FFT_size_vs_filter_length_for_Overlap-add_convolution.svg|thumb|400px|Fig 2: A graph of the values of N (an integer power of 2) that minimize the cost function <math>\tfrac{N\left(\log_2 N + 1\right)}{N - M + 1}</math>]]
When the DFT and
|1=Cooley–Tukey FFT algorithm for N=2<sup>k</sup> needs (N/2) log<sub>2</sub>(N) – see [[Fast Fourier transform#Definition
}} Each iteration produces {{nowrap|'''N-M+1'''}} output samples, so the number of complex multiplications per output sample is about''':'''
{{Equation box 1
{{NumBlk|:|<math>\frac{N (\log_2(N) + 1)}{N-M+1}.\,</math>|{{EquationRef|Eq.3}}}}▼
|indent= |cellpadding= 0 |border= 0 |background colour=white
▲|equation={{NumBlk|:|<math>\frac{N (\log_2(N) + 1)}{N-M+1}.\,</math>
|{{EquationRef|Eq.3}}}}}}
For example, when
Instead of {{EquationNote|Eq.1}}, we can also consider applying {{EquationNote|Eq.2}} to a long sequence of length <math>N_x</math> samples. The total number of complex multiplications would be:
Line 75 ⟶ 91:
:<math>N_x\cdot (\log_2(N) + 1)\cdot \frac{N}{N-M+1}.</math>
Hence the ''cost'' of the overlap–save method scales almost as <math>O\left(N_x\log_2 N\right)</math> while the cost of a single, large circular convolution is almost <math>O\left(N_x\log_2 N_x \right)</math>.
==Overlap–discard==
''Overlap–discard''<ref
===Extending overlap–save===
The overlap–save algorithm
|[[#refCarlin|Carlin et al. 1999]], p 31, col 20.
}}<ref name=Borgerding/>
* additional IFFT channels can be processed more cheaply than the first by reusing the forward FFT
* sampling rates can be changed by using different sized forward and inverse FFTs
* frequency translation (mixing) can be accomplished by rearranging frequency bins
== See also ==
* [[Overlap–add method]]
* [[Circular convolution#Example]]
==Notes==
Line 96 ⟶ 113:
==References==
{{reflist
<ref name=f.harris>
{{cite book |author=Harris, F.J. |year=1987 |title=Handbook of Digital Signal Processing |editor=D.F.Elliot |___location=San Diego |publisher=Academic Press |pages=633–699 |isbn=0122370759
<ref name=OLA>
{{cite web|url=https://www.dsprelated.com/freebooks/sasp/Overlap_Add_OLA_STFT_Processing.html|title=Overlap-Add (OLA) STFT Processing {{!}} Spectral Audio Signal Processing |website=www.dsprelated.com |access-date=2024-03-02 |quote=The name overlap-save comes from the fact that L-1 samples of the previous frame [here: M-1 samples of the current frame] are saved for computing the next frame.
}}</ref>
<ref name=Frerking>
{{cite book |author=Frerking, Marvin |year=1994 |title=Digital Signal Processing in Communication Systems |___location=New York |publisher=Van Nostrand Reinhold |isbn=0442016166
}}</ref>
<ref name=Borgerding>
{{cite journal
| last =Borgerding |first=Mark |title=Turning Overlap–Save into a Multiband Mixing, Downsampling Filter Bank
| journal =IEEE Signal Processing Magazine |issue= March 2006 |pages=158–161 |year=2006
|volume=23 |doi=10.1109/MSP.2006.1598092 |bibcode=2006ISPM...23..158B }}</ref>
}}
{{refbegin}}
#<li value="4">{{Cite book
| ref=refRabiner
| author1=Rabiner, Lawrence R.
| author2=Gold, Bernard
Line 108 ⟶ 144:
| chapter=2.25
| pages=[https://archive.org/details/theoryapplicatio00rabi/page/63 63–67]
| chapter-url-access=registration
| chapter-url=https://archive.org/details/theoryapplicatio00rabi/page/67
}}
#{{cite patent
|
|invent1=Carlin, Joe
|
|invent3=Hays, Peter
|invent4=Hemmerdinger, Barry E. Kellogg, Robert L. Kettig, Robert L. Lemmon, Bradley K. Murdock, Thomas E. Tamaru, Robert S. Ware, Stuart M.
|pubdate=1999-12-10
|fdate=1999-12-10
|gdate=2005-05-24
}}, <!--template creates link to worldwide.espacenet.com-->also available at https://patentimages.storage.googleapis.com/4d/39/2a/cec2ae6f33c1e7/US6898235.pdf
▲ | title = Wideband communication intercept and direction finding device using hyperchannelization
▲ | country-code = US
▲ | description = patent
▲ | patent-number = 6898235
▲}}</li>
{{refend}}
== External links ==
* Dr. Deepa Kundur, [https://www.comm.utoronto.ca/~dkundur/course_info/real-time-DSP/notes/8_Kundur_Overlap_Save_Add.pdf Overlap Add and Overlap Save], University of Toronto
{{DEFAULTSORT:Overlap-save method}}
|