Signal processing 三维信号的离散化

Signal processing 三维信号的离散化,signal-processing,time-series,matlab,discretization,Signal Processing,Time Series,Matlab,Discretization,讨论如何将时间序列(x,t)转换为符号。基于此,我有一些基本的查询。如果时间信号是(x,y,z,t)的组合,表示位置坐标,或者简单地(x,y,t)表示带有时间戳t的二维图像,该怎么办。那么如何使用此工具分配符号/离散化。请提供帮助。您可以分别对每个维度应用转换,然后为每个时间戳组合符号/字母 以(x,y,z,t)为例,对于t=1,你会得到组合b,a,c,然后对于t=2,你会得到组合a,a,c,等等 如果需要,您可以将这些符号组合成“巨型符号”。假设这组符号是symbols={a,b,c}。然后,

讨论如何将时间序列(x,t)转换为符号。基于此,我有一些基本的查询。如果时间信号是(x,y,z,t)的组合,表示位置坐标,或者简单地(x,y,t)表示带有时间戳t的二维图像,该怎么办。那么如何使用此工具分配符号/离散化。请提供帮助。

您可以分别对每个维度应用转换,然后为每个时间戳组合符号/字母

以(x,y,z,t)为例,对于t=1,你会得到组合
b,a,c
,然后对于t=2,你会得到组合
a,a,c
,等等

如果需要,您可以将这些符号组合成“巨型符号”。假设这组符号是
symbols={a,b,c}
。然后,新的字母集就是笛卡尔乘积
sxsxsxs
(每个维度一个)

换句话说,
aaa
成为新字母
A
aab
作为
B
,然后
aac
aba
abb
,等等


编辑: 这里有一些代码来说明我的想法。由于我没有SAX算法的实现,我将使用以下函数作为占位符(它返回垃圾):

代码如下:

%# 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))'
可以分别对每个维度应用转换,然后组合每个时间戳的符号/字母

以(x,y,z,t)为例,对于t=1,你会得到组合
b,a,c
,然后对于t=2,你会得到组合
a,a,c
,等等

如果需要,您可以将这些符号组合成“巨型符号”。假设这组符号是
symbols={a,b,c}
。然后,新的字母集就是笛卡尔乘积
sxsxsxs
(每个维度一个)

换句话说,
aaa
成为新字母
A
aab
作为
B
,然后
aac
aba
abb
,等等


编辑: 这里有一些代码来说明我的想法。由于我没有SAX算法的实现,我将使用以下函数作为占位符(它返回垃圾):

代码如下:

%# 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))'

谢谢你的回复。请你详细说明我应该如何使用笛卡尔积,我指的是逻辑,以及如何在matlab中进行编码。看看这个问题:@PriyaM:我希望我在解释这个问题时说得很清楚。它只是一个新的集合,由每个输入集合中的一个元素组成。换句话说,它是所有
(x,y,z)
三元组的集合,其中
x
y
z
都来自集合
Symbols={a,b,c}
要形成这三个字母的所有组合,我浏览了链接,谢谢你,但我仍然很难理解aaa如何由a表示,aab为B,因为链接中的代码返回3个单独的数字作为组合,而我想将3个字母(或数字)压缩成一个符号!感谢您的光临patience@PriyaM:是的,您将每三个字母组合映射到一个新的组合符号。例如,对于a=1、b=2、c=3,我们将把组合
[1 1]
称为
C1
,类似地,直到
[3 3 3]
将是
C27
(类似于我链接到的笛卡尔乘积代码生成的)。您只需搜索某个时间点上的每个三个字母组合,即笛卡尔乘积表中的对应行,并将行索引指定为表示字符。感谢您的回复。请你详细说明我应该如何使用笛卡尔积,我指的是逻辑,以及如何在matlab中进行编码。看看这个问题:@PriyaM:我希望我在解释这个问题时说得很清楚。它只是一个新的集合,由每个输入集合中的一个元素组成。换句话说,它是所有
(x,y,z)
三元组的集合,其中
x
y
z
都来自集合
Symbols={a,b,c}
要形成这三个字母的所有组合,我浏览了链接,谢谢你,但我仍然很难理解aaa如何由a表示,aab为B,因为链接中的代码返回3个单独的数字作为组合,而我想将3个字母(或数字)压缩成一个符号!感谢您的光临patience@PriyaM:是的,您将每三个字母组合映射到一个新的组合符号。例如,对于a=1、b=2、c=3,我们将把组合
[1 1]
称为
C1
,类似地,直到
[3 3 3]
将是
C27
(类似于我链接到的笛卡尔乘积代码生成的)。只需搜索某个时间点上的每个三个字母组合,即笛卡尔乘积表中的对应行,并将行索引指定为表示字符。