我正在处理一个真实的音频数据,该数据由相同频率的三个不同信号组成。这三个信号由7声嘟嘟声组成,长度和能量水平不同。 (对于每个信号,每次蜂鸣声之间的延迟是不同的)
我的目标是使用相应的匹配滤波器滤除所有这些信号。但问题是信号1的强度太高而我不能将其他信号匹配滤波器应用于数据(因为信号1将掩盖其他匹配滤波器的滤波结果)。
我尝试将流程置于循环中。在每次循环之后,将从数据中减去滤波后的信号。但在许多情况下,来自一个信号的蜂鸣声将与其他信号的蜂鸣声对齐(如第二张图片中所示:信号2的最后一次蜂鸣声被另一个信号的强烈蜂鸣声掩盖)。
我的问题是:
编辑: 这是我提取最强信号的代码:
t_matched = 165428; %matching position
ct3133 = signal_generator(ones(250,1), fs/25, 380, 640, 460, 640, 400, 640); %generate the "signal 1"
n = length(ct3133);
signal_size = length(A222203_30s_d);
t_begin = t_matched - 3.16*fs/25 -125-5; %position where the signal 1 begin to transmitted
% 3.16(s) = (380 + 640 + 460 + 640 + 400 + 640)(ms)
% 25: decimation factor
% 125: the length of 1 beep (10ms)
% 5: correction coeffecient due to the dealy between each beep is not ideal.
%Extracting the signal 1
signal = cat(1, zeros(t_begin, 1), abs(ct3133), zeros(signal_size - t_begin - n, 1));
ct3133_sup = abs(ones(length(signal),1)-signal);
ct3133_extracted = A222203_30s_d.*ct3133_sup;
通过这种方法,我能够从输入数据中删除信号1。然而,这也消除了信号2的最后一次嘟嘟声,该信号被信号1的第五次哔声屏蔽。
当信号2的最后一次蜂鸣声消失时,信号2可以由相应的匹配滤波器检测,但匹配位置不正确。因此,不能执行去除信号2的未来操作。
编辑2: 这是提取信号1操作后的一些图形和数据。
信号1峰值和位置值:
信号1的匹配滤波结果(X:匹配位置,Y:信号1能量):
删除信号1后的输入数据:
显然,信号2仅包含6次嘟嘟声,它假设为7次。
信号2峰值和位置分别为: