我有一个包含两个组件的信号。如何在matlab中将它的两个组件分开?请注意,每个实验中组件的位置和形状都不同,我们做了很多实验。它应该根据频率内容自动检测这两个分量。我添加此评论是因为有人建议 c1 = x(1:80);c2 = x(81:end);
我不是指这样的分离。

我有一个包含两个组件的信号。如何在matlab中将它的两个组件分开?请注意,每个实验中组件的位置和形状都不同,我们做了很多实验。它应该根据频率内容自动检测这两个分量。我添加此评论是因为有人建议 c1 = x(1:80);c2 = x(81:end);
我不是指这样的分离。

我建议您看一下“独立组件分析”和“盲源分离”任务。一般来说,给定一个信号,将要分离到其内容的组分混合物通过在复杂情况下的优化得到很好的解决。在这里你展示了一个例子,但可能在每个实验中你都有一些非常不同的东西。我还将查看我的文件,看看我是否还有相关代码可以解决它。
在您的示例中,最重要的区别似乎在于频率。如果这是意料之中的,过滤将是自然的方法。
如果您想根据频率进行分离,那么您似乎想在频域中工作。您可以计算频谱图以查看频率随时间变化的功率,也可以计算整个实验的 PSD 并以这种方式分解信号。然后,您可以通过创建傅立叶域信号的两个副本(每个要识别的分量一个)、将不需要的傅立叶系数归零(将两个副本中的不同系数集归零)并重建两个副本来获得分离的信号信号。要从频谱图中重建信号,请确保窗口重叠至少为 50%。
如果你想让它自动化一点,你可以在频谱图上执行 PCA。Matlab 具有原生的 FFT、PCA 和频谱图功能,因此速度非常快。
也许你应该使用小波或匹配追踪算法。我在那里看到了两个完美的 Gabor 原子。新的 MATLAB 实现了匹配追踪。