def realTest(self): name = "orchestra" pySig = py_pursuit_Signal.InitFromFile("../../../data/" + name + ".wav", forceMono=True, doNormalize=True) pySig.crop(0, 5 * pySig.samplingFrequency) pySig.pad(16384) sigEnergy = np.sum(pySig.dataVec ** 2) dico = [128, 1024, 8192] nbAtoms = 200 classicDIco = py_pursuit_MDCTDico.py_pursuit_MDCTDico(dico, useC=False) spreadDico = py_pursuit_MDCTDico.py_pursuit_SpreadDico( dico, useC=False, allBases=False, Spreadbases=[1024, 8192], penalty=0.1, maskSize=3 ) approxClassic, decayClassic = MP.MP(pySig, classicDIco, 20, nbAtoms) approxSpread, decaySpread = MP.MP(pySig, spreadDico, 20, nbAtoms) plt.figure(figsize=(16, 8)) plt.subplot(121) approxClassic.plotTF(ylim=[0, 4000]) plt.title("Classic decomposition : 200 atoms 3xMDCT") plt.subplot(122) approxSpread.plotTF(ylim=[0, 4000]) plt.title("Decomposition with TF masking: 200 atoms 3xMDCT") plt.savefig(name + "_TestTFMasking.eps") plt.figure() plt.plot([10 * np.log10(i / sigEnergy) for i in decayClassic]) plt.plot([10 * np.log10(i / sigEnergy) for i in decaySpread], "r") plt.legend(("Classic decomposition", "Spreading Atoms")) plt.ylabel("Residual energy decay(dB)") plt.xlabel("Iteration") plt.savefig(name + "_decayTFMasking.eps") plt.show()
def dicos(self): # create a SpreadDico pySig = py_pursuit_Signal.InitFromFile("../../../data/glocs.wav", forceMono=True) pySig.crop(0, 5 * pySig.samplingFrequency) pySig.pad(2048) dico = [128, 1024, 8192] classicDIco = py_pursuit_MDCTDico.py_pursuit_MDCTDico(dico, useC=False) spreadDico = py_pursuit_MDCTDico.py_pursuit_SpreadDico(dico, useC=False, allBases=True, penalty=0, maskSize=3) classicDIco.initialize(pySig) spreadDico.initialize(pySig) classicDIco.update(pySig, 2) spreadDico.update(pySig, 2) classicAtom1 = classicDIco.getBestAtom(0) spreadAtom1 = spreadDico.getBestAtom(0) self.assertEqual(classicAtom1, spreadAtom1) pySig.subtract(classicAtom1) classicDIco.update(pySig, 2) spreadDico.update(pySig, 2) classicAtom2 = classicDIco.getBestAtom(0) spreadAtom2 = spreadDico.getBestAtom(0) self.assertNotEqual(classicAtom2, spreadAtom2)