【问题标题】:How to find the position of a sample signal in the main signal?如何在主信号中找到样本信号的位置?
【发布时间】:2014-09-17 22:50:26
【问题描述】:

我有一个 14 秒(120000 个样本)的主信号,其中包含一个样本信号,我和我分别有一个 2 秒(20000 个样本)的样本信号(基本上是波形文件)。我想在matlab的主信号中找到样本信号(即2秒信号)的位置。

我已经尝试了上述循环逻辑,但是产生输出所花费的时间太长了。

我不想使用matlab内置的互相关函数。

请建议一些方法以在最短的时间内(不到一分钟)获得结果。

【问题讨论】:

  • 有什么理由不想使用matlab的互相关功能?这似乎正是您想要使用这种情况的原因。
  • 较小的样本信号及其副本位于主信号内,是否在某个小的容差范围内相等?此外,它是否作为主信号中的 20000 个样本的“连续”集出现?我的意思是,两者之间是否有任何嘈杂的样本?
  • @uesp 我想找到一种不同的方法来做到这一点。
  • @parag 这是连续的 20000 个样本,这 20000 个样本也位于主信号中,但我想找出样本信号的位置(以秒为单位)。

标签: c++ c matlab signals signal-processing


【解决方案1】:

我能想到的一种方法是您可以将main signalsample signal 转换为string 并使用regexp 找出信号起点。这是一个例子:

a=randn(1,120000); % main signal
b=a(100:20100); % Sample signal
sig_str=num2str(a); % Convert main signal into string
sampl_str=num2str(b); % Convert sample signal into string
sig_split=regexp(sig_str,sampl_str,'split');
sampl_sig_start_point=length(num2str(sig_split{1}))+1;
sampl_sig_end_point=sampl_sig_start_point+length(b)-1;

希望对你有所帮助。

【讨论】:

    【解决方案2】:

    我不认为您可以避免循环遍历所有 120,000 个样本。但是为了提高进行相关性的速度,您可以尝试将 20,000 个样本的前 5000 个样本与主要的 120,000 个样本相关联。如果您在某些方面获得了良好的相关性指向主要的 120,000 个样本,然后尝试将整个 20,000 个样本与该点的 120,000 个样本相关联。基本上你必须在主信号中检查你的信号的第一部分,如果你在某个时候找到你的第一部分,你在那个时候检查完整的部分..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-23
      • 2013-11-20
      • 1970-01-01
      • 1970-01-01
      • 2016-10-19
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      相关资源
      最近更新 更多