STATUS: unstable Time-Frequency representation of time-series. More...
#include "definitions.h"
#include "complex.h"
#include "array.h"
#include "optarg.h"
#include <math.h>
Go to the source code of this file.
Data Structures | |
struct | Spectrogram |
Complex spectrogram (Time-Frequency-Representation) of a signal. More... | |
Typedefs | |
typedef Array *(* | WindowFunction )(int, double) |
A Window Function. | |
Functions | |
Spectrogram * | spectrogram (const Array *sig, Spectrogram *spectgram, OptArgList *optargs) |
Easy interface for spectrogram calculation. | |
void | spectrogram_free (Spectrogram *s) |
Free memory associated with Spectrogram. | |
Spectrogram * | spectrogram_init (int N_freq, int N_time) |
Initialize Spectrogram. | |
Array * | spectrogram_powerspectrum (const Spectrogram *spect) |
Calculate the powerspectrum for a Spectrogram. | |
Spectrogram * | spectrogram_stft (const Array *sig, double sampling_rate, const Array *Window, int N_freq, int N_time, double corner_freqs[2], int *timepoints, Spectrogram *spectgram) |
Calculate spectrogram of a signal (using STFT). | |
Array * | window_dirichlet (int n, double noparam) |
Dirichlet (Rectangular) window. | |
Array * | window_gaussian (int n, double sigma) |
Gaussian window. | |
Array * | window_hamming (int n, double noparam) |
Hamming window. | |
Array * | window_hanning (int n, double noparam) |
Hanning (Hann) window. | |
Array * | window_kaiser (int n, double alpha) |
Kaiser Window. |
STATUS: unstable Time-Frequency representation of time-series.
A time-frequency represenation (TFR) of a signal displays the varying frequency content of a signal over time.
Definition in file time_frequency.h.
typedef Array*(* WindowFunction)(int, double) |
A Window Function.
n | is the number of points in the window | |
param | is a parameter depending on the choice of the window (e.g. sigma for gaussian) |
Definition at line 51 of file time_frequency.h.
Spectrogram* spectrogram | ( | const Array * | sig, | |
Spectrogram * | spectgram, | |||
OptArgList * | optargs | |||
) |
Easy interface for spectrogram calculation.
sig | - data to be spectrogrammified (1D DOUBLE array) | |
spectgram | - if NULL, own memory is alloated, else use this pointer. | |
optargs | may contain:
|
Definition at line 38 of file time_frequency.c.
void spectrogram_free | ( | Spectrogram * | s | ) |
Free memory associated with Spectrogram.
Definition at line 302 of file time_frequency.c.
Spectrogram* spectrogram_init | ( | int | N_freq, | |
int | N_time | |||
) |
Initialize Spectrogram.
N_freq | resolution (number of points) in frequency | |
N_time | resolution in time |
Definition at line 282 of file time_frequency.c.
Array* spectrogram_powerspectrum | ( | const Spectrogram * | s | ) |
Calculate the powerspectrum for a Spectrogram.
Returns a s->N_time x s->N_freq matrix the absolute value squared of the complex numbers in spectrogram.
s | - the spectrogram |
Definition at line 264 of file time_frequency.c.
Spectrogram* spectrogram_stft | ( | const Array * | sig, | |
double | sampling_rate, | |||
const Array * | Window, | |||
int | N_freq, | |||
int | N_time, | |||
double | corner_freqs[2], | |||
int * | timepoints, | |||
Spectrogram * | spectgram | |||
) |
Calculate spectrogram of a signal (using STFT).
This function is inspired by (read: 'was shamelessly ripped of from') the TIME-FREQUENCY TOOLBOX by Emmanuel Roy - Manuel DAVY (http://www-lagis.univ-lille1.fr/~davy/toolbox/Ctftbeng.html) It's a bit more efficient and uses different storage formats. It doesn't work on complex signals.
THE ALGORITHM
Given a signal to analyze in time and frequency, computes the Short Time Fourier Transform (STFT) :
This function is complex valued. Its computation requires a window, which can be computed with one of the window_*() functions.
sig | - data to be spectrogrammified (1D DOUBLE array) | |
sampling_rate | - sampling frequency of signal | |
window | - window for calculating the STFT (1D DOUBLE Array); get from window_*() functions | |
N_freq | - number of frequency bins = number of rows in the TFR matrix (the next power of 2 is chosen for N_freq) | |
N_time | - number of cols in the TFR matrix | |
corner_freqs | - corner frequencies (lower, upper) for the returned spectrum at each time-sample in Hz; maximal would be {0, srate/2} | |
timepoints | compute the spectrogram at selected time-points; this array is N_time long | |
spectgram | - if NULL, own memory is alloated, else use this pointer. |
Definition at line 144 of file time_frequency.c.
Array* window_dirichlet | ( | int | n, | |
double | noparam | |||
) |
Dirichlet (Rectangular) window.
n | - ODD number for window (else it is incremented by one) | |
noparam | ignored (just for comparability to WindowFunction) |
Definition at line 323 of file time_frequency.c.
Array* window_gaussian | ( | int | n, | |
double | sigma | |||
) |
Gaussian window.
with
n | - ODD number for window (else it is incremented by one) | |
sigma | - gaussian std |
Definition at line 349 of file time_frequency.c.
Array* window_hamming | ( | int | n, | |
double | noparam | |||
) |
Hamming window.
n | - ODD number for window (else it is incremented by one) | |
noparam | ignored (just for comparability to WindowFunction) |
Definition at line 374 of file time_frequency.c.
Array* window_hanning | ( | int | n, | |
double | noparam | |||
) |
Hanning (Hann) window.
n | - ODD number for window (else it is incremented by one) | |
noparam | ignored (just for comparability to WindowFunction) |
Definition at line 399 of file time_frequency.c.
Array* window_kaiser | ( | int | n, | |
double | alpha | |||
) |
Kaiser Window.
http://en.wikipedia.org/wiki/Kaiser_window
n | - ODD number for window (else it is incremented by one) | |
alpha | - parameter for window's steepness |
Definition at line 423 of file time_frequency.c.