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');