Créer un filtre passe-bas par Octave

Bien que j'avais un exemple de filtre passe-bas codé dans Octave et je suis sûr que cela fonctionne, je ne peux pas comprendre. Comment dose ce travail? et Comment puis-je connaître la fréquence de coupure de ce filtre?

L'original_data est une colonne de données sur la qualité de l'eau obtenue avec 1Hz.

l = rows(original_data);
a = fft(original_data);
for i = (1:l);
 if i >9
  a(i) = 0;
 endif
endfor
b = fft(original_data);
for i = (1:l)
 if i > 1
  b(i) = 0;
 endif
endfor
c = real(ifft(a));
c(1);
d = real(ifft(a))*2-c(1);

Si vous avez une idée, aidez-moi s'il vous plaît.

0
ajouté édité
Vues: 1
C'est un très mauvais moyen de faire du filtrage - c'est un mur de briques dans le domaine fréquentiel, ce qui signifie qu'il y aura des artefacts de sonnerie sévères dans le domaine temporel. Utilisez une fonction de fenêtre dans le domaine fréquentiel pour éviter cela.
ajouté l'auteur Paul R, source
La fréquence de coupure dépend de la taille du fft, qui semble être l , donc ce serait approx Fs * 10/l , et vous dites que Fs = 1 Hz , ce qui équivaudrait à environ 10/l Hz.
ajouté l'auteur Paul R, source
Merci, Paul. Savez-vous comment connaître la fréquence de coupure de ce filtre?
ajouté l'auteur user3021107, source

2 Réponses

Je suis d'accord avec le commentaire, il y a plein de fonctions pour vous permettre de concevoir correctement un filtre passe-bas (voir http://octave.sourceforge.net/signal/overview.html , en particulier les sections de conception de filtre IIR et FIR). Une fois que vous avez conçu votre filtre, vous pouvez l'appliquer en utilisant la fonction filter ou filtfilt .

À titre d'exemple, un moyen simple d'y parvenir serait:

[b,a] = butter(n, Wc) % low pass Butterworth filter with cutoff pi*Wc radians - choose the order of the filter n and cut-off frequency Wc to suit
filtered_data = filter(b,a,original_data);
2
ajouté

Tout d'abord, il est important de savoir que cela fonctionne dans le domaine des fréquences n'est pas la meilleure façon de filtrer un signal, les méthodes de domaine temporel peuvent bien fonctionner!

Voulez-vous connaître la fréquence de coupure? Vous devez connaître le taux d'échantillonnage et la longueur de votre FFT pour calculer la fréquence du bac correspondant de votre FFT.

taux d'échantillonnage = FS, d'abord avez-vous besoin de calculer le Nyquist.

Nyquist = FS/2;

Trouvez maintenant la résolution de fréquence, dans ce cas votre taille fft est la même que celle de votre original_data.

Resolution=Nyquist/(length(original_data)/2);

OK presque, vous placez la valeur 0 dans les huit (8) premiers bins de votre FFT, alors maintenant vous devez trouver la fréquence de la corbeille correspondante!

round(1 * Resolution)
round(2 * Resolution)
round(3 * Resolution)
.
.
round(8 * Resolution)

Les résultats sont la fréquence de coupure, cela signifie que vous allez couper les fréquences entre le premier et le huitième bin

0
ajouté