2010-11-01 9 views
1

Quelqu'un peut-il m'aider à comprendre où je vais mal ci-dessous? J'utilise mfilt.firinterp pour interpoler une onde sinusoïdale d'un facteur 4 en utilisant un filtre ayant une valeur de coupure de 0,7 * (fs/2). L'onde sinusoïdale a une fréquence de 0.1Hz, et j'échantillonne à 10Hz. Le filtre passe-bas utilisé pour l'interpolation a donc une fréquence de coupure de 3.5Hz, et devrait facilement passer ce signal. Je dois faire quelque chose de fondamentalement faux.aider à l'aide de l'interpolation Matlab FIR (2 lignes de code)

Si je mets la coupure à 0,25 * fs/2, tout semble bien. Mais est-ce que cela signifie que les signaux ayant un contenu en fréquence légèrement supérieur à 0,25 * fs/2 (comme 0,4 * fs/2), ne peuvent pas être interprétés linéairement (ou, comment l'accomplir?).

Attendez une minute, je confonds les anciens et les nouveaux fs fs? Si fs = fs_new = 40Hz, alors je peux comprendre ce qui se passe. Si je règle la coupure à 0.25 * fs_new/2 où fs_new = 40Hz, alors il est logique que ce soit la fréquence de coupure supérieure de 10 Hz (la fréquence d'échantillonnage originale). Donc, Wn dans fircls1 (95, Wn, 0,01, 0,0001) doit être < = 0,25. Est-ce que ça sonne bien?

Merci d'avance pour vos commentaires.

% create input 
told = (0:1:299)/10;    % time index for plotting xold 
tnew = (0:1:1199)/40;   % time index for plotting xnew 
xold = sin(2*pi*0.1*told + 1); % fc=0.1Hz (Pc=10 sec); samplerate = fs = 10Hz 

% create filter 
num = fircls1(95, 0.7, 0.01, 0.0001); % set filter cutoff to 0.7*(fs/2)=3.5Hz 
Hm = mfilt.firinterp(4,num); 

% apply filter 
xnew = 4*filter(Hm, xold); 

% plot results 
plot(told, xold, 'bo', tnew, xnew, 'r+'); 
title('Input (blue) and filtered input (red) versus time index'); 

Répondre

2

J'ai compris mon incompréhension ... C'était ma confusion sur le paramètre Wn en utilisant fircls1 (n, Wn, ripple_passband, ripple_stopband). En utilisant cette fonction en conjonction avec la fonction mfilt.firinterp de Matlab (l, num), le Wn doit être considéré comme la fréquence de coupure normalisée à la NOUVELLE fréquence d'échantillonnage (et non la fréquence d'échantillonnage OLD, donc ma confusion). Ainsi, lors de l'interpolation de quatre (c'est-à-dire l = 4) en utilisant mfilt.firinterp, Wn doit être de 0,25 ou moins pour éviter le crénelage (si Wn> 0,25, les images se chevauchent).

Dans l'exemple ci-dessus, j'essayais d'utiliser Wn = 0,7, mais en réalité, ce que j'aurais vraiment dû utiliser était Wn = 0,7 * 0,25, ce qui est < 0,25.

0

Question intéressante (upvoted et Favourited) mais je suis incapable d'aider comme je n'ai pas accès à la boîte à outils de conception de filtre. Vous pouvez avoir plus de chance coller cette question ici:

http://www.mathworks.com/matlabcentral/newsreader/

Désolé et bonne chance!

Questions connexes