试图消除 filter 命令的延迟以匹配 conv 命令的结果
Trying to eliminate delay of filter command to match the results with conv command
图中的蓝色曲线是在 MATLAB 中使用 conv 命令生成高斯调制信号的结果。但出于相同的目的,我需要使用 filter 命令,从而生成洋红色曲线。它向右移动了将近 15 个点,我通过丢弃前 15 个点来处理,这导致了红色曲线。它完美地遵循卷积命令的曲线,直到给定图中指出的点。
我在红色曲线的末尾添加了 15 个零,以匹配结果的 rector 长度与 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;
通常 conv(u,v)
产生与 filter(u,1,padded_v)
相同的结果,其中 padded_v
是 v
零填充到 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'
参数产生
Central part of the convolution of the same size as u
.
然后只需要提取相同的中心部分:
delay = floor(length(gaussFilter)/2);
phase_1=phase_1(delay + [1:length(integrated_signal)]);
图中的蓝色曲线是在 MATLAB 中使用 conv 命令生成高斯调制信号的结果。但出于相同的目的,我需要使用 filter 命令,从而生成洋红色曲线。它向右移动了将近 15 个点,我通过丢弃前 15 个点来处理,这导致了红色曲线。它完美地遵循卷积命令的曲线,直到给定图中指出的点。
我在红色曲线的末尾添加了 15 个零,以匹配结果的 rector 长度与 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;
通常 conv(u,v)
产生与 filter(u,1,padded_v)
相同的结果,其中 padded_v
是 v
零填充到 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'
参数产生
Central part of the convolution of the same size as
u
.
然后只需要提取相同的中心部分:
delay = floor(length(gaussFilter)/2);
phase_1=phase_1(delay + [1:length(integrated_signal)]);