繁体   English   中英

如何实现匹配的过滤器

[英]How to implement a matched filter

我有一个模板。 我通过对模板的傅立叶变换的共轭进行傅立叶逆变换来计算匹配滤波器的脉冲响应。 我想使用Matlab中的“ filter”命令在我的可用EEG通道之一上执行匹配的过滤操作。 使用滤波器命令,系数“ b”是我的脉冲响应吗? 此外,我想实现Matlab代码以对匹配滤波器的输出进行阈值检测峰值,如何实现呢?

这是您的起点,

% A template is given
temp = randn(100,1);

% Create a matched filter based on the template
b = flipud(temp(:));

% For testing the matched filter, create a random signal which
% contains a match for the template at some time index
x = [randn(200,1); temp(:); randn(300,1)];
n = 1:length(x);

% Process the signal with the matched filter
y = filter(b,1,x);

% Set a detection threshold (exmaple used is 90% of template)
thresh = 0.9

% Compute normalizing factor
u = temp.'*temp;

% Find matches
matches = n(y>thresh*u);

% Plot the results
plot(n,y,'b', n(matches), y(matches), 'ro');

% Print the results to the console
display(matches);

正如安德烈亚斯(Andreas)在回答中提到的那样,不需要进行傅立叶变换。 如果您具有时域模板,则其匹配的过滤器只是其自身的时间反转版本(我可以通过flipud实现)。 随着您的前进,您会发现有很多细微之处需要解决。 该代码之所以有效,是因为我从头到尾都处于控制之中,但是一旦您开始使用实际数据,事情就会变得更加复杂。 例如,选择一个适当的阈值将需要一些有关您将使用的数据的知识。

实际上,根据信号的性质等,峰值检测可能是一项非常重要的任务。在我的情况下,峰值检测很容易,因为除了中间的那一点之外,我的信号与模板完全不相关。我也完全知道我期望看到的幅度。 所有这些假设都是我用来演示概念的问题的过度简化。

实际上,您这样做

 y = filter( h, 1, x )

带有h的临时响应以及x和y输入和输出信号。 匹配滤波器不过是与给定信号模式相关的相关器。

它具有脉冲响应,这与您尝试查找的信号模式的时间相反。

顺便说一句:如果您有一个测量的信号模式,将其反转并将其设置为FIR滤波器的脉冲响应。 如果您在时域进行测量,则无需在频域中执行此操作(两种方法等效,但一种方法比另一种方法更容易出错)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM