numpy

→ndarray:rest-term

初めての信号処理

人工信号に対して、FFT、STFT解析を行うサンプルコード

→初めての信号処理

オーディオのロード

  1. scipyを使う場合

返り値のdataはnumpy.array()

   # オーディオのロード
   from scipy.io.wavfile import read
   fs, data = read(filename)
   data = data[0:fs/2-1]

Numpy Array (np.ndarray)

ary = np.array([1,2,3,4,5]) = np.array( (1,2,3,4,5))
# ゼロベクトル
ary = np.zeros(3) # 1次元の場合はスカラーでよい
ary = np.zeros((3, 2)) # N次元の場合はタプルを忘れずに
# 空配列
ary = np.empty((Nx,Ny))
ary = np.empty_like(ary0)
# 1ベクトル
ary = np.ones((Nx,Ny))
ary = np.ones_like(ary0)
# 単位行列
ary = identity(N) #NxNの単位行列が生成される
ary = np.array([1,2,3])
# データタイプ(np.bool, np.int, np.float, np.complex... np.int32, np.float64...)
 ary.dtype 
# タイプの変更
ary = ary.astype(np.float)
# 配列サイズ
ary = np.empty((3,5,2), dtype = np.float)
ary.shape
>> (3,5,2)
# 配列次元
ary = np.empty((3,5,2), dtype = np.float)
ary.ndim
>> 3
# 要素数
ary = np.empty((3,5,2), dtype = np.float)
ary.size
>> 30

Numpy Array (ndarray) 便利機能

→The N-dimensional array

s-ndarray.jpg

→ndarray atribute and method

Numpy dtype

dtype_range = {np.bool_: (False, True),
              np.bool8: (False, True),
              np.uint8: (0, 255),
              np.uint16: (0, 65535),
              np.int8: (-128, 127),
              np.int16: (-32768, 32767),
              np.int64: (-2**63, 2**63 - 1),
              np.uint64: (0, 2**64 - 1),
              np.int32: (-2**31, 2**31 - 1),
              np.uint32: (0, 2**32 - 1),
              np.float32: (-1, 1),
              np.float64: (-1, 1)}

オーディオI/O

pythonでオーディオを再生するにはpyaudioがよさそう。pyaudioに再生させるためには、バイナリに戻す必要がある。

→numpy.unpackbit

>>> a = np.array([[2], [7], [23]], dtype=np.uint8)
>>> a
array([[ 2],
      [ 7],
      [23]], dtype=uint8)
>>> b = np.unpackbits(a, axis=1)
>>> b
array([[0, 0, 0, 0, 0, 0, 1, 0],
      [0, 0, 0, 0, 0, 1, 1, 1],
      [0, 0, 0, 1, 0, 1, 1, 1]], dtype=uint8)

np.frombufferで24bitファイルを読み込む

→Speed up loading 24-bit binary data into 16-bit numpy array

output = np.frombuffer(data,'b').reshape(-1,3)[:,1:].flatten().view('i2')

sndhdr — サウンドファイルの識別

   path = './audio/sin_44100_24bit_stereo_5s.wav'
   print sndhdr.what(path)
   >>> ('wav', 44100, 2, -1, 24)
   print sndhdr.whathdr(path)
   >>>('wav', 44100, 2, -1, 24)
import sndhdr, wave, struct
if sndhdr.what(fname)[0] != 'wav'
 raise StandardError("file doesn't have wav header")
try:
 wav = wave.open(fname)
 params = (nchannels,sampwidth,rate,nframes,comp,compname) =  wav.getparams()
 frames = wav.readframes(nframes*nchannels)
finally:
 wav.close()
out = struct.unpack_from ("%dh" % nframes*nchannels, frames)
トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS