实现 Matlab 滤波器以消除两个传感器之间的串扰

信息处理 过滤器设计 matlab 互相关
2022-01-19 11:36:46

我有两个传感器,它们之间有串扰。我想取消相声。为此,我录制了两条轨道,其中 1 号传感器(称为 x1)有一些输入,而 2 号传感器(称为 x2)为零。

有人告诉我进行以下操作:

由于您的相声很小:

1) 直接测量传递函数Hba(ω)

2)减去它如下:

2.1) 测量信号 B 为 0 时信号 A 到传感器 B 的传递函数。

2.2)从这个传递函数(FIR或IIR,取决于它的形状)创建一个滤波器。

2.3) 现在您可以从传感器信号 B 中测量并减去传感器信号 A 的滤波版本:

yb(t)=yb(t)hab(t)ya(t)其中 hab(t) 是串扰滤波器的脉冲响应, 是卷积算子。

这是我为此目的编写的一个 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)))

好 - 减去频率能量: 好结果,减去这个点的频率能量

坏 - 频率能量增加(!): 结果不好,能量增加而不是减少

谢谢!

1个回答

尝试使用其他盲源分离(BSS)算法,如果是非线性混合,甚至可以应用内核BSS去除。