git-svn-id: http://moon:8086/svn/matlab/trunk@157 801c6759-fa7c-4059-a304-17956f83a07c
38 lines
823 B
Matlab
Executable File
38 lines
823 B
Matlab
Executable File
function [w, idx] = wkaiser(n, b)
|
|
|
|
% function [w, idx] = wkaiser(n, b)
|
|
|
|
k1 = 1.0/besselizero(b);
|
|
k2 = 1 - mod(n, 2);
|
|
ende = fix((n + 1)/2);
|
|
|
|
idx = zeros(n, 1);
|
|
% Calculate window coefficients
|
|
for k=0:ende-1,
|
|
tmp = (2*k + k2) / (n - 1.0);
|
|
tmp2 = k1 * besselizero(b*sqrt(1.0 - tmp*tmp));
|
|
mm = ende-(mod(not(k2), 2))+k+1;
|
|
nn = ende-k;
|
|
w(mm) = tmp2;
|
|
w(nn) = tmp2;
|
|
idx(nn) = idx(nn) + 1;
|
|
idx(mm) = idx(mm) + 1;
|
|
end;
|
|
|
|
function sum = besselizero(x)
|
|
BIZ_EPSILON = 1E-21; % Max error acceptable
|
|
sum = 1.0;
|
|
u = 1.0;
|
|
halfx = x/2.0;
|
|
n = 1;
|
|
while(1)
|
|
temp = halfx/n;
|
|
u = u * temp * temp;
|
|
sum = sum + u;
|
|
n = n + 1;
|
|
if (u < (BIZ_EPSILON * sum))
|
|
break;
|
|
end;
|
|
end;
|
|
|