将信号段映射到它的信号

时间:2016-07-25 08:22:34

标签: matlab mapping hashtable signal-processing flags

我有一个算法,它根据一些参数切断信号并将其存储在一个结构中。

代码:

classdef Container < handle
    properties
      segments = struct('signal', {}, 'time', {});
    end
    methods
        function this = addsignal(this, varargin)
            interval = diff(varargin{2});
            [~, locations] = findpeaks(interval,'THRESHOLD',0.7)
            edges = [0; locations; numel(varargin{1})+1];  %note that 0 and one past the end is on purpose
            newsegments = struct('signal', cell(numel(edges)-1, 1), 'time', cell(numel(edges)-1, 1), 'error', []);
            %this loop works for no peaks, 1 peak and more than one peak (because of the 0 and numel+1)
            for edgeidx = 1 : numel(edges) - 1
                newsegments(edgeidx).signal = varargin{1}((edges(edgeidx)+1 : edges(edgeidx+1)-1));
                newsegments(edgeidx).time = varargin{2}(edges(edgeidx)+1 : edges(edgeidx+1)-1);
            end   
            this.segments = [this.segments; newsegments]; %and append structure
    end

这就是我称之为这个功能的方式:

file1 = 'file'
signal1 = file1.yaxis
time1 = file1.xaxis
file" = 'file'
signal2 = file2.yaxis
time2 = file2.xaxis
f = ltifilter.container(); % ltifilter is a package
f.addsignal(signal1,time1);
f.addsignal(signal2,time2);
f.addsignal(signal3,time3);

当我用所有信号调用时,segments结构将所有信号的所有斩波段组合在一起,没有办法说哪个段属于哪个信号,我想将段映射到它&# 39;父母的信号是这样的: enter image description here

任何建议都会有所帮助

1 个答案:

答案 0 :(得分:0)

因为您要存储其他信息,所以必须将它们添加到结构中,如

segments = struct('signal', {}, 'time', {}, 'origin', {});

如果您调用代码中显示的功能,我认为最好存储输入名称(例如,singal1)。取决于数据的获取方式以及您拥有的信号数量,可以更好地获取文件名和/或只是数字信号,但这取决于您。只有输入名称很容易,因为有一个matlab函数。只需添加我们函数的for循环:

newsegments(edgeidx).origin = inputname(varargin{1})

请注意,这仅在您如上所示调用时才有效。如果直接将数据作为输入,则inputname为空。