update 14
This commit is contained in:
parent
3a5de3fc7b
commit
af37f16cef
3 changed files with 15 additions and 2 deletions
|
@ -1,4 +1,5 @@
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
from .util import pad2
|
||||||
|
|
||||||
# fast cepstrum and inverted fast cepstrum
|
# fast cepstrum and inverted fast cepstrum
|
||||||
fcs = lambda s: np.fft.ifft(np.log(np.fft.fft(s)))
|
fcs = lambda s: np.fft.ifft(np.log(np.fft.fft(s)))
|
||||||
|
@ -32,8 +33,11 @@ def fold(r):
|
||||||
rw = np.hstack((r[0], rf, np.zeros(n-nt-1)))
|
rw = np.hstack((r[0], rf, np.zeros(n-nt-1)))
|
||||||
return rw
|
return rw
|
||||||
|
|
||||||
def minphase(s, os=True):
|
def minphase(s, pad=True, os=False):
|
||||||
# via https://ccrma.stanford.edu/~jos/fp/Matlab_listing_mps_m.html
|
# via https://ccrma.stanford.edu/~jos/fp/Matlab_listing_mps_m.html
|
||||||
|
# TODO: actual oversampling
|
||||||
|
if pad:
|
||||||
|
s = pad2(s)
|
||||||
if os:
|
if os:
|
||||||
s = np.hstack((s, np.zeros(len(s))))
|
s = np.hstack((s, np.zeros(len(s))))
|
||||||
cepstrum = np.fft.ifft(np.log(clipdb(np.fft.fft(s), -100)))
|
cepstrum = np.fft.ifft(np.log(clipdb(np.fft.fft(s), -100)))
|
||||||
|
|
|
@ -14,6 +14,9 @@ tau = 2*np.pi
|
||||||
unwarp = lambda w: np.tan(w/2)
|
unwarp = lambda w: np.tan(w/2)
|
||||||
warp = lambda w: np.arctan(w)*2
|
warp = lambda w: np.arctan(w)*2
|
||||||
|
|
||||||
|
ceil2 = lambda x: np.power(2, np.ceil(np.log2(x)))
|
||||||
|
pad2 = lambda x: np.hstack((x, np.zeros(ceil2(len(x)) - len(x))))
|
||||||
|
|
||||||
rfft = lambda src, size: np.fft.rfft(src, size*2)
|
rfft = lambda src, size: np.fft.rfft(src, size*2)
|
||||||
magnitude = lambda src, size: 10*np.log10(np.abs(rfft(src, size))**2)[0:size]
|
magnitude = lambda src, size: 10*np.log10(np.abs(rfft(src, size))**2)[0:size]
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from . import lament
|
from .util import lament, count_channels
|
||||||
|
|
||||||
# TODO: don't use wavfile, it breaks on perfectly good files
|
# TODO: don't use wavfile, it breaks on perfectly good files
|
||||||
import scipy.io.wavfile as wav
|
import scipy.io.wavfile as wav
|
||||||
|
@ -30,3 +30,9 @@ def wav_read(fn):
|
||||||
bits = s.dtype.itemsize*8
|
bits = s.dtype.itemsize*8
|
||||||
s = np.asfarray(s)/2**(bits - 1)
|
s = np.asfarray(s)/2**(bits - 1)
|
||||||
return s, srate
|
return s, srate
|
||||||
|
|
||||||
|
def wav_write(fn, s, srate, dtype='h'):
|
||||||
|
if dtype in ('b', 'h', 'i', 'l') and np.max(np.abs(s)) > 1:
|
||||||
|
lament('wav_write(): WARNING; clipping')
|
||||||
|
with ewave.open(fn, 'w', srate, dtype, count_channels(s)) as f:
|
||||||
|
f.write(s)
|
||||||
|
|
Loading…
Reference in a new issue