【发布时间】:2021-08-29 23:32:25
【问题描述】:
出于学习目的,我一直在尝试在 Python 中实现 Prof.Selesnick 的 DWT 实现的 MATLAB 代码。
function [lo, hi] = afb(x, af)
% [lo, hi] = afb(x, af)
%
% Analysis filter bank
% x -- N-point vector (N even); the resolution should be 2x filter length
%
% af -- analysis filters
% af(:, 1): lowpass filter (even length)
% af(:, 2): highpass filter (even length)
%
% lo: Low frequency
% hi: High frequency
%
N = length(x);
L = length(af)/2;
x = cshift(x,-L);
% lowpass filter
lo = upfirdn(x, af(:,1), 1, 2);
lo(1:L) = lo(N/2+[1:L]) + lo(1:L);
lo = lo(1:N/2);
% highpass filter
hi = upfirdn(x, af(:,2), 1, 2);
hi(1:L) = hi(N/2+[1:L]) + hi(1:L);
hi = hi(1:N/2);
我特别卡在lo(1:L) = lo(N/2+[1:L]) + lo(1:L);
我尝试了lo[np.arange(0,L)]=lo[N // 2 + np.concatenate([np.arange(0,L)])) + lo[np.arange(0,L)]
但它似乎不起作用。将不胜感激。
我有一个大小为 10,000 的输入信号 x,当我执行代码时,它会停在该特定行并显示 index 5001 is out of bounds for axis 0 with size 5001。我好像越界了。
【问题讨论】:
-
您需要在这里学习的第一件事是如何正确报告问题。使用回溯显示实际错误。不要只说“不起作用”。这让我们很恼火 :) 你需要付出一些努力来理解这个错误。
-
看来你让它变得比现在复杂得多。您不需要
arange,并且在 MATLAB 代码中没有串联。 -
您好,很抱歉,这是我第一次在 stackoverflow 上发帖,我只是经常潜伏在这里。