1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| % DecompCanonique
DecomCanonique:=proc(n,f,b)
global i,k,phi,c:
# on définit la base canonique des phi(n,k) de V_j
phi:=(n,k,x)-> piecewise(x>=k/(2^n) and x<(k+1)/(2^n),2^(n/2),0);
# on calcule alors les composants c(n,k) de f sur la base de V_n
for k from 0 to 2^n-1 do # 2^n est la dimension de V_n donc le nombre de phi(n,k)
c[n,k]:=int(f(x)*phi(n,k,x),x=0...1):
od:
if (b=1) then # si on veut tracer le signal
plot(sum(c[n,i]*phi(n,i,x),i=0..2^n-1),x=0..1,style=line,thichness=[2],title="Représentation de la décomposition canonique du signal",titlefont=[HELVETICA,BOLD,10]);
fi:
end:
% DecompOndelettes
DecompOndelettes:=proc(n,c)
local d,j,k:
for k from 0 to 2^(n-1)-1 do # On calcule les composantes d(n-1,k) de f
d[n-1,k]:=(c[n,2*k]-c[n,2*k+1])*(1/sqrt(2)): #sur la base des fonctions de Haar de W_{n-1}
od:
plot(sum(d[n-1,j]*phi(n-1,j,x),j=0..2^(n-1)-1),x=0..1,style=line,thickness=[2],title="Visualisation des composantes sur la base des ondelettes",titlefont=[HELVETICA,BOLD,10]);
end:
%Compression
Compression:=proc(n,tol,c,d)
local coeffNuls,coeffNonNuls,j,k:
coeffNuls:=0: coeffNonNuls:=0:
DecompOndelettes(n,c,d):
# on calcule toutes les composantes d[j,k]
for j from n by -1 to 1 do
for k from 0 to 2^(j-1)-1 do
d[j-1,k]:=(c[j,2*k]-c[j,2*k+1])*(1/sqrt(2)):
c[j-1,k]:=(c[j,2*k]+c[j,2*k+1])*(1/sqrt(2)):
od:
od:
# on met à 0 les coefficients négligeables
for j from 0 to n-1 do
for k from 0 to 2^j-1 do
if (abs(evalf(d[j,k]))< tol) then
d[j,k]:=0
coeffNuls:=coeffNuls+1:
else
coeffNonNuls:=coeffNonNuls+1:
fi:
od:
od:
print(coeffNuls);
print(coeffNonNuls);
end:
%Reconstruction
Recomposition:=proc(n,c,d)
global i,j,k,tab,graphe:
for j from 1 to n-1 do
for k from 0 to 2^j-1 do
c[j,2*k]:=(c[j-1,k]+d[j-1,k])*(1/sqrt(2)):
c[j,2*k+1]:=(c[j-1,k]-d[j-1,k])*(1/sqrt(2)):
od:
od:
plot([sum(c[n,1]*phi(n,i,x),i=0..2^n-1),
color=[blue,red],style=[line,line],legend=["Signal f de départ","Recomposition de f"],thickness=[2,1],title="Comparaison de la recomposition finale et du signal de départ", titlefont=[HELVETICA,BOLD,10]);
end: |
Partager