import numpy as np
import matplotlib. pyplot as plt
def signal_xHz ( A, fi, time_s, sample) :
print ( fi * time_s * 2 * np. pi)
print ( sample* time_s)
return A * np. sin( np. linspace( 0 , fi * time_s * 2 * np. pi , num= sample* time_s) )
sig = signal_xHz( 20000 , 1000 , 5 , 8000 )
31415.926535897932
40000
plt. plot( sig[ 0 : 10 ] )
[<matplotlib.lines.Line2D at 0x11bbba3d0>]
sig[ 0 : 10 ]
array([ 0.00000000e+00, 1.41424133e+04, 2.00000000e+04, 1.41413025e+04,
-1.57083560e+00, -1.41435240e+04, -1.99999999e+04, -1.41401917e+04,
3.14167118e+00, 1.41446346e+04])
type ( sig)
sig. astype( 'int16' ) . tofile( 'sin.pcm' )
import os
os. system( 'sox -t raw -c 1 -e signed-integer -b 16 -r 8000 sin.pcm sin.wav' )
os. system( 'play sin.wav' )
0
print ( sig. astype( 'int16' ) [ 0 : 100 ] )
[ 0 14142 19999 14141 -1 -14143 -19999 -14140 3 14144
19999 14139 -4 -14145 -19999 -14137 6 14146 19999 14136
-7 -14147 -19999 -14135 9 14149 19999 14134 -10 -14150
-19999 -14133 12 14151 19999 14132 -14 -14152 -19999 -14131
15 14153 19999 14130 -17 -14154 -19999 -14129 18 14155
19999 14127 -20 -14156 -19999 -14126 21 14157 19999 14125
-23 -14159 -19999 -14124 25 14160 19999 14123 -26 -14161
-19999 -14122 28 14162 19999 14121 -29 -14163 -19999 -14120
31 14164 19999 14119 -32 -14165 -19999 -14117 34 14166
19999 14116 -36 -14167 -19999 -14115 37 14169 19999 14114]
a k = 2 N ∑ i = 0 N − 1 x i c o s 2 k i π N a_{k}=\frac{2}{N}\sum_{i=0}^{N-1}{x_{i}cos\frac{2ki\pi}{N}} a k = N 2 i = 0 ∑ N − 1 x i c o s N 2 k i π
ak= 0
N= 8000
k= 1000
for i in np. arange( 0 , 8000 - 1 ) :
ak+= sig[ i] * np. cos( 2 * np. pi* k* i/ N)
print ( ak/ N)
784.6553321430675
c k = 1 N ∑ i = 0 N − 1 x i e − j 2 k i π N c_{k}=\frac{1}{N}\sum_{i=0}^{N-1}{x_{i}e^{-j\frac{2ki\pi}{N}}} c k = N 1 i = 0 ∑ N − 1 x i e − j N 2 k i π
ak= 0
N= 8000
k= 1000
for i in np. arange( 0 , 8000 - 1 ) :
ak+= sig[ i] * np. exp( 2 * np. pi* k* i* ( - 1.j ) / N)
print ( ak/ N)
(784.6553321424174-9957.788439085387j)
y= sig[ 0 : 8000 ]
YY = np. fft. fft( y)
Y = np. fft. fft( y) / len ( y)
Y1 = Y[ range ( int ( len ( y) / 2 ) ) ]
print ( Y[ 999 : 1001 ] )
[ 18.92979144 -242.80867967j 783.61624233-9958.8275289j ]
plt. plot( Y1)
/Users/chenpeiwen/opt/anaconda3/lib/python3.7/site-packages/numpy/core/_asarray.py:85: ComplexWarning: Casting complex values to real discards the imaginary part
return array(a, dtype, copy=False, order=order)
[<matplotlib.lines.Line2D at 0x11bd3d050>]
import librosa
import librosa. display
y, sr = librosa. load( 'sin.wav' )
S = np. abs ( librosa. stft( y) )
plt. figure( )
librosa. display. specshow( S** 2 , sr= sr, y_axis= 'log' )
plt. colorbar( )
plt. title( 'Power spectrogram' )
Text(0.5, 1.0, 'Power spectrogram')
mfccs = librosa. feature. mfcc( y= y, sr= sr, n_mfcc= 40 )
print ( mfccs. shape)
(40, 216)