Compute the short-term Fourier transform of a vector or matrix.
stft(
x,
window = nextpow2(sqrt(NROW(x))),
overlap = 0.75,
nfft = ifelse(isScalar(window), window, length(window)),
fs = 1
)A list containing the following elements:
fvector of frequencies at which the STFT is estimated.
If x is numeric, power from negative frequencies is added to the
positive side of the spectrum, but not at zero or Nyquist (fs/2)
frequencies. This keeps power equal in time and spectral domains. If
x is complex, then the whole frequency range is returned.
tvector of time points at which the STFT is estimated.
sShort-time Fourier transform, returned as a matrix or
a 3-D array. Time increases across the columns of s and frequency
increases down the rows. The third dimension, if present, corresponds to
the input channels.
input data, specified as a numeric or complex vector or matrix. In case of a vector it represents a single signal; in case of a matrix each column is a signal.
If window is a vector, each segment has the same length
as window and is multiplied by window before (optional)
zero-padding and calculation of its periodogram. If window is a
scalar, each segment has a length of window and a Hamming window is
used. Default: nextpow2(sqrt(NROW(x))) (the square root of the
length of x rounded up to the next power of two). The window length
must be larger than 3.
segment overlap, specified as a numeric value expressed as a multiple of window or segment length. 0 <= overlap < 1. Default: 0.75.
Length of FFT, specified as an integer scalar. The default is the
length of the window vector or has the same value as the scalar
window argument. If nfft is larger than the segment length,
(seg_len), the data segment is padded nfft - seg_len zeros. The
default is no padding. Nfft values smaller than the length of the data
segment (or window) are ignored. Note that the use of padding to increase
the frequency resolution of the spectral estimate is controversial.
sampling frequency (Hertz), specified as a positive scalar. Default: 1.
Andreas Weingessel, Andreas.Weingessel@ci.tuwien.ac.at.
Conversion to R by Geert van Boxtel, G.J.M.vanBoxtel@gmail.com.
fs <- 8000
y <- chirp(seq(0, 5 - 1/fs, by = 1/fs), 200, 2, 500, "logarithmic")
ft <- stft (y, fs = fs)
filled.contour(ft$t, ft$f, t(ft$s), xlab = "Time (s)",
ylab = "Frequency (Hz)")
Run the code above in your browser using DataLab