## L409
## Albert Puente Encinas

'''
Haar wavelets algorithms: first steps
'''

from math import *
from numpy import *
from matplotlib.pyplot import *

def trend(f):
    r2 = sqrt(2)
    J = range(len(f)//2)
    return [(f[2*j]+f[2*j+1])/r2 for j in J]
    
def fluct(f):
    r2 = sqrt(2)
    J = range(len(f)//2)
    return [(f[2*j]-f[2*j+1])/r2 for j in J]

def haar(f):
    return trend(f) + fluct(f)
    
def energy(f):
    return sum(t**2 for t in f)

## Examples

f = list(range(10))
h = haar(f)

E = energy(f)

A = energy(trend(f))
D = energy(fluct(f))

## Lab


X = arange(0, 1, 0.001)
def f(x): return 20*x*x*((1-x)**5)*cos(11*pi*x)

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