graphics_toolkit gnuplot
N = 256; % sams_per_fft;
window = blackmanharris(N)/sum(blackmanharris(N));
A = -N/2; % left limit of plots
B= N/2-1; % right limit of plots
%
Fs = N; % sams_per_sec;
HzPerBin = Fs/N;
freq_bin = 9+1/sqrt(2); % any signal frequency not harmonically related to Fs
freq_Hz = freq_bin*HzPerBin;
%
L = 120000; % amount of data to average
n = 1:L;
x = exp(j*2*pi*freq_Hz/Fs*n); % non-quantized signal
sig8 = round(2^8 * x)/2^8;
sig6 = round(2^6 * x)/2^6;
%
sams_per_offset = 0.75*N; % overlap = 25%
%
% number of samples available beyond just one FFT
excess_sams = length(x) - N;
%
j1 = floor( excess_sams / sams_per_offset );
sams_per_offset = floor( excess_sams / j1 );
num_ffts = 1 + j1;
%
% define the first block of data
samples = 1:N;
%
amplitude8 = zeros(1,N);
amplitude6 = zeros(1,N);
%
% Loop over all the available blocks
for j1 = 1 : num_ffts
amplitude8 = amplitude8 + abs(fft( sig8(samples) .* window ));
amplitude6 = amplitude6 + abs(fft( sig6(samples) .* window ));
samples = samples + sams_per_offset;
end
%
amplitude8 = 20*log10(fftshift(amplitude8/num_ffts));
amplitude6 = 20*log10(fftshift(amplitude6/num_ffts));
%
abscissa = A:B;
figure (1, 'color', .95*[1 1 1])
subplot(2,1,1);
h = area(abscissa, amplitude6(abscissa +N/2+1), ...
'FaceColor', [.871 .49 0], 'edgecolor', [.871 .49 0]);
set(h,'BaseValue',-90)
set(gca, 'YTick', [0 -40 -68 -90])
set(gca, 'XTick', [])
set(gca, 'YGrid','on', 'color', 'white')
xlim([A B])
ylim([-90 2])
text(A, 10, '6 bits')
xlabel('\leftarrow frequency \rightarrow', 'fontsize', 10)
ylabel('decibels', 'fontsize', 10)
title('Spectral view of a sinusoid and its quantization noise-floor','fontsize', 12);
% Move subplot downward to prevent title being cropped by gnuplot bug.
set(gca, "position", get(gca, "position") - [0 0 0 0.02])
%
subplot(2,1,2);
h = area(abscissa, amplitude8(abscissa +N/2+1), ...
'FaceColor', [.871 .49 0], 'edgecolor', [.871 .49 0]);
set(h,'BaseValue',-90)
set(gca, 'YTick', [0 -40 -80])
set(gca, 'XTick', [])
set(gca, 'YGrid','on', 'color', 'white')
xlim([A B])
ylim([-90 2])
text(A, 10, '8 bits')
xlabel('\leftarrow frequency \rightarrow')
ylabel('decibels', 'fontsize', 10)