如何在主信号中找到采样信号的位置?

时间:2014-09-17 22:50:26

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

我能想到的一种方法是,您可以将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;

希望这会对你有所帮助。

答案 1 :(得分:0)

我认为你可以摆脱所有120,000的循环。但是为了增加相关性的强度,你可以尝试将20,000个样本的前5000个样本与主要的120,000个样本相关联。如果你在某些情况下获得良好的相关性在主要的120,000个样本中,然后尝试将整个20,000个样本与120,000个样本相关联。基本上你必须在主信号中检查你信号的第一部分,如果你在某个时刻找到你的第一部分你在那一点检查完整部分..