clear all close all clc v= [1 ; 2 ; 3] % on prend des coordonnées j = (0:2)'; % indice de base canonique temporelle % associé aux instants [ 0 1.Te 2.Te ] n=0:2 ; %% utilisons le Broadcast et la vectorisation pour calculer % toutes les composantes d'un coup % temps en rangées (j est vertical) % et lignes en fréquence (n horizontal) % attention n*j marche et donne un scalaire % j*n n'est pas défini en math et provoque le broadcast voulu W = exp(i*2*pi*j*n); % arrondi au centieme pour aff centieme = @(x) round(x*100)/100; centieme(W) t=-0.5:0.01:2.5 ; %vecteur temps quasi-continu et infini. s = exp(i*2*pi*t'*n); %% fonction dans utiles/affiche3d.m addpath("./utiles") affiche3d(t,s,j,W) t=-0.5:0.01:2.5 ; %vecteur temps quasi-continu et infini. f = n +0.3 ; s = exp(i*2*pi*t'*f); W = exp(i*2*pi*j*f); affiche3d(t,s,j,W) t=-0.5:0.01:2.5 ; %vecteur temps quasi-continu et infini. f = n*0.1; s = exp(i*2*pi*t'*f); W = exp(i*2*pi*j*f); affiche3d(t,s,j,W); t=-0.5:0.01:2.5 ; %vecteur temps quasi-continu et infini. f = n*0.1; s = exp(i*2*pi*t'*f); W = exp(i*2*pi*j*f); affiche3d(t,s,j,W); w0 = W(:,1); w2 = W(:,2); norme_w0 = transpose(w0)*w0 norme_w2 = transpose(w2)*w2 norme_i_w0 = transpose(i*w0)*(i*w0) %% avec matlab l'opérateur ' est le conjugué hermitien %% x' = conj(transpose(x)) = transpose(conj(x)) norme_w0 = w0'*w0 norme_w2 = w2'*w2 norme_i_w0 = (i*w0)'*(i*w0) %% On peut définir un produit scalaire en fonction lambda scal = @(bra,ket) ket'*bra; scal_w0_w2 = centieme(scal(w0,w2)) scal_w2_w0 = centieme(scal(w2,w0)) t=-0.5:0.01:2.5 ; %vecteur temps quasi-continu et infini. Fe= 1; N = 3; Df = Fe/N; % On peut le nommer f0 pour évoquer les SdF f = n*Df; s = exp(i*2*pi*t'*f); W = exp(i*2*pi*j*f); affiche3d(t,s,j,W); w0 = W(:,1); w2 = W(:,2); scal_w0_w2 = centieme(scal(w0,w2)) norm_carre_w2 = scal(w2,w2) scalaires = W'*W; centieme(W'*W) TFD_v = W * v norme = @(v) sqrt(v'*v) ; Norm_v = norme(v) Norm_TFD_v = norme(TFD_v) amplification = Norm_TFD_v/Norm_v; amplification_vaut_sqrt_3 = centieme(amplification - sqrt(3)) == 0 scalaires = centieme(W'*W) v_reconstruit = centieme(W' * TFD_v) Wtfd = W; Wtfd_inverse= W'/N; v_reconstruit = centieme(Wtfd_inverse * TFD_v) WtfdBon = W/sqrt(N); WtfdBon_inverse= WtfdBon'; TfdBon_v = WtfdBon * v; v_reconstruit_bon = centieme(WtfdBon_inverse * TfdBon_v) Tfd_inv_de_Tfd = centieme(Wtfd_inverse * Wtfd) TfdBon_inv_de_TfdBon = centieme(WtfdBon_inverse * WtfdBon) peigne = @(k,T) mod(k,T)==0; decal = 1/2; N = 3; % 3 points j = (0:N-1) + decal; periode = 2*N; k = (0:(periode-1))' + decal; M_Bz_Bdct = peigne(k-j,periode) + ... peigne(k-(periode-j),periode) ; v_Bz = M_Bz_Bdct * v ; stem(k,v_Bz); box off; n=(0:(2*N-1)); k=n'+0.5; M_Bz_Bf= cos(2*pi*k*n/(2*N)); t=-0.5:0.01:6.5 ; %vecteur temps quasi-continu et infini. s = cos(2*pi*t'*n/(2*N)); voir = 1:3; %voir = [1,4]; plot(k,M_Bz_Bf(:,voir),'o'); box off; hold on; plot(t,s(:,voir),'--'); centieme(M_Bz_Bf) scalaires = transpose(M_Bz_Bf)*M_Bz_Bf; centieme(scalaires) Norme = centieme(sqrt(sum(scalaires))) n=(0:(N-1)); k=(0:(2*N-1))'+0.5; M_Bz_Bf= cos(2*pi*k*n/(2*N)); M_Bz_Bf(:,1) = M_Bz_Bf(:,1)/sqrt(2); centieme(M_Bz_Bf) scalaires = centieme(M_Bz_Bf' * M_Bz_Bf) M_Bdct_Bf = M_Bz_Bdct' * M_Bz_Bf centieme(M_Bdct_Bf*M_Bdct_Bf')