Takes a complex MS and transforms it to a complex spectrogram with proper row (frequency) and column (time) labels.
msToSpec(ms, windowLength = NULL, step = NULL)
Returns a spectrogram - a numeric matrix of complex numbers of the same dimensions as ms.
target modulation spectrum (matrix of complex numbers)
length of FFT window, ms
you can override overlap
by specifying FFT step, ms (NB:
because digital audio is sampled at discrete time intervals of
1/samplingRate, the actual step and thus the time stamps of STFT frames
may be slightly different, eg 24.98866 instead of 25.0 ms)
s = soundgen(sylLen = 250, amFreq = 25, amDep = 50,
pitch = 250, samplingRate = 16000)
spec = spectrogram(s, samplingRate = 16000, windowLength = 25, step = 5)
ms = specToMS(spec)
image(x = as.numeric(colnames(ms)), y = as.numeric(rownames(ms)),
z = t(log(abs(ms))), xlab = 'Amplitude modulation, Hz',
ylab = 'Frequency modulation, cycles/kHz')
spec_new = msToSpec(ms)
image(x = as.numeric(colnames(spec_new)), y = as.numeric(rownames(spec_new)),
z = t(log(abs(spec_new))), xlab = 'Time, ms',
ylab = 'Frequency, kHz')
Run the code above in your browser using DataLab