from numpy import *
import scipy as sp
from scipy import signal
import matplotlib.pyplot as plt
%matplotlib inline
import matplotlib
#matplotlib.rcParams['savefig.dpi'] = 1 * matplotlib.rcParams['savefig.dpi']
matplotlib.rcParams['figure.figsize'] = (20,5)
N=4096
factor=1
f = 1./7.8
t = linspace(0, N, N)
freq = fft.fftfreq(N*factor, t.shape[-1])
sine = sin(2*pi*f*t)
saw = sp.signal.sawtooth(2*pi*f*t)
def showAbsFFT(signal):
window = blackman(N)
windowed = window*signal
padded = pad(windowed, (0, N*factor - N), 'constant', constant_values=(0))
signalX = fft.fft(padded) / N
amplX = abs(signalX)
plt.plot(freq[0:len(padded)/2], 20*log(amplX)[0:len(padded)/2])
showAbsFFT(sine)
realTanHSignal = tanh(0.1*sine)
#plt.plot(t, realTanHSignal)
def vox_fasttanh_ultra(X):
ax = fabs( X );
x2 = X * X;
Z = X * ( 0.773062670268356 + ax +
( 0.757118539838817 + 0.0139332362248817 * x2 * x2 ) *
x2 * ax );
return( Z / ( 0.795956503022967 + fabs( Z )))
fakeTanh1 = vox_fasttanh_ultra(0.1*sine)
def vox_fasttanh2( x ):
ax = fabs( x );
x2 = x * x;
return( x * ( 2.45550750702956 + 2.45550750702956 * ax +
( 0.893229853513558 + 0.821226666969744 * ax ) * x2 ) /
( 2.44506634652299 + ( 2.44506634652299 + x2 ) *
fabs( x + 0.814642734961073 * x * ax )));
fakeTanh2 = vox_fasttanh2(0.1*sine)
showAbsFFT(realTanHSignal)
showAbsFFT(fakeTanh1)
showAbsFFT(fakeTanh2)