## L409
## Joan Ginés i Ametllé

'''
Haar wavelets algorithms: first steps
'''
from math import *
from numpy import * 
from matplotlib.pyplot import *

def trend(f):
    r2 = sqrt(2)
    N = len(f)
    J = range(N//2)
    return [(f[2*j]+f[2*j+1])/r2 for j in J]
    
def fluct(f):
    r2 = sqrt(2)
    N = len(f)
    J = range(N//2)
    return [(f[2*j]-f[2*j+1])/r2 for j in J]
    
def haar(f):
    a = trend(f)
    d = fluct(f)
    return a + d
    
def energy(f):
    return sum(t**2 for t in f)

    
# test and plot original + haar transform
def f(x): return 10*x**2 * (1-x)**3 *cos(40*atan(1)*x)

X = np.arange(0, 1, 0.0001) 

close('all') 
plot(f(X)) 
plot(haar(f(X)))

