多相抽取matlab

信息处理 matlab 抽取
2022-02-08 06:47:02

我是 DSP 新手,目前正在尝试在 matlab 中实现一个简单的多相抽取程序。

M 是抽取因子,x 是输入(现在是方波 8096 个样本),y_polyDec 是多相的结果,输出是常规滤波器然后抽取的结果。

代码 :

FilterBank_LPF = fir1(127, 1/M);
y_polyDec = zeros(8096/M, 1);

for i = 1:M

    p(:, i) = FilterBank_LPF(i:M:end);
    x(:, i) = input(M-i+1:M:end);
    y_polyDec = filter(p(:, i), 1, x(:, i))+ y_polyDec;

end

out_LPF = filter(FilterBank_LPF, 1, input);
output = downsample(out_LPF, M);

%===========================================

如果我比较“输出”和“y_polyDec”(使用 fvtool 比较抽取的样本值或频谱),我注意到值存在差异。我想知道我的代码是否错误,或者我仍然遗漏了什么。

谢谢

1个回答

问题在于多相滤波器的输入信号。它们应该是输入信号的延迟和二次采样版本,如以下代码片段所示:

M=8;    % downsampling factor
L=256;  % length of input signal, integer multiple of M
x=randn(L,1);  % input signal
h = fir1(127, 1/M);
yp = zeros(L/M, 1);

for i = 1:M,
    xtmp = [zeros(i-1,1); x];  % delayed input signal
    tmp = filter( h(i:M:end), 1, xtmp(1:M:L) );  % polyphase filtering
    yp = yp + tmp;  % accumulate outputs of polyphase filters
end

% compare with standard filtering
y = filter ( h, 1, x);
yM = downsample( y, M );

n=1:L/M;
plot(n,(yM-yp)/max(yM))