2017-08-15 2 views
1

Je construis une cascade de filtres (une décimation CIC suivi d'un filtre passe-bas) et je suis intéressé par la fréquence et la réponse d'impulsion.Convolution des réponses impulsionnelles des différents taux d'échantillonnage

Sachant que la décimation CIC a une réponse impulsionnelle similaire à un filtre à moyenne mobile (MA), je calcule la réponse impulsionnelle de la décimation CIC de la manière suivante

%parameters of cic 
D=300; %deci factor 
M=1; %delays of comb 
Stages=3; 
% get impulse response estimated based on MA 
N=M*D; 
B=ones(1,N); 
B2=conv(B,B); 
B3=conv(B2,B); 
b_cic=B3*N^(-Stages); % FIR coefs and impulse response 

Que le taux d'échantillonnage de mon le signal d'entrée sera de 600kHz, cela signifierait que la sortie du décimateur CIC est à 2kHz. Laisse supposer que le coefficient du filtre passe-bas FIR sont les suivantes

b_lp=[b_1 b_2 b_3 b_4 b_5]; % the values are not important right now 

Voici vient ma question, je pourrais estimer la réponse du filtre de la cascade en multipliant les réponses en fréquence (je sais que je dois prendre en compte les différents taux d'échantillonnage et la longueur des réponses):

[Hcic,Fcic]=freqz(b_cic,1,300*1000,fs); 
[Hlp,Flp]=freqz(b_lp,1,1000,fs/300); 

Cependant, je voudrais savoir s'il est possible de les convoluer réponses impulsionnelles dans le domaine temporel prenant en compte le sous-échantillonnage? Par exemple quelque chose comme:

b_cas = con(b_cic,b_lp); % <--- I know that this does not work due to different sampling rates 

Jusqu'à présent, je ne pouvais pas trouver quelque chose en utilisant Google ou ici.

Je suis conscient que je pourrais utiliser la construction en fonction de Matlab pour les différents filtres et en cascade les utilisant

dsp.FilterCascade 
+0

Je suis assez sûr que je manque le point, mais pourquoi un tel processus impliqué? Ne pouvez-vous pas simplement envoyer une impulsion dans votre décimateur et votre filtre passe-bas? Puisque tous vos filtres semblent être non-récursifs, votre réponse impulsionnelle devrait être hors durée finie. Calculez la FFT de votre réponse impulsionnelle que vous capturez et vous avez le spectre. –

+0

Le problème est, que la réponse impulsionnelle du CIC est estimée avec la réponse impulsionnelle MA. Cependant, cette estimation ne prend pas en compte le sous-échantillonnage. Donc, l'utilisation du filtre LP configuré pour une fréquence d'échantillonnage différente entraînerait une mauvaise impulsion et l'estimation de la réponse en fréquence serait également incorrecte. Comme mentionné, je suis conscient des possibilités de surmonter ce problème, la multiplication dans le domaine fréquentiel ou la construction d'objets filtrants et de les cascader. Cependant, je voudrais savoir si je peux le faire dans le domaine temporel sur la base de l'approche décrite ici. – Irreducible

Répondre

1

Vous devez regarder la réponse en fréquence des deux filtres au taux d'entrée (600 kHz). Si vous upsample la réponse impulsionnelle du passe-bas FIR filtrer jusqu'à la vitesse d'entrée de CIC demicator et convolve les deux, vous devriez obtenir la réponse impulsionnelle combinée de la cascade des deux filtres ensemble.

+0

J'ai essayé zéro padding le b_lp premier mais je n'ai pas pensé à suréchantillonnage. Cela a fonctionné, merci – Irreducible

+0

Le zéro-padding et le upsampling devraient être identiques. Avez-vous utilisé la fonction de suréchantillonnage de matlab? –

+0

Oui, je suréchantillonnée la réponse impulsionnelle du filtre passe-bas avec la fonction upsample Matlab. Cela a mis les zéros entre les coefficients et le résultat était parfait. Juste ajouter zéro à la fin de la réponse impulsionnelle ne m'a pas aidé. Néanmoins, merci pour votre aide. – Irreducible