Question

Les logiciels d'édition et de traitement graphiques et audio contiennent souvent des fonctions appelées « Filtre passe-haut » et « Filtre passe-bas ».À quoi servent-ils exactement et quels sont les algorithmes pour les mettre en œuvre ?

Était-ce utile?

La solution

Wikipédia:

Ces termes « haut », « bas » et « bande » font référence à fréquences.En passe-haut, vous essayez de supprimer les basses fréquences.En passe-bas, vous essayez de supprimer le haut.En passe-bande, vous autorisez uniquement le maintien d’une plage de fréquences continue.

Le choix de la fréquence de coupure dépend de votre application.Le codage de ces filtres peut être effectué soit en simulant des circuits RC, soit en jouant avec les transformées de Fourier de vos données temporelles.Consultez les articles Wikipédia pour des exemples de code.

Autres conseils

Voici comment implémenter un filtre passe-bas utilisant la convolution :

double[] signal = (some 1d signal);
double[] filter = [0.25 0.25 0.25 0.25]; // box-car filter
double[] result = new double[signal.Length + filter.Length + 1];

// Set result to zero:
for (int i=0; i < result.Length; i++) result[i] = 0;

// Do convolution:
for (int i=0; i < signal.Length; i++) 
  for (int j=0; j < filter.Length; j++)
    result[i+j] = result[i+j] + signal[i] * filter[j];

Notez que l'exemple est extrêmement simplifié.Il ne vérifie pas la portée et ne gère pas correctement les bords.Le filtre utilisé (box-car) est un filtre passe-bas particulièrement mauvais, car il provoquera beaucoup d'artefacts (sonnerie).Renseignez-vous sur la conception des filtres.

Vous pouvez également implémenter les filtres dans le domaine fréquentiel.Voici comment implémenter un filtre passe-haut à l'aide de FFT :

double[] signal = (some 1d signal);
// Do FFT:
double[] real;
double[] imag;
[real, imag] = fft(signal)

// Set the first quarter of the real part to zero to attenuate the low frequencies
for (int i=0; i < real.Length / 4; i++) 
  real[i] = 0;

// Do inverse FFT:
double[] highfrequencysignal = inversefft(real, imag);

Encore une fois, c'est simplifié, mais vous voyez l'idée.Le code n'a pas l'air aussi compliqué que les mathématiques.

Ce sont généralement des circuits électriques qui ont tendance à transmettre des parties de signaux analogiques.Le passe-haut a tendance à transmettre davantage de parties à haute fréquence et le passe-bas a tendance à transmettre davantage de parties à basse fréquence.

Ils peuvent être simulés par logiciel.Une moyenne mobile peut agir comme un filtre passe-bas par exemple et la différence entre une moyenne mobile et son entrée peut fonctionner comme un filtre passe-haut.

Passe-haut filtre permet haut-fréquence (informations détaillées/locales) passer.
Passe-bas filtre permet faible-fréquence (informations grossières/rugueuses/globales) passer.

Le filtrage décrit l'acte de traiter les données de manière à appliquer différents niveaux d'atténuation à différentes fréquences au sein des données.

Un filtre passe-haut appliquera une atténuation minimale (c.-à-d.laisser les niveaux inchangés) pour les hautes fréquences, mais applique une atténuation maximale aux basses fréquences.

Un filtre passe-bas est l'inverse : il n'appliquera aucune atténuation aux basses fréquences mais appliquera une atténuation aux hautes fréquences.

Il existe un certain nombre d'algorithmes de filtrage différents qui sont utilisés.Les deux plus simples sont probablement le filtre Finite Impulse Response (alias.filtre FIR) et le filtre Infinite Impulse Response (alias.filtre RII).

Le filtre FIR fonctionne en conservant une série d'échantillons et en multipliant chacun de ces échantillons par un coefficient fixe (basé sur la position dans la série).Les résultats de chacune de ces multiplications sont accumulés et constituent le résultat pour cet échantillon.C'est ce qu'on appelle une multiplication-accumulation - et dans le matériel DSP dédié, il existe une instruction MAC spécifique pour faire exactement cela.

Lorsque l'échantillon suivant est prélevé, il est ajouté au début de la série, l'échantillon le plus ancien de la série est supprimé et le processus est répété.

Le comportement du filtre est fixé par la sélection des coefficients du filtre.

L’un des filtres les plus simples souvent fournis par les logiciels de traitement d’images est le filtre de moyenne.Ceci peut être implémenté par un filtre FIR en définissant tous les coefficients du filtre sur la même valeur.

Voici un exemple très simple de filtre passe-bas en C++ qui traite le signal un échantillon à la fois :

float lopass(float input, float cutoff) {
 lo_pass_output= outputs[0]+ (cutoff*(input-outputs[0])); 
outputs[0]= lo_pass_output;
return(lo_pass_output);
}

Voici à peu près la même chose, sauf que c'est passe-haut :

float hipass(float input, float cutoff) {
 hi_pass_output=input-(outputs[0] + cutoff*(input-outputs[0]));
 outputs[0]=hi_pass_output;
 return(hi_pass_output);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top