【问题标题】:Mapping signal segments to it's signal将信号段映射到它的信号
【发布时间】:2016-11-28 12:06:40
【问题描述】:

我有一个算法可以根据一些参数对信号进行斩波并将其存储在一个结构中。

代码:

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 结构将组合所有信号的所有斩波段,无法说明哪个段属于哪个信号,我想将这些段映射到它的父信号,例如这:

任何建议都会有所帮助

【问题讨论】:

  • 你是否真的用输入'signal1'来调用它,这是你想要存储在结构中的名称吗?
  • 是的,类似的。
  • 编辑了我的代码,以显示信号是如何导入的。

标签: matlab mapping hashtable signal-processing flags


【解决方案1】:

因为你想存储额外的信息,你必须将它们添加到结构中,比如

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

如果您调用代码中所示的函数,我认为最好存储输入名称(例如,singal1)。取决于数据的获取方式以及您拥有多少信号,最好获取文件名和/或仅获取信号的数字,但这取决于您。只有输入名称很简单,因为有一个 matlab 函数。只需将我们的函数添加到 for 循环中即可:

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

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

【讨论】:

  • 我想做的是,我想获取给定信号的所有段,例如我有一个名为Signal1 的信号。在我的代码的后期阶段,对于某些计算,我只想使用 Signal1 的段。我的代码的另一部分我想使用Signal2 的片段。我该如何解决这个问题
  • 你认为创建另一个类来保存数据更好吗?
  • 你可以像这样使用它:当所有信号都被添加时,尝试使用segments(segments.origin=='signal1') 并且你只得到你的结构中从signal1添加数据的部分。如果这对你有用,我不会创建另一个类,但你必须决定什么在你的代码中效果更好
  • 感谢您的回复,我完全理解这个概念。我还有一个问题。一切都应该自动化。上传的信号数量是任意的,它被切分成的段数也是任意的,有什么办法可以计算出上传的信号总数(因为在我的容器类中,没有完整信号的概念,我只处理带段)及其段。
  • 实际上有一些。但是要找出正确的,您应该在上传信号的地方添加更多代码。如果它们都像您显示的那样被上传是唯一的(segments.origin),但是 opload 并不是真正自动化的
猜你喜欢
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 2014-03-27
  • 2018-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多