def testReconstructSignal(self): numExamples = 100 numFeatures = 16 X = numpy.random.rand(numExamples, numFeatures) level = 10 mode = "cpd" waveletStr = "db4" C = pywt.wavedec(X[0, :], waveletStr, mode, level=10) Xw = MetabolomicsUtils.getWaveletFeatures(X, waveletStr, level, mode) X2 = MetabolomicsUtils.reconstructSignal(X, Xw, waveletStr, mode, C) tol = 10**-6 self.assertTrue(numpy.linalg.norm(X - X2) < tol)
standardiser = Standardiser() #X = standardiser.centreArray(X) plotStyles = ['k-', 'k--', 'k-.', 'k:', 'k.'] for i in range(len(waveletStrs)): print(i) waveletStr = waveletStrs[i] Xw = MetabolomicsUtils.getWaveletFeatures(X, waveletStr, level, mode) C = pywt.wavedec(X[0, :], waveletStr, level=level, mode=mode) for j in range(len(Ns)): N = Ns[j] Xw2, inds = MetabolomicsUtils.filterWavelet(Xw, N) X2 = MetabolomicsUtils.reconstructSignal(X, Xw2, waveletStr, mode, C) errors[i, j] = numpy.linalg.norm(X - X2) #Plot example wavelet after filtering waveletStr = "haar" N = 100 Xw = MetabolomicsUtils.getWaveletFeatures(X, waveletStr, level, mode) C = pywt.wavedec(X[0, :], waveletStr, level=level, mode=mode) Xw2, inds = MetabolomicsUtils.filterWavelet(Xw, N) X2 = MetabolomicsUtils.reconstructSignal(X, Xw2, waveletStr, mode, C) plt.figure(3) plt.plot(range(X.shape[1]), X[0, :], "k", label="raw") plt.plot(range(X.shape[1]), X2[0, :], "r", label="filtered") plt.xlabel("feature no.")