我有两个传感器,它们之间有串扰。我想取消相声。为此,我录制了两条轨道,其中 1 号传感器(称为 x1)有一些输入,而 2 号传感器(称为 x2)为零。
有人告诉我进行以下操作:
由于您的相声很小:
1) 直接测量传递函数。
2)减去它如下:
2.1) 测量信号 B 为 0 时信号 A 到传感器 B 的传递函数。
2.2)从这个传递函数(FIR或IIR,取决于它的形状)创建一个滤波器。
2.3) 现在您可以从传感器信号 B 中测量并减去传感器信号 A 的滤波版本:
。其中 是串扰滤波器的脉冲响应, 是卷积算子。
这是我为此目的编写的一个 Matlab 代码,但它的性能真的很差。如果有人建议我做错了什么,或者可以建议一个新代码,我将不胜感激。如果我可以说,一个朋友帮我实现了这个,我认为我们没有实现过滤器部分,但也许我错了。
% The files designated to measure the transfer function.
% x1 has some input. x2 is is zero, and affected by the x1.
x1 = wavread(file1);
x2 = wavread(file2);
%The transfer function.
Hab = fft(x2)./fft(x1);
hab=ifft(Hab);
% Some new tracks, where x3 is recorded from sensor no.1 and x4 from sensor no.2.
% All the files have the same length.
x3 = wavread(file3);
x4 = wavread(file4);
c=conv(hab,x3);
% Subtracted signal
x4 = x4 - c(1:length(x4));
以下代码没有减去 x4 上的串扰。这是一些解释问题的图像。对于某些频率,上述代码实际上做得很好并减去了串扰,而对于某些频率则相反并增加了能量。plot(abs(fft(x4)))
:
好 - 减去频率能量:
坏 - 频率能量增加(!):
谢谢!