在matlab中提取具有多个频率分量的信号
Posted
技术标签:
【中文标题】在matlab中提取具有多个频率分量的信号【英文标题】:Extracting a signal with multiple frequency components in matlab 【发布时间】:2017-08-17 09:07:19 【问题描述】:如果我有一个混合了不同频率的正弦波和余弦波的信号,我可以通过设计一个通带频率等于我想要的频率的带通滤波器来轻松提取其中一个。
如果我必须提取具有多个频率分量的信号怎么办?
例如,如果我有两个音频信号。显然,音频信号包含许多频率。设两个音频信号为a1,a2。
现在我像 A=a1+a2 一样添加它们;
请注意,我不会将一个音频附加到另一个音频。我正在添加它们的振幅。
为此,我正在这样做:
[a1,fs1]=audioread('1.mp3');
[a2,fs2]=audioread('sample.mp3');
A=zeros(1,max(length(a1),length(a2)));
for i=1:length(a1)
A(i)=a1(i);
end
for i=1:length(a2)
A(i)=A(i)+a2(i);
end
现在我在变量 A
中有一个复合音频。
现在,如果我想从A
中提取a1
,我该怎么做?如果它是一个简单的频率范围,我会很容易地提取它。但是这里两个音频信号几乎都有相同的频率集。甚至可以这样提取吗?
谢谢你:)
编辑:
按照这里的傅立叶图要求,我正在粘贴它们:
【问题讨论】:
你可以用A(1:length(a1)) = a1
和A(1:length(a2)) = A(1:length(a2)) + a2
替换你的for
循环。那么除了A - a2
的一些变化之外,提取a1
是什么意思?这两个音频信号是否专门使用不同的频率?
尝试为每个音频源分别运行傅立叶图以分析它们的频谱,并分享结果。这不是一个简单的过滤问题,而是取决于您拥有的数据并需要定制的解决方案。
正如 crazyGamer 所指出的,这不是您可以通过应用通带滤波器轻松解决的问题。这听起来更像是使用单个麦克风进行的盲源分离。您可以在 google 上找到一些出版物。
@crazyGamer 我已经通过更新问题粘贴了傅立叶图......请看一下......
【参考方案1】:
如果您有一个参考信号 s1,您可以从汇总信号 A 中减去它并获得目标信号: s2 = A - s1。
但是,如果您没有这些信号之一,您就无法获得单独的信号。有无数种不同信号 s1 和 s2 的组合可以像 s1+s2 一样创建 A。所以不可能把它们分开。
【讨论】:
以上是关于在matlab中提取具有多个频率分量的信号的主要内容,如果未能解决你的问题,请参考以下文章
数字信号去噪基于matlab粒子滤波器与FBSMAP平滑方法数字信号去噪含Matlab源码 2179期
语音处理基于matlab GUI音频信号提取分析含Matlab源码 1738期