librosa.core.magphase

librosa.core.magphase(D, power=1)[source]

Separate a complex-valued spectrogram D into its magnitude (S) and phase (P) components, so that D = S * P.

Parameters:
D : np.ndarray [shape=(d, t), dtype=complex]

complex-valued spectrogram

power : float > 0

Exponent for the magnitude spectrogram, e.g., 1 for energy, 2 for power, etc.

Returns:
D_mag : np.ndarray [shape=(d, t), dtype=real]

magnitude of D, raised to power

D_phase : np.ndarray [shape=(d, t), dtype=complex]

exp(1.j * phi) where phi is the phase of D

Examples

>>> y, sr = librosa.load(librosa.util.example_audio_file())
>>> D = librosa.stft(y)
>>> magnitude, phase = librosa.magphase(D)
>>> magnitude
array([[  2.524e-03,   4.329e-02, ...,   3.217e-04,   3.520e-05],
       [  2.645e-03,   5.152e-02, ...,   3.283e-04,   3.432e-04],
       ...,
       [  1.966e-05,   9.828e-06, ...,   3.164e-07,   9.370e-06],
       [  1.966e-05,   9.830e-06, ...,   3.161e-07,   9.366e-06]], dtype=float32)
>>> phase
array([[  1.000e+00 +0.000e+00j,   1.000e+00 +0.000e+00j, ...,
         -1.000e+00 +8.742e-08j,  -1.000e+00 +8.742e-08j],
       [  1.000e+00 +1.615e-16j,   9.950e-01 -1.001e-01j, ...,
          9.794e-01 +2.017e-01j,   1.492e-02 -9.999e-01j],
       ...,
       [  1.000e+00 -5.609e-15j,  -5.081e-04 +1.000e+00j, ...,
         -9.549e-01 -2.970e-01j,   2.938e-01 -9.559e-01j],
       [ -1.000e+00 +8.742e-08j,  -1.000e+00 +8.742e-08j, ...,
         -1.000e+00 +8.742e-08j,  -1.000e+00 +8.742e-08j]], dtype=complex64)

Or get the phase angle (in radians)

>>> np.angle(phase)
array([[  0.000e+00,   0.000e+00, ...,   3.142e+00,   3.142e+00],
       [  1.615e-16,  -1.003e-01, ...,   2.031e-01,  -1.556e+00],
       ...,
       [ -5.609e-15,   1.571e+00, ...,  -2.840e+00,  -1.273e+00],
       [  3.142e+00,   3.142e+00, ...,   3.142e+00,   3.142e+00]], dtype=float32)