Bump SINC_HIGHEST BW to 0.962.
This commit is contained in:
parent
4bca26097c
commit
1e44407bd8
|
@ -71,7 +71,7 @@
|
||||||
#elif defined(SINC_HIGHEST_QUALITY)
|
#elif defined(SINC_HIGHEST_QUALITY)
|
||||||
#define SINC_WINDOW_KAISER
|
#define SINC_WINDOW_KAISER
|
||||||
#define SINC_WINDOW_KAISER_BETA 14.5
|
#define SINC_WINDOW_KAISER_BETA 14.5
|
||||||
#define CUTOFF 0.95
|
#define CUTOFF 0.962
|
||||||
#define PHASE_BITS 10
|
#define PHASE_BITS 10
|
||||||
#define SUBPHASE_BITS 14
|
#define SUBPHASE_BITS 14
|
||||||
#define SINC_COEFF_LERP 1
|
#define SINC_COEFF_LERP 1
|
||||||
|
|
|
@ -12,9 +12,10 @@ subplot(2, 1, 2), plot(rarch_kaiser - real_kaiser), title('Error');
|
||||||
%%
|
%%
|
||||||
% 4-tap and 8-tap are Lanczos windowed, but include here for completeness.
|
% 4-tap and 8-tap are Lanczos windowed, but include here for completeness.
|
||||||
phases = 256;
|
phases = 256;
|
||||||
bw = 0.375;
|
ratio = 2.0;
|
||||||
downsample = round(phases / bw);
|
bw = min(1.0, ratio);
|
||||||
cutoffs = bw * [0.65 0.75 0.825 0.90 0.95];
|
downsample = round(phases / ratio);
|
||||||
|
cutoffs = bw * [0.65 0.75 0.825 0.90 0.962];
|
||||||
betas = [2.0 3.0 5.5 10.5 14.5];
|
betas = [2.0 3.0 5.5 10.5 14.5];
|
||||||
|
|
||||||
sidelobes = round([2 4 8 32 128] / bw);
|
sidelobes = round([2 4 8 32 128] / bw);
|
||||||
|
@ -22,28 +23,29 @@ taps = sidelobes * 2;
|
||||||
|
|
||||||
freqs = 0.05 : 0.02 : 0.99;
|
freqs = 0.05 : 0.02 : 0.99;
|
||||||
|
|
||||||
filters = length(taps);
|
%filters = length(taps);
|
||||||
for i = 1 : filters
|
%for i = 1 : filters
|
||||||
|
for i = 5
|
||||||
filter_length = taps(i) * phases;
|
filter_length = taps(i) * phases;
|
||||||
|
|
||||||
% Generate SINC.
|
% Generate SINC.
|
||||||
sinc_indices = 2 * ((0 : (filter_length - 1)) / (filter_length - 1)) - 1;
|
sinc_indices = 2 * ((0 : (filter_length - 1)) / filter_length) - 1;
|
||||||
s = cutoffs(i) * sinc(cutoffs(i) * sinc_indices * sidelobes(i));
|
s = cutoffs(i) * sinc(cutoffs(i) * sinc_indices * sidelobes(i));
|
||||||
win = kaiser(filter_length, betas(i))';
|
win = kaiser(filter_length, betas(i))';
|
||||||
filter = s .* win;
|
filter = s .* win;
|
||||||
|
|
||||||
impulse_response_half = 0.5 * upfirdn(1, filter, phases, downsample);
|
impulse_response_half = upfirdn(1, filter, phases, downsample) / bw;
|
||||||
figure('name', sprintf('Response SINC: %d taps', taps(i)));
|
figure('name', sprintf('Response SINC: %d taps', taps(i)));
|
||||||
freqz(impulse_response_half);
|
freqz(impulse_response_half);
|
||||||
ylim([-200 0]);
|
ylim([-200 0]);
|
||||||
|
|
||||||
signal = zeros(1, 8001);
|
signal = zeros(1, 80001);
|
||||||
for freq = freqs
|
for freq = freqs
|
||||||
signal = signal + sin(pi * freq * (0 : 8000));
|
signal = signal + sin(pi * freq * (0 : 80000));
|
||||||
end
|
end
|
||||||
|
|
||||||
resampled = upfirdn(signal, filter, phases, downsample);
|
resampled = upfirdn(signal, filter, phases, downsample);
|
||||||
figure('name', sprintf('Kaiser SINC: %d taps, w = %.f', taps(i), freq));
|
figure('name', sprintf('Kaiser SINC: %d taps, w = %.f', taps(i), freq));
|
||||||
freqz(resampled .* kaiser(length(resampled), 40.0)');
|
freqz(resampled .* kaiser(length(resampled), 40.0)', 1, 16 * 1024);
|
||||||
ylim([-80 70]);
|
ylim([-180 100]);
|
||||||
end
|
end
|
Loading…
Reference in New Issue