dsp.channelizer acts unexpectedly with oversamplingRatio=4

1 visualizzazione (ultimi 30 giorni)
Signal to be channelized:
Channelizer filter has normalized bandwidth of .16. Channelizer has eight channels. So without oversampling, the fringes of each .16-wide channel signal get aliased into the .125-wide channel bandwidth:
Oversampling by two clears this up nicely:
I would expect oversampling by four to do "even better", with the eight spectra getting skinnier, but no...:
Here's the code:
d=randn(250000, 1);
d=d+randn(250000, 1)*1i;
d=d+.05*exp(1i*2*pi*.10*[1:250000].');
d=d+.08*exp(1i*2*pi*.11*[1:250000].');
d=d+.11*exp(1i*2*pi*.12*[1:250000].');
figure
plot(abs(fftshift(fft(d))))
f = designfilt('lowpassfir', ...
'PassbandFrequency', .16, ...
'StopbandFrequency', .18, ...
'PassbandRipple', 1, ...
'StopbandAttenuation', 60);
for oversampling=[1 2 4]
channelizer=dsp.Channelizer('NumFrequencyBands', 8, ...
'OversamplingRatio', oversampling, ...
'Specification', 'Coefficients', ...
'LowpassCoefficients', f.Coefficients);
channels=channelizer(d);
figure
for channel=1:8
subplot(2,4,channel)
plot(abs(fftshift(fft(channels(:,channel)))))
title(sprintf("Channel %d", channel))
end
sgtitle(sprintf("Oversampling=%d", oversampling))
end

Risposte (1)

Khodour Al Kadry
Khodour Al Kadry il 14 Lug 2021
Hi Harold
This is a known issue with dsp.Channelizer, check the following bug report.
The issue is fixed for R2021a, R2020b (Update 3) and R2020a (Update 6).
Please update your MATLAB based on the release you are using. You can follow the steps outlined in the following documentation page to update your MATLAB

Categorie

Scopri di più su Signal Processing Toolbox in Help Center e File Exchange

Prodotti


Release

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by