pkg load signal
graphics_toolkit gnuplot
N = 2^17;
n = 0:N-1;
P = 15; % Maximum bin index drawn
dr = 100; % dynamic range of plot
M = 32; % Fourier transform size as multiple of window length
k = ([1:M*N]-1-M*N/2)/M;
k2 = [-P : 1/M : P];
% Uncomment warning() if a text() call includes ("fontname", "Symbol")
% warning("off", "Octave:missing-glyph");
h = figure;
hold on
box on
set(gca,'FontSize',10)
beta=4; alpha = beta/pi
w = besseli(0,beta*sqrt(1-(2*n/(N-1) -1).^2))/besseli(0,beta);
H = abs(fft([w zeros(1,(M-1)*N)]));
H = fftshift(H);
H = H/max(H);
H = 20*log10(H);
H = max(-dr,H);
H2 = interp1 (k, H, k2);
plot(k2, H2, "color", "blue", "linewidth", 2)
xlim([-P P])
ylim([-dr 6])
set(gca,"YTick", [0 : -10 : -dr])
grid("on")
ylabel("decibels")
xlabel("DFT bins")
%text(4.26, -36, '\pi\alpha=4; \alpha=1.27', "color", "blue", "fontsize", 12)
%But let's do it the instructive way:
str = ['\pi\alpha=' num2str(beta,'%1i') '; \alpha=' num2str(beta/pi,'%4.2f')];
text(4.26, -36, str, "color", "blue", "fontsize", 12)
beta=8; alpha = beta/pi
w = besseli(0,beta*sqrt(1-(2*n/(N-1) -1).^2))/besseli(0,beta);
H = abs(fft([w zeros(1,(M-1)*N)]));
H = fftshift(H);
H = H/max(H);
H = 20*log10(H);
H = max(-dr,H);
H2 = interp1 (k, H, k2);
plot(k2, H2, "color", "red", "linewidth", 2)
%text(2.5, -19.5, '\pi\alpha=8; \alpha=2.55', "color", "red", "fontsize", 12)
%But let's do it the less "manual" way:
str = ['\pi\alpha=' num2str(beta,'%1i') '; \alpha=' num2str(beta/pi,'%4.2f')];
text(2.5, -19.5, str, "color", "red", "fontsize", 12)
title("Fourier transforms of two Kaiser windows")
% The following print() converts plain-text Greek characters in text() strings into Symbol font.
% Therefore it isn't necessary to include ("fontname", "Symbol") in the text() calls above,
% and doing so causes warnings, some of which can be suppressed by warning().
print(h,"-dsvg","-color",'C:\Users\BobK\Kaiser-Window-Spectra.svg')