diff --git a/Signal Processing/Generic/MATLAB/Functions/winSincFracDel.m b/Signal Processing/Generic/MATLAB/Functions/winSincFracDel.m index 5f8b3f4f02a69c2c45625db0c30c814476c8e5f4..dde7fd23d754c0db1f2f48a8521e3816a9354ec0 100644 --- a/Signal Processing/Generic/MATLAB/Functions/winSincFracDel.m +++ b/Signal Processing/Generic/MATLAB/Functions/winSincFracDel.m @@ -137,9 +137,9 @@ function [sincFilt, causDel, dSig] = winSincFracDel(del, len, winFun, sig, sigLe % ==================================================== % Calculate some parameters % ==================================================== - fracDel = del - abs(rem(intDel, 1)); % Fractional part of the delay + fracDel = rem(del, 1); % Fractional part of the delay + - % ==================================================== % Generate FIR filter for fractional delay % ==================================================== @@ -156,7 +156,7 @@ function [sincFilt, causDel, dSig] = winSincFracDel(del, len, winFun, sig, sigLe if isstring(winFun) switch lower(winFun) case "rectangular" - win = ones(length(idx), 1); + win = ones(1, length(idx)); case "hann" win = sin(pi * (idx - fracDel + causDel + 1)/len).^2; case "hamming" @@ -171,13 +171,18 @@ function [sincFilt, causDel, dSig] = winSincFracDel(del, len, winFun, sig, sigLe % Apply window to the filter sincFilt = sincFilt .* win; + % Add the integral delay + intDel = zeros(fix(del) + 1, 1); intDel(end) = 1; + sincFilt = conv(sincFilt, intDel); + sincFilt = sincFilt(1:len); + % ==================================================== % Filter the signals % ==================================================== if nargout > 2 for idx = size(sig, 2):-1:1 - dSig(:, idx) = conv(sig, sincFilt, lower(sigLen)); + dSig(:, idx) = conv(sig, sincFilt.', lower(sigLen)); end end end \ No newline at end of file