Premièrement, je suis nouveau dans le DSP et je n'ai pas vraiment d'éducation, mais je développe un programme de visualisation audio et je représente un réseau FFT sous forme de barres verticales comme dans une visualisation de spectre de fréquence typique.
Le problème que j'avais était que les valeurs du signal audio changeaient trop rapidement pour produire une sortie visuelle agréable si je mappais directement les valeurs FFT:
J'applique donc une fonction simple aux valeurs afin de "lisser" le résultat:
// pseudo-code
delta = fftValue - smoothedFftValue;
smoothedFftValue += delta * 0.2;
// 0.2 is arbitrary - the lower the number, the more "smoothing"
En d'autres termes, je prends la valeur actuelle et la compare à la dernière, puis j'ajoute une fraction de ce delta à la dernière valeur. Le résultat ressemble à ceci:
Ma question est donc:
Est-ce un modèle ou une fonction bien établi pour lequel un terme existe déjà? Est-ce le cas, quel est le terme? J'utilise le "lissage" ci-dessus mais je suis conscient que cela signifie quelque chose de très spécifique dans DSP et peut ne pas être correct. En dehors de cela, cela semblait peut-être lié à une enveloppe de volume, mais pas tout à fait la même chose.
Existe-t-il de meilleures approches ou une étude plus approfondie des solutions à ce problème que je devrais examiner?
Merci pour votre temps et excuses si c'est une question stupide (en lisant d'autres discussions ici, je suis conscient que mes connaissances sont bien inférieures à la moyenne, il semble).
la source
Réponses:
Ce que vous avez mis en œuvre est un filtre passe-bas unipolaire, parfois appelé intégrateur qui fuit . Votre signal a l'équation de différence:
où est l'entrée (la valeur de bin non lissée) et est la valeur de bin lissée. Il s'agit d'une manière courante de mettre en œuvre un filtre passe-bas simple et de faible complexité. J'ai écrit à leur sujet plusieurs fois auparavant dans les réponses précédentes; voir [1] [2] [3] .y [ n ]x [ n ] y[ n ]
la source
Attention: incluez un peu d'histoire, de vieux papiers (je les aime) et des cartes perforées!
La première version ci-dessus est moins naturelle, mais elle évite une multiplication et est en quelque sorte plus efficace. Les deux formules produisent un filtre de réponse impulsionnelle linéaire , causale et infinie . L'histoire remonte à et à travers Poisson, Kolmogorov-Zurbenko Adaptive Filters , Brown (Statistical Forecasting for Inventory Control. McGraw-Hill, 1959), Holt (1957) et Winters (1960). Il est implémenté comme un schéma de filtrage récursif connu sous différents noms dans la littérature:
L'exponentielle dans le nom est liée à la réponse impulsionnelle avec la progression géométrique, qui échantillonne une décroissance exponentielle: .h[n]=(1−a)u[n]an
Pour une note historique, Robert G. Brown et Arthur D. Little ont utilisé cette méthode en 1956 dans le lissage exponentiel pour prédire la demande , apparemment pour l'industrie du tabac. Un peu plus d' histoire et d' explications se trouvent dans la prévision Holt-Winters pour les nuls (ou développeurs) - Partie I . Peter Zehna propose une revue critique dans Some remarques sur le lissage exponentiel , 1966. Un chapitre de R. Brown dans Encyclopedia of Operations Research and Management Science (Google books) remonte à 1944, les pages lisibles sont reproduites ici:
De nombreuses méthodes étendent ce lissage, qui manque de validité lorsque les données ont une tendance ou une saisonnalité. Certains d'entre eux sont connus sous le nom de lissage exponentiel double ou triple et de filtres Holt-Winters .
Vous pouvez également vérifier: Comment fonctionne ce «filtre simple»?
la source
L'approche normale pour les audiomètres est un "détecteur de crête avec perte".
Cela réagit immédiatement à tout nouveau ou pic ou transitoire dans le signal, mais il persiste pendant un certain temps afin de créer une image beaucoup moins agitée. La décroissance doit être une constante entre 0 et 1. Elle contrôle la vitesse à laquelle les barres se font, 0 étant instantané et 1 jamais.
la source
new_value
s'il est supérieur àcurrent_value * decay
Dans les cercles des entrepreneurs du DoD américain, ce filtre particulier est souvent appelé «filtre alpha», car il peut être caractérisé avec un paramètre qui est traditionnellement appelé «alpha».
Il est directement analogue à un filtre passe-bas RC analogique simpe.
Ils sont extrêmement simples, ont de sérieuses limites, mais ils ont l'avantage indéniable sur des filtres plus complexes (et compliqués!) Que, si vous vous éloignez de leurs zones problématiques, ils font le travail.
la source
Comme mentionné dans d'autres réponses, il s'agit d'un filtre récursif unipolaire, un type de filtre à réponse impulsionnelle infinie (IIR).
Le guide du scientifique et de l'ingénieur sur le traitement numérique du signal de Steven W. Smith est une excellente ressource pour obtenir des informations sur cette fonctionnalité et d'autres fonctionnalités DSP :
la source