23template <
class T1> arma::cx_vec
spectrum(
const arma::Col<T1>& x,
const arma::vec& W )
25 arma::cx_vec Pxx( x.size() );
27 Pxx = fft( x % W ) / wc;
37template <
class T1> arma::vec
psd(
const arma::Col<T1>& x,
const arma::vec& W )
39 arma::cx_vec X( x.size() );
40 arma::vec Pxx( x.size() );
42 Pxx = real( X % conj( X ) );
51template <
class T1> arma::vec
psd(
const arma::Col<T1>& x )
67template <
class T1> arma::cx_mat
specgram_cx(
const arma::Col<T1>& x,
const arma::uword Nfft = 512,
const arma::uword Noverl = 256 )
72 arma::uword N = x.size();
73 arma::uword D = Nfft - Noverl;
77 arma::Col<T1> xk( Nfft );
81 arma::uword U =
static_cast<arma::uword
>( floor( ( N - Noverl ) /
double( D ) ) );
82 Pw.set_size( Nfft, U );
86 for( arma::uword k = 0; k < N - Nfft; k += D )
88 xk = x.rows( k, k + Nfft - 1 );
111template <
class T1> arma::mat
specgram(
const arma::Col<T1>& x,
const arma::uword Nfft = 512,
const arma::uword Noverl = 256 )
116 Sg = real( Pw % conj( Pw ) );
129template <
class T1> arma::mat
specgram_ph(
const arma::Col<T1>& x,
const arma::uword Nfft = 512,
const arma::uword Noverl = 256 )
148template <
class T1> arma::vec
pwelch_ph(
const arma::Col<T1>& x,
const arma::uword Nfft = 512,
const arma::uword Noverl = 256 )
152 return arma::mean( Ph, 1 );
166template <
class T1> arma::vec
pwelch(
const arma::Col<T1>& x,
const arma::uword Nfft = 512,
const arma::uword Noverl = 256 )
170 return arma::mean( Pxx, 1 );
182template <
class T1> std::complex<double>
goertzel(
const arma::Col<T1>& x,
const double f )
185 arma::uword N = x.size();
188 double B = 2 * cos( A );
189 std::complex<double> C( cos( A ), -sin( A ) );
196 for( arma::uword n = 0; n < N; n++ )
199 s0 = x( n ) + B * s1 - s2;
221template <
class T1> arma::cx_vec
goertzel(
const arma::Col<T1>& x,
const arma::vec f )
223 arma::uword N = f.size();
225 for( arma::uword n = 0; n < N; n++ )
double angle(const std::complex< T > &x)
Calculates angle in radians for complex input.
arma::vec pwelch_ph(const arma::Col< T1 > &x, const arma::uword Nfft=512, const arma::uword Noverl=256)
Phase spectrum calculation using Welch's method.
arma::vec psd(const arma::Col< T1 > &x, const arma::vec &W)
Power spectrum density calculation using windowed data.
std::complex< double > goertzel(const arma::Col< T1 > &x, const double f)
DFT calculation of a single frequency using Goertzel's method.
arma::vec pwelch(const arma::Col< T1 > &x, const arma::uword Nfft=512, const arma::uword Noverl=256)
Power spectrum calculation using Welch's method.
arma::cx_mat specgram_cx(const arma::Col< T1 > &x, const arma::uword Nfft=512, const arma::uword Noverl=256)
Spectrogram calculation using Hamming windowed data.
arma::mat specgram_ph(const arma::Col< T1 > &x, const arma::uword Nfft=512, const arma::uword Noverl=256)
Phase spectrogram calculation.
arma::cx_vec spectrum(const arma::Col< T1 > &x, const arma::vec &W)
Windowed spectrum calculation.
arma::mat specgram(const arma::Col< T1 > &x, const arma::uword Nfft=512, const arma::uword Noverl=256)
Power spectrogram calculation.
arma_inline arma::vec hamming(const arma::uword N)
Hamming window.