Effacer les filtres
Effacer les filtres

upfirdn increases number of samples

14 vues (au cours des 30 derniers jours)
William Greenway
William Greenway le 24 Jan 2022
Commenté : Pratyush Roy le 31 Jan 2022
I'm trying to apply a bandpass filter to an audio sound that I am inputting into MATLAB. When I apply my bandpass filter to the audio sound then I find that the number of samples increases.
[xx,fs] = audioread('funk.wav');
% resample at 8000Hz
xx_resamp = resample(xx,8000,44100);
% Create bandpass filter
fsamp = 8000;
% f = (-0.5:.001:0.5)*fsamp;
fcuts = [0 20 230 250];
mags = [0 1 0];
devs = [0.01 0.05 0.01];
[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fsamp);
n = n + rem(n,2);
bpf = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale');
% Apply bandpass filter using upfirdn
y = upfirdn(xx_resamp,bpf);
% Find length of sample at different stages
lengthy = length(y) %returns 172915
lengthxxresamp = length(xx_resamp) %returns 172021
lengthbpf = length(bpf) %returns 895
% interestingly 172021 + 895 == 172915
Why does applying bpf using upfirdn increase the number of samples?

Réponse acceptée

Pratyush Roy
Pratyush Roy le 27 Jan 2022
Modifié(e) : Pratyush Roy le 27 Jan 2022
Hi William,
As per my understanding, the output sequence after appyling the bandpass filter has a length different from that of the input sequence.
The upfirdn function performs three steps:
  1. Upsample the input data in the matrix xx_resamp by a factor of the integer p by inserting zeroes, where p is the upsampling factor.
  2. FIR filter the upsampled signal data with the impulse response sequence given in the vector or matrix bpf. This is a convolution operation.
  3. Downsample the result by a factor of the integer by throwing away samples, where q is the downsampling factor.
If the input is of length and the FIR filter is of length then the output in the step 2 will be of length (which happened in this case as well, since 172021 + 895 - 1 = 172915). The upsampling and downsampling factors for the function upfirdn is 1 by default, hence a workaround would be to change these values so that the output sequence has the desired length.
Hope this helps!
  2 commentaires
William Greenway
William Greenway le 29 Jan 2022
Thanks very much! Why does a convolution operation increase the length?
Pratyush Roy
Pratyush Roy le 31 Jan 2022
Hi William,
Please refer to this documentation page for more details.

Connectez-vous pour commenter.

Plus de réponses (0)




Community Treasure Hunt

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

Start Hunting!

Translated by