【问题标题】:Discretization of 3dimensional signals3维信号的离散化
【发布时间】:2012-07-26 00:45:48
【问题描述】:

Symbolic Aggregate Approximation 谈论将时间序列(x,t)转换为符号。基于此,我有几个基本的查询。如果时间信号是表示位置坐标的 (x,y,z,t) 的复合物,或者是带有时间戳 t 的二维图像的简单 (x,y,t) 的复合物怎么办?那我如何使用这个工具来分配符号/离散化。请帮助。

【问题讨论】:

    标签: signal-processing time-series matlab discretization


    【解决方案1】:

    您可以将SAX 转换分别应用于每个维度,然后组合每个时间戳的符号/字母。

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

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

    换句话说,aaa 成为新字母 AaabB,然后是 aacabaabb,等等。


    编辑:

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

    %# use your actual SAX function instead of this one
    my_sax_function = @(x,n,a) randi(a, [n 1]);
    

    代码如下:

    %# 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:我希望我在解释cartesian product 时很清楚。它只是通过从每个输入集中获取一个元素而形成的一个新集合。换句话说,它是所有(x,y,z) 三元组的集合,其中x yz 都来自集合Symbols={a,b,c},以形成这三个字母的所有组合
    • 好吧,我浏览了链接,谢谢,但我仍然难以理解 aaa 将如何由 A,aab 表示为 B,因为链接中的代码返回 3 个单独的数字作为组合,而我想把3个字母(或数字)挤成一个符号!请耐心等待
    • @PriyaM:是的,您会将每三个字母组合映射到一个新的合成符号。例如,对于 a=1,b=2,c=3,我们将简单地将组合 [1 1 1] 称为 C1,类似地直到 [3 3 3] 将是 C27(类似于使用笛卡尔积生成的 this我链接到的代码)。您只需在某个时间点搜索您拥有的每个三个字母组合,即笛卡尔积表中的相应行,并将行索引分配给它作为代表字符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多