Discrétisation des signaux tridimensionnels
-
11-12-2019 - |
Question
Approximation globale symbolique parle de la conversion d'une série chronologique (x, t) en symboles. Sur cette base, j'ai quelques requêtes de base.Que se passe-t-il si le signal temporel est un composite de (x,y,z,t) représentant les coordonnées de position ou simplement (x,y,t) pour une image bidimensionnelle avec un horodatage t.Alors, comment puis-je utiliser cet outil pour attribuer des symboles/discrétiser. Veuillez m'aider.
La solution
Vous pourriez appliquer le SAXO transformation en chaque dimension séparément, puis combinez les symboles/lettres pour chaque horodatage.
Prenez le (x,y,z,t) par exemple, vous obtiendrez la combinaison b,a,c
pour t=1, alors a,a,c
pour t=2, etc.
Vous pouvez ensuite combiner les symboles pour former des « méga-symboles » si vous le souhaitez.Supposons que l'ensemble des symboles soit Symbols={a,b,c}
.Alors le nouvel ensemble de lettres serait simplement le produit cartésien SxSxS
(un pour chaque dimension).
Autrement dit aaa
devient la nouvelle lettre A
, aab
comme B
, alors aac
, aba
, abb
, etc..
MODIFIER:
Voici un code pour montrer ce que j'avais en tête.Comme je n'ai pas d'implémentation de l'algorithme SAX, j'utiliserai la fonction suivante comme espace réservé (elle renvoie des déchets) :
%# use your actual SAX function instead of this one
my_sax_function = @(x,n,a) randi(a, [n 1]);
Voici le code :
%# time series of length=100, with (x,y,z) at each timestamp
data = cumsum(randn(100,3));
%# apply your SAX function to each dimension independently
N = 20; %# number of segments to divide the signal into
A = 3; %# size of alphabet (a,b,c)
dataSAX = zeros(N,3);
for i=1:3
dataSAX(:,i) = my_sax_function(data(:,i), N, A);
end
%# we assume the above function returns integers denoting the symbols
%# therefore row i corresponds to A=3 symbols for each of the 3 x/y/z dimensions
dataSAX(1,:)
%# build cartesian product of all combinations of the A=3 symbols
[x y z] = ndgrid(1:A,1:A,1:A);
cartProd = [x(:) y(:) z(:)];
%# map to the new alphabet with 3*3*3 = 27 symbols
[~,V] = ismember(dataSAX, cartProd, 'rows')
%# A to Z with $ character to make up 27 symbols
oldSymbols = {'a';'b';'c'}; %# 1: a, 2: b, 3: c
newSymbols = cellstr(['A':'Z' '$']'); %# 1: A, ..., 26: Z, 27: $
%# SAX representation of the entire time series as a string
mappedV = char(newSymbols(V))'