尝试消除filter命令的延迟以使用conv命令匹配结果

时间:2017-11-14 11:06:45

标签: matlab filtering signal-processing

图中的蓝色曲线是在MATLAB中使用 conv 命令生成高斯调制信号的结果。但是我需要使用 filter 命令来实现相同的目的,从而产生洋红色的曲线。它向右移动了近15个点,我通过丢弃前15个点来处理,这导致了红色曲线。它完全遵循卷积命令的曲线,直到给定图中指出的点为止。

我在红色曲线的末尾添加了15个零,以使得到的反射器长度与 conv 命令的长度相匹配。

我的问题是,如何让红色曲线跟随蓝色治疗?

我的代码行是:

     phase = conv (integrated_signal,gaussFilter,'same'); 
     phase_1 = filter (gaussFilter,1,integrated_signal);
     delay=16;
     phase_1=phase_1(delay:end);
     phase_1(1,length(phase_2)+delay)=0;

enter image description here

1 个答案:

答案 0 :(得分:1)

通常conv(u,v)产生与filter(u,1,padded_v)相同的结果,其中padded_vv零填充为length(u)+length(v)-1的长度。假设integrated_signal是行向量,可以使用以下命令完成:

padded_signal = [integrated_signal zeros(1,length(gaussFilter)-1)];
% or following for column vectors:
% padded_signal = transpose([transpose(integrated_signal) zeros(1,length(gaussFilter)-1)]);
phase_1 = filter (gaussFilter,1,padded_signal);

现在,根据documentation, 带有conv(u,v,'same')参数的'same'生成

  

u大小相同的卷积的中心部分。

然后只提取相同的中心部分就足够了:

delay = floor(length(gaussFilter)/2);
phase_1=phase_1(delay + [1:length(integrated_signal)]);