- refactored
This commit is contained in:
Executable
+51
@@ -0,0 +1,51 @@
|
||||
% pfftfilt(x,b)
|
||||
function y = pfftfilt(x,h,P,S,L)
|
||||
|
||||
N = length(h);
|
||||
Lx = length(x);
|
||||
C = 2^ceil(log(L+S*L-1)/log(2));
|
||||
Np = S*L;
|
||||
K = Lx/L;
|
||||
|
||||
y = zeros(Lx,1);
|
||||
Hp = zeros(C,P);
|
||||
Xkps = zeros(C,S*P);
|
||||
yk = zeros(C,1);
|
||||
Y = zeros(C,1);
|
||||
xzp = zeros(Lx+C-L,1);
|
||||
pidTbl = [2:P*S];
|
||||
pidTbl(P*S) = 1;
|
||||
pStbl = [0:P*S-1];
|
||||
pStbl(1) = 10;
|
||||
|
||||
pid = 1;
|
||||
|
||||
% h(k) => Hp(k)
|
||||
for p=1:P,
|
||||
Hp(1:C,p) = fft([h((p-1)*Np+1:p*Np);zeros(C-Np,1)],C);
|
||||
end;
|
||||
|
||||
xzp(C-L+1:Lx+C-L) = x;
|
||||
|
||||
for k=1:K,
|
||||
|
||||
kL = (k-1)*L;
|
||||
|
||||
Xkps(1:C,pid) = fft(xzp(kL+1:kL+C),C);
|
||||
|
||||
pS = pid;
|
||||
Y = Hp(1:C,1).*Xkps(1:C,pid);
|
||||
for p=2:P,
|
||||
for i = 1:S
|
||||
pS = pStbl(pS);
|
||||
end;
|
||||
Y = Y + Hp(1:C,p).*Xkps(1:C,pS);
|
||||
end;
|
||||
|
||||
yk = ifft(Y,C);
|
||||
|
||||
y(kL+1:kL+L) = yk(C-L+1:C);
|
||||
|
||||
pid = pidTbl(pid);
|
||||
|
||||
end;
|
||||
Reference in New Issue
Block a user