Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Short-time Fourier transform
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Fourier-related transform suited to signals that change rather quickly in time}} The '''short-time Fourier transform''' ('''STFT''') is a [[List of Fourier-related transforms|Fourier-related transform]] used to determine the sinusoidal frequency and phase content of local sections of a signal as it changes over time.<ref>{{cite journal |author1=Sejdić E. |author2=Djurović I. |author3=Jiang J. | year = 2009 | title = Time-frequency feature representation using energy concentration: An overview of recent advances | journal = Digital Signal Processing | volume = 19 | issue = 1| pages = 153–183 | doi=10.1016/j.dsp.2007.12.004|bibcode=2009DSP....19..153S }}</ref> In practice, the procedure for computing STFTs is to divide a longer time signal into shorter segments of equal length and then compute the Fourier transform separately on each shorter segment. This reveals the Fourier spectrum on each shorter segment. One then usually plots the changing spectra as a function of time, known as a [[spectrogram]] or [[waterfall plot]], such as commonly used in [[Software Defined Radio|software defined radio]] (SDR) based spectrum displays. Full bandwidth displays covering the whole range of an SDR commonly use fast Fourier transforms (FFTs) with 2^24 points on desktop computers.{{citation needed|date=August 2024}} [[File:Spectrogram-19thC.png|thumb|400px|A spectrogram visualizing the results of a STFT of the words "nineteenth century". Here, frequencies are shown increasing up the vertical axis, and time on the horizontal axis. The legend to the right shows that the color intensity increases with the density.]] == Forward STFT == === Continuous-time STFT === Simply, in the continuous-time case, the function to be transformed is multiplied by a [[window function]] which is nonzero for only a short period of time. The [[Fourier transform]] (a one-dimensional function) of the resulting signal is taken, then the window is slid along the time axis until the end resulting in a two-dimensional representation of the signal. Mathematically, this is written as: :<math>\mathbf{STFT}\{x(t)\}(\tau,\omega) \equiv X(\tau, \omega) = \int_{-\infty}^{\infty} x(t) w(t-\tau) e^{-i \omega t} \, d t </math> where <math>w(\tau)</math> is the [[window function]], commonly a [[Window function#Hann and Hamming windows|Hann window]] or [[Window function#Gaussian window|Gaussian window]] centered around zero, and <math>x(t)</math> is the signal to be transformed (note the difference between the window function <math>w</math> and the frequency <math>\omega</math>). <math>X(\tau, \omega)</math> is essentially the Fourier transform of <math>x(t)w(t-\tau)</math>, a [[complex function]] representing the phase and magnitude of the signal over time and frequency. Often [[phase unwrapping]] is employed along either or both the time axis, <math>\tau</math>, and frequency axis, <math>\omega</math>, to suppress any [[jump discontinuity]] of the phase result of the STFT. The time index <math>\tau</math> is normally considered to be "''slow''" time and usually not expressed in as high resolution as time <math>t</math>. Given that the STFT is essentially a Fourier transform times a window function, the STFT is also called windowed Fourier transform or time-dependent Fourier transform. === Discrete-time STFT === {{See also|Modified discrete cosine transform}} In the discrete time case, the data to be transformed could be broken up into chunks or frames (which usually overlap each other, to reduce artifacts at the boundary). Each chunk is [[Fourier transform]]ed, and the complex result is added to a matrix, which records magnitude and phase for each point in time and frequency. This can be expressed as: :<math>\mathbf{STFT}\{x[n]\}(m,\omega)\equiv X(m,\omega) = \sum_{n=0}^{N-1} x[n]w[n-m]e^{-i \omega n} </math> likewise, with signal <math>x[n]</math> and window <math>w[n]</math>. In this case, ''m'' is discrete and ω is continuous, but in most typical applications the STFT is performed on a computer using the [[fast Fourier transform]], so both variables are discrete and [[Quantization (signal processing)|quantized]]. The [[magnitude (mathematics)|magnitude]] squared of the STFT yields the [[spectrogram]] representation of the power spectral density of the function: :<math>\operatorname{spectrogram}\{x(t)\}(\tau, \omega) \equiv |X(\tau, \omega)|^2 </math> See also the [[modified discrete cosine transform]] (MDCT), which is also a Fourier-related transform that uses overlapping windows. ==== Sliding DFT ==== If only a small number of ω are desired, or if the STFT is desired to be evaluated for every shift ''m'' of the window, then the STFT may be more efficiently evaluated using a [[sliding DFT]] algorithm.<ref>E. Jacobsen and R. Lyons, [https://ieeexplore.ieee.org/document/1184347/;jsessionid=4C7542A520E95FD20371713367DD1C7F?arnumber=1184347 The sliding DFT], ''Signal Processing Magazine'' vol. 20, issue 2, pp. 74–80 (March 2003).</ref> == Inverse STFT == The STFT is [[invertible function|invertible]], that is, the original signal can be recovered from the transform by the inverse STFT. The most widely accepted way of inverting the STFT is by using the [[Overlap–add method|overlap-add (OLA) method]], which also allows for modifications to the STFT complex spectrum. This makes for a versatile signal processing method,<ref>{{cite journal | author = Jont B. Allen |date=June 1977 | title = Short Time Spectral Analysis, Synthesis, and Modification by Discrete Fourier Transform | journal = IEEE Transactions on Acoustics, Speech, and Signal Processing | volume = ASSP-25 | number = 3 | pages = 235–238 |doi=10.1109/TASSP.1977.1162950 }}</ref> referred to as the ''overlap and add with modifications'' method. === Continuous-time STFT === Given the width and definition of the window function ''w''(''t''), we initially require the area of the window function to be scaled so that :<math> \int_{-\infty}^{\infty} w(\tau) \, d\tau = 1.</math> It easily follows that :<math> \int_{-\infty}^{\infty} w(t-\tau) \, d\tau = 1 \quad \forall \ t </math> and :<math> x(t) = x(t) \int_{-\infty}^{\infty} w(t-\tau) \, d\tau = \int_{-\infty}^{\infty} x(t) w(t-\tau) \, d\tau. </math> The continuous Fourier transform is :<math> X(\omega) = \int_{-\infty}^{\infty} x(t) e^{-i \omega t} \, dt. </math> Substituting ''x''(''t'') from above: :<math> X(\omega) = \int_{-\infty}^{\infty} \left[ \int_{-\infty}^{\infty} x(t) w(t-\tau) \, d\tau \right] \, e^{-i \omega t} \, dt </math> :::<math> = \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} x(t) w(t-\tau) \, e^{-i \omega t} \, d\tau \, dt. </math> Swapping order of integration: :<math> X(\omega) = \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} x(t) w(t-\tau) \, e^{-i \omega t} \, dt \, d\tau </math> :::<math> = \int_{-\infty}^{\infty} \left[ \int_{-\infty}^{\infty} x(t) w(t-\tau) \, e^{-i \omega t} \, dt \right] \, d\tau </math> :::<math> = \int_{-\infty}^{\infty} X(\tau, \omega) \, d\tau. </math> So the Fourier transform can be seen as a sort of phase coherent sum of all of the STFTs of ''x''(''t''). Since the inverse Fourier transform is :<math> x(t) = \frac{1}{2 \pi} \int_{-\infty}^{\infty} X(\omega) e^{+i \omega t} \, d\omega, </math> then ''x''(''t'') can be recovered from ''X''(τ,ω) as :<math> x(t) = \frac{1}{2 \pi} \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} X(\tau, \omega) e^{+i \omega t} \, d\tau \, d\omega. </math> or :<math> x(t) = \int_{-\infty}^{\infty} \left[ \frac{1}{2 \pi} \int_{-\infty}^{\infty} X(\tau, \omega) e^{+i \omega t} \, d\omega \right] \, d\tau. </math> It can be seen, comparing to above that windowed "grain" or "wavelet" of ''x''(''t'') is :<math> x(t) w(t-\tau) = \frac{1}{2 \pi} \int_{-\infty}^{\infty} X(\tau, \omega) e^{+i \omega t} \, d\omega. </math> the inverse Fourier transform of ''X''(τ,ω) for τ fixed. An alternative definition that is valid only in the vicinity of τ, the inverse transform is: :<math>x(t) = \frac{1}{w(t-\tau)}\frac{1}{2 \pi} \int_{-\infty}^{\infty} X(\tau, \omega) e^{+i \omega t} \, d\omega.</math> In general, the window function <math>w(t)</math> has the following properties: :(a) even symmetry: <math>w(t) = w(-t)</math>;<br /> :(b) non-increasing (for positive time): <math>w(t) \geq w(s)</math> if <math>|t| \leq |s|</math>;<br /> :(c) compact support: <math>w(t)</math> is equal to zero when |t| is large. == Resolution issues == {{Further|Gabor limit|Küpfmüller's uncertainty principle}} One of the pitfalls of the STFT is that it has a fixed resolution. The width of the windowing function relates to how the signal is represented—it determines whether there is good frequency resolution (frequency components close together can be separated) or good time resolution (the time at which frequencies change). A wide window gives better frequency resolution but poor time resolution. A narrower window gives good time resolution but poor frequency resolution. These are called narrowband and wideband transforms, respectively. [[Image:STFT - windows-en.svg|thumb|400px|none|Comparison of STFT resolution. Left has better time resolution, and right has better frequency resolution.]] This is one of the reasons for the creation of the [[wavelet transform]] and [[multiresolution analysis]], which can give good time resolution for high-frequency events and good frequency resolution for low-frequency events, the combination best suited for many real signals. This property is related to the [[Werner Heisenberg|Heisenberg]] [[uncertainty principle]], but not directly – see [[Gabor limit]] for discussion. The product of the standard deviation in time and frequency is limited. The boundary of the uncertainty principle (best simultaneous resolution of both) is reached with a Gaussian window function (or mask function), as the Gaussian minimizes the [[Fourier uncertainty principle]]. This is called the [[Gabor transform]] (and with modifications for multiresolution becomes the [[Morlet wavelet]] transform). One can consider the STFT for varying window size as a two-dimensional domain (time and frequency), as illustrated in the example below, which can be calculated by varying the window size. However, this is no longer a strictly time-frequency representation – the kernel is not constant over the entire signal. === Examples === When the original function is: [[File:Window B.png|thumb|]] :<math>X(t,f) = \int^\infty_{-\infty}w(t-\tau) x(\tau) e^{-j 2 \pi f \tau} d\tau</math> We can have a simple example: w(t) = 1 for |t| smaller than or equal B w(t) = 0 otherwise B = window Now the original function of the Short-time Fourier transform can be changed as :<math>X(t,f) = \int^{t+B}_{t-B}x(\tau) e^{-j 2 \pi f \tau} d\tau</math> Another example: Using the following sample signal <math>x(t)</math> that is composed of a set of four sinusoidal waveforms joined together in sequence. Each waveform is only composed of one of four frequencies (10, 25, 50, 100 [[hertz|Hz]]). The definition of <math>x(t)</math> is: :<math>x(t)=\begin{cases} \cos (2 \pi 10 t) & 0\,\mathrm{s} \le t < 5 \,\mathrm{s} \\ \cos (2 \pi 25 t) & 5\,\mathrm{s} \le t < 10\,\mathrm{s} \\ \cos (2 \pi 50 t) & 10\,\mathrm{s} \le t < 15\,\mathrm{s} \\ \cos (2 \pi 100 t) & 15\,\mathrm{s} \le t < 20\,\mathrm{s} \\ \end{cases}</math> Then it is sampled at 400 Hz. The following spectrograms were produced: {| |- |[[Image:STFT colored spectrogram 25ms.png|thumb|300px|25 ms window]] |[[Image:STFT colored spectrogram 125ms.png|thumb|300px|125 ms window]] |- |[[Image:STFT colored spectrogram 375ms.png|thumb|300px|375 ms window]] |[[Image:STFT colored spectrogram 1000ms.png|thumb|300px|1000 ms window]] |- |} {{clear}} The 25 ms window allows us to identify a precise time at which the signals change but the precise frequencies are difficult to identify. At the other end of the scale, the 1000 ms window allows the frequencies to be precisely seen but the time between frequency changes is blurred. Other examples: [[File:Gausian B.png|thumb|]] :<math>w(t) = exp(\sigma-t^{2})</math> Normally we call <math>exp(\sigma-t^{2})</math> a [[Gaussian function]] or Gabor function. When we use it, the short-time Fourier transform is called the "Gabor transform". === Explanation === It can also be explained with reference to the sampling and [[Nyquist frequency]]. Take a window of ''N'' samples from an arbitrary real-valued signal at sampling rate ''f''<sub>s</sub> . Taking the Fourier transform produces ''N'' complex coefficients. Of these coefficients only half are useful (the last ''N/2'' being the [[complex conjugate]] of the first ''N/2'' in reverse order, as this is a real valued signal). These ''N/2'' coefficients represent the frequencies 0 to ''f''<sub>s</sub>/2 (Nyquist) and two consecutive coefficients are spaced apart by ''f''<sub>s</sub>/''N'' Hz. To increase the frequency resolution of the window the frequency spacing of the coefficients needs to be reduced. There are only two variables, but decreasing ''f''<sub>s</sub> (and keeping ''N'' constant) will cause the window size to increase — since there are now fewer samples per unit time. The other alternative is to increase ''N'', but this again causes the window size to increase. So any attempt to increase the frequency resolution causes a larger window size and therefore a reduction in time resolution—and vice versa. == Rayleigh frequency == As the [[Nyquist frequency]] is a limitation in the maximum frequency that can be meaningfully analysed, so is the Rayleigh frequency a limitation on the minimum frequency. The Rayleigh frequency is the minimum frequency that can be resolved by a finite duration time window.<ref>{{cite journal | last1 = Kleinfeld | first1 = David | last2 = Mitra | first2 = Partha P. | date = March 2014 | doi = 10.1101/pdb.top081075 | issue = 3 | journal = Cold Spring Harbor Protocols | title = Spectral methods for functional brain imaging | url = https://scholar.archive.org/work/ofowcbyne5gdpbtmogxvpdp5au | volume = 2014| pages = 248–262 | pmid = 24591695 }}</ref><ref>{{Cite web | url=http://fieldtrip.fcdonders.nl/faq/what_does_padding_not_sufficient_for_requested_frequency_resolution_mean |title = What does "padding not sufficient for requested frequency resolution" mean? – FieldTrip toolbox}}</ref> Given a time window that is Τ seconds long, the minimum frequency that can be resolved is 1/Τ Hz. The Rayleigh frequency is an important consideration in applications of the short-time Fourier transform (STFT), as well as any other method of harmonic analysis on a signal of finite record-length.<ref>{{cite journal | pmc = 2441488 | pmid=18293071 | doi=10.1007/s10827-007-0066-2 | volume=25 | issue=1 | title=Biased competition through variations in amplitude of gamma-oscillations | year=2008 | journal=J Comput Neurosci | pages=89–107 |vauthors=Zeitler M, Fries P, Gielen S }}</ref><ref>{{Cite journal|last1=Wingerden|first1=Marijn van|last2=Vinck|first2=Martin|last3=Lankelma|first3=Jan|author4-link=Cyriel Pennartz|last4=Pennartz|first4=Cyriel M. A.|date=2010-05-19|title=Theta-Band Phase Locking of Orbitofrontal Neurons during Reward Expectancy|journal=Journal of Neuroscience|language=en|volume=30|issue=20|pages=7078–7087|doi=10.1523/JNEUROSCI.3860-09.2010|issn=0270-6474|pmid=20484650|pmc=6632657}}</ref> == Application == [[File:Short time fourier transform.PNG|thumb|upright=1.2|right|An STFT being used to analyze an audio signal across time]] STFTs as well as standard Fourier transforms and other tools are frequently used to analyze music. The [[spectrogram]] can, for example, show frequency on the horizontal axis, with the lowest frequencies at left, and the highest at the right. The height of each bar (augmented by color) represents the [[amplitude]] of the frequencies within that band. The depth dimension represents time, where each new bar was a separate distinct transform. Audio engineers use this kind of visual to gain information about an audio sample, for example, to locate the frequencies of specific noises (especially when used with greater frequency resolution) or to find frequencies which may be more or less resonant in the space where the signal was recorded. This information can be used for [[Equalization (audio)|equalization]] or tuning other audio effects. == Implementation == Original function :<math>X(t,f) = \int^\infty_{-\infty}w(t-\tau) x(\tau) e^{-j 2 \pi f \tau} d\tau</math> Converting into the discrete form: :<math>t = n\Delta_t, f=m\Delta_f, \tau =p\Delta_t</math> :<math>X(n\Delta_t, m\Delta_f)=\sum^\infty_{-\infty}w((n-p)\Delta_t)x(p\Delta_t)e^{-j 2 \pi p m \Delta_t \Delta_f}\Delta_t</math> Suppose that :<math>w(t) \cong 0 \text{ for } |t|>B, \frac{B}{\Delta_t}=Q</math> Then we can write the original function into :<math>X(n\Delta_t, m\Delta_f)= \sum^{n+Q}_{p=n-Q}w((n-p)\Delta_t)x(p\Delta_t)e^{-j 2 \pi p m \Delta_t \Delta_f}\Delta_t</math> === Direct implementation === ==== Constraints ==== a. Nyquist criterion (avoiding the aliasing effect): :<math>\Delta_t < \frac{1}{2\Omega}</math>, where <math>\Omega</math> is the bandwidth of <math>x(\tau) w(t-\tau)</math> === FFT-based method === ==== Constraint ==== a. <math>\Delta_t \Delta_f = \tfrac{1}{N}</math>, where <math>N</math> is an integer b. <math>N \geq 2Q+1</math> c. Nyquist criterion (avoiding the aliasing effect): :<math>\Delta_t < \frac{1}{2\Omega}</math>, <math>\Omega</math> is the bandwidth of <math>x(\tau) w(t-\tau)</math> :<math>X(n\Delta_t, m\Delta_f) = \sum_{p=n-Q}^{n+Q} w((n - p)\Delta_t)x(p\Delta_t) e^{-\frac{2\pi jpm}{N}}\Delta_t</math> :<math>\text{if we have } q = p - (n - Q), \text{ then } p = (n - Q) + q</math> :<math> X(n\Delta_t, m\Delta_f) = \Delta_t e^{\frac{2\pi j(Q - n)m}{N}} \sum_{q=0}^{N-1} x_1(q)e^{-\frac{2\pi jqm}{N}}</math> :<math>\text{where } x_1(q) = \begin{cases} w((Q - q)\Delta_t)x((n - Q + q)\Delta_t) & 0 \leq q \leq 2Q\\ 0 & 2Q < q < N \end{cases}</math> === Recursive method === ==== Constraint ==== a. <math>\Delta_t \Delta_f = \tfrac{1}{N}</math>, where <math>N</math> is an integer b. <math>N \geq 2Q+1</math> c. Nyquist criterion (avoiding the aliasing effect): :<math>\Delta_t < \frac{1}{2\Omega}</math>, <math>\Omega</math> is the bandwidth of <math>x(\tau) w(t-\tau)</math> d. Only for implementing the [[Rectangular mask short-time Fourier transform|rectangular-STFT]] Rectangular window imposes the constraint :<math>w((n - p)\Delta_t) = 1 </math> Substitution gives: :<math> \begin{align} X(n\Delta_t, m\Delta_f) &= \sum_{p=n-Q}^{n+Q} w((n - p)\Delta_t)&x(p\Delta_t) e^{-\frac{j2\pi pm}{N}}\Delta_t \\ &= \sum_{p=n-Q}^{n+Q} &x(p\Delta_t) e^{-\frac{j2\pi pm}{N}}\Delta_t \\ \end{align} </math> Change of variable {{math|''n''-1}} for {{math|''n''}}: :<math> X((n-1)\Delta_t, m\Delta_f) = \sum_{p=n-1-Q}^{n-1+Q} x(p\Delta_t) e^{-\frac{j2\pi pm}{N}}\Delta_t </math> Calculate <math>X(\min{n}\Delta_t, m\Delta_f)</math> by the ''N''-point FFT: :<math>X(n_0\Delta_t, m\Delta_f) = \Delta_t e^{\frac{j 2\pi(Q-n_0)m}{N}} \sum_{q=0}^{N-1} x_1(q) e^{-j\frac{2\pi qm}{N}}, \qquad n_0=\min{(n)}</math> where :<math> x_1(q) = \begin{cases} x((n - Q + q)\Delta_t) & q \leq 2Q\\ 0 & q >2Q \end{cases}</math> Applying the recursive formula to calculate <math>X(n\Delta_t, m\Delta_f)</math> :<math>X(n\Delta_t, m\Delta_f) = X((n-1)\Delta_t, m\Delta_f) - x((n - Q -1)\Delta_t) e^{-\frac{j 2\pi(n-Q-1)m}{N}}\Delta_t + x((n+Q)\Delta_t)e^{-\frac{j 2\pi(n+Q)m}{N}}\Delta_t</math> === Chirp Z transform === ==== Constraint ==== :<math>\exp{(-j2\pi pm\Delta_t\Delta_f)} = \exp{(-j\pi p^2\Delta_t\Delta_f)} \cdot \exp{(j\pi(p-m)^2\Delta_t\Delta_f)}\cdot \exp{(-j\pi m^2\Delta_t\Delta_f)}</math> so :<math>X(n\Delta_t, m\Delta_f) = \Delta_t \sum_{p=n-Q}^{n+Q} w((n-p)\Delta_t)x(p\Delta_t)e^{-j2\pi pm\Delta_t\Delta_f}</math> :<math>X(n\Delta_t, m\Delta_f) = \Delta_t e^{-j2\pi m^2\Delta_t\Delta_f} \sum_{p=n-Q}^{n+Q} w((n-p)\Delta_t)x(p\Delta_t)e^{-j\pi p^2\Delta_t\Delta_f} e^{j\pi (p-m)^2\Delta_t\Delta_f} </math> === Implementation comparison === {| class="wikitable" !Method !Complexity |- |Direct implementation |<math>O(TFQ)</math> |- |FFT-based |<math>O(TN \log_2 N) </math> |- |Recursive |<math>O(TF)</math> |- |Chirp Z transform |<math>O(TN \log_2 N) </math> |} == See also == * [[Least-squares spectral analysis]] * [[Spectral density estimation]] * [[Time-frequency analysis]] * [[Time-frequency representation]] * [[Reassignment method]] Other time-frequency transforms: * [[Cone-shape distribution function]] * [[Constant-Q transform]] * [[Fractional Fourier transform]] * [[Gabor transform]] * [[Newland transform]] * [[S transform]] * [[Wavelet transform]] * [[Chirplet transform]] == References == <references/> == External links == *[http://tfd.sourceforge.net/ DiscreteTFDs – software for computing the short-time Fourier transform and other time-frequency distributions] *[http://www.atmos.ucla.edu/tcd/ssa/ Singular Spectral Analysis – MultiTaper Method Toolkit] – a free software program to analyze short, noisy time series *[http://www.spectraworks.com kSpectra Toolkit for Mac OS X from SpectraWorks] *[https://www.researchgate.net/publication/3091384_Time-stretched_short-time_Fourier_transform Time stretched short time Fourier transform for time frequency analysis of ultra wideband signals] *[http://www.mathworks.fr/matlabcentral/fileexchange/33451-stft-mdct-and-inverses-onset-and-pitch-detection A BSD-licensed Matlab class to perform STFT and inverse STFT] *[http://ltfat.sourceforge.net/ LTFAT – A free (GPL) Matlab / Octave toolbox to work with short-time Fourier transforms and time-frequency analysis] *[https://github.com/Christoph-Lauer/Sonogram Sonogram visible speech – A free (GPL)Freeware for short-time Fourier transforms and time-frequency analysis] *[http://djj.ee.ntu.edu.tw/TFW_Writing1.pdf National Taiwan University, Time-Frequency Analysis and Wavelet Transform 2021, Professor of Jian-Jiun Ding, Department of Electrical Engineering] {{DEFAULTSORT:Short-Time Fourier Transform}} [[Category:Fourier analysis]] [[Category:Time–frequency analysis]] [[Category:Transforms]] [[Category:Signal processing]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Citation needed
(
edit
)
Template:Cite journal
(
edit
)
Template:Cite web
(
edit
)
Template:Clear
(
edit
)
Template:Further
(
edit
)
Template:Math
(
edit
)
Template:See also
(
edit
)
Template:Short description
(
edit
)