plotOdf = True order = 10 filename = sys.argv[1] frameSize = 1024 frameStep = 256 fftSize = 2048 stream, sampleRate, nframes, nchannels, loader = get_framer_audio( filename, frameSize, frameStep) ffter = loudia.FFT(fftSize) windower = loudia.Window(frameSize, loudia.Window.HAMMING) subplots = { 1: ['mag', 'peaki_mags', 'resid_mag', 'synth_mag', 'traj_mags'], 2: ['phase', 'peak_phases'] } all_processes = set() for values in subplots.values(): all_processes |= set(values) plotSize = fftSize / 4 subplotCount = max(subplots) pylab.ion()
frameStep = 1024 fftSize = 4096 plotSize = fftSize / 4 bandwidth = 4 * fftSize / frameSize minPeakWidth = 8 peakCandidateCount = 4 stream, sampleRate, nframes, nchannels, loader = get_framer_audio( filename, frameSize, frameStep) ffter = loudia.FFT(fftSize) windower = loudia.Window(frameSize, loudia.Window.BLACKMANHARRIS) whitening = loudia.SpectralWhitening(fftSize, 50.0, 6000.0, sampleRate) pitchACF = loudia.PitchACF(fftSize, sampleRate, minPeakWidth, peakCandidateCount) acorr = loudia.Autocorrelation(fftSize / 2 + 1, fftSize / 2 + 1) specs = [] wspecs = [] pitches = [] saliencies = [] if interactivePlot: pylab.ion() pylab.figure() pylab.title('Interactive plot of the FFT vs LPC frequency response') pylab.gca().set_ylim([-100, 40])
#!/usr/bin/env python # Create input import scipy import loudia frameSize = 121 fftSize = 512 sampleRate = 8000 # Loudia's solution # --------------------------------- # w = loudia.Window(frameSize, 0) m = loudia.FFT(fftSize, True) for i in range(100000): a_random = scipy.random.random(frameSize) r_random = m.process(w.process(a_random)) # -------------------------------------------------------- #
import loudia import pylab plot = False frameSize = 121 fftSize = 512 sampleRate = 8000 a_zeros = scipy.zeros(frameSize) a_ones = scipy.ones(frameSize) a_random = scipy.random.random(frameSize) a_sine = scipy.cos(2 * scipy.pi * 440 * scipy.arange(frameSize) / sampleRate + scipy.pi / 4.0) # Loudia's solution # --------------------------------- # w = loudia.Window(frameSize, loudia.Window.RECTANGULAR) m = loudia.FFT(fftSize, False) r_zeros = m.process(w.process(a_zeros)) r_ones = m.process(w.process(a_ones)) r_random = m.process(w.process(a_random)) r_sine = m.process(w.process(a_sine)) # -------------------------------------------------------- # # Scipy solution # ---------------------------------- # s_zeros = scipy.fft(a_zeros, fftSize)[:fftSize / 2 + 1] s_ones = scipy.fft(a_ones, fftSize)[:fftSize / 2 + 1] s_random = scipy.fft(a_random, fftSize)[:fftSize / 2 + 1] s_sine = scipy.fft(a_sine, fftSize)[:fftSize / 2 + 1] # -------------------------------------------------------- #
#!/usr/bin/env python # Create input import scipy.signal import loudia frameSize = 256 a_ones = scipy.ones(frameSize) # Loudia's solution # --------------------------------- # m_hanning = loudia.Window(frameSize, 1) m_hamming = loudia.Window(frameSize, 3) r_hanning = m_hanning.process(a_ones) r_hamming = m_hamming.process(a_ones) # -------------------------------------------------------- # # Scipy solution # ---------------------------------- # s_hanning = scipy.signal.hanning(frameSize) s_hamming = scipy.signal.hamming(frameSize) # -------------------------------------------------------- # print 'Hann match: ', scipy.allclose(r_hanning, s_hanning) print 'Hamming match: ', scipy.allclose(r_hamming, s_hamming) print(r_hamming - s_hamming).sum() #import pylab #pylab.hold(True)
fftSize = frameSize*2 # samples miniHopSize = frameSize/4 # samples print miniHopSize plotSize = 256 frameCount = 0 #windowType = loudia.Window.BLACKMANHARRIS #windowType = loudia.Window.HANNING windowType = loudia.Window.HAMMING #windowType = loudia.Window.RECTANGULAR window = loudia.Window(frameSize, windowType) fft = loudia.FFT(fftSize, True) unwrapper = loudia.Unwrap() def process(frame): spec = fft.process(window.process(frame)) return scipy.absolute(spec), scipy.angle(spec) print 'fftSize: ', fftSize def mapError(error): error[error > scipy.pi] = (2*scipy.pi - error[error>scipy.pi]) return error