Select Git revision
OAR.2068277.stdout
test_gen_gabmul_operator.m 1.73 KiB
clc; clear; close all;
% Ce script permet de tester la fonction qui genere le multiplicateur de Gabor.
% et de faire des tests permettant de verifier ses proprietes
%%
win_type='hann';
approx_win_len=128;
hop = approx_win_len/8;
nbins = approx_win_len*2;
sig_len=1024;
fs=1;
%% Les parametres du signal
signal_params = generate_signal_parameters(fs, sig_len);
dgt_params = generate_dgt_parameters(win_type, approx_win_len, hop, nbins, sig_len);
[dgt, idgt] = get_stft_operators(dgt_params, signal_params);
%% A ton adjoint_stft(direct_stft(x)) = x? c'est-a dire la propriete de tight frame ?
x =randn(sig_len,1);
test = idgt(dgt(x));
disp(norm(test-x,2))
%% Le mask
% dimension de la TFCT
M = dgt_params.nbins/2 +1;
N = signal_params.sig_len/ dgt_params.hop;
T= duration;
t_lim = [0.3, 0.5];
f_lim =[0.1, 0.2];
mask = generate_rectangular_mask(nbins, hop, sig_len, t_lim, f_lim);
figure; plotdgtreal(mask, dgt_params.hop, dgt_params.nbins,fs)
%% Generation du multiplicateur et verification de la propit de symetrie
mul1 = gen_gabmul_operator(dgt, idgt, mask);
mask1 = conj(mask);
mul2 = gen_gabmul_operator(dgt, idgt, mask1);
disp(norm(mul1(x)-mul2(x))) %verifie la symetrie
%% Si mask_id = I, a t-on mul1(x)=x ?;
mask_id = zeros(M,N);
mul_id = gen_gabmul_operator(dgt, idgt, mask_id);
Mul = mul_id(x);
disp(norm(Mul-x,2))
%% diagonalisation : mul1 est-elle une matrice SDP ?
[U,D] = eigs(mul1,signal_params.sig_len, signal_params.sig_len);
%% SDP
fprintf("test de positivite des valeus propres \n")
disp(diag(D)>=0);
%% Verifier si U est bien unitaire
%%
fprintf("test de normalite des vecteurs propres \n")
disp(norm(U*U',2))
disp(norm(U'*U,2))
figure; imagesc(abs(U*U') -eye(1024))
max(max(abs(U*U' )-eye(1024)))