Auteur Sujet: Programme génération de filtres  (Lu 2830 fois)

LeChacal619

  • Hero Member
  • *****
  • Messages: 2024
    • E-mail
Programme génération de filtres
« le: janvier 20, 2014, 22:26:17 pm »
Bonjour à tous,

Je souhaite élaborer un programme permettant de générer des filtres FIR de façon automatisée et personnalisable.

J'utilise pour l'instant sur le projet GNU Octave la méthode suivante :

1- Génération de filtre (Passe haut, passe bas, passe bande)
2- Correction de réponse (en fonction d'une impulsion de mesure de la réponse du système, d'une réponse de bruit, du filtre de mesure, du filtre de courbe cible)

J'aimerai refaire le programme sous Qt en C++, je pense en avoir le temps à présent, mais je butte un peu sur l'interface. Pour la création du filtre, on peut en effet utiliser différentes méthodes, selon comment on pense vouloir générer le filtre. Par exemple, en ce qui me concerne personnellement, je n'utilise que des filtres FIR à phase linéaire, et j'utilise toujours la même méthode pour la correction de réponse d'une mesure, à savoir :

1- Je redimensionne la mesure, le filtre de mesure, le filtre de courbe cible, le bruit mesuré à la longueur du plus grand signal parmi les 4.
2- Je supprime la phase du bruit mesuré.
3- Je rajoute le bruit au filtre de courbe cible, pour ne pas effectuer de correction quand le niveau sonore de la mesure atteint le niveau du bruit (la dynamique de la correction générée est donc égale au rapport SNR de la mesure et est fonction de la fréquence, ce qui permet d'avoir la correction avec le rapport SNR maximum sur l'ensemble du spectre)
4- Je compense la mesure par le filtre utilisé pour la mesure en faisant la division dans le domaine fréquentiel de la mesure / filtre de mesure.
5- J'effectue la division dans le domaine fréquentiel du signal obtenu a l'étape 3 (filtre + bruit sans phase) / le signal obtenu à l'étape 4 (réponse approchée du système si on avait pas utilisé de filtre)
6- Je repère le pic du filtre de correction résultant de l'étape 5, et je tronque suivant la longueur du filtre souhaité en essayant de centrer le pic (si possible).
7- Je fenêtre le filtre tronqué obtenu après l'étape 6.
8- J'exporte le fichier en .txt et .wav

L'idée que j'ai pour avoir un programme a la fois personnalisable et pouvant faire toutes ces opérations de façon autonome serait un programme avec une liste de tache que l'on pourrait ajouter soit-même. Par exemple, une tâche pourrait être "générer un filtre", "tronquer un signal", "appliquer un fenêtrage", "ajouter une égalisation d'amplitude", "ajouter une correction de phase", "décaler temporellement le signal", "ajuster le niveau du signal", etc.

Dans chaque tâche, on aurait une fenêtre permettant de configurer les paramètres, par exemple, pour générer un filtre, on pourrait choisir s'il s'agit d'un filtre passe-haut, passe-bas, la fréquence de coupure, le type de courbe à suivre, etc. Enfin, on choisirait un nom de variable pour stocker le signal après opération. On pourrait sauvegarder une liste de tâches dans un fichier de configuration (par exemple GENERATION FILTRE METHODE TARTANPION) et le recharger pour pouvoir tester différentes méthodes de génération du filtre.

Ainsi, par exemple, pour générer un filtre passe-bande, on pourrait faire :

1- générer un filtre (réglé sur passe-haut, fc = A, ordre = B, etc.) ==> signal 1
2- générer un filtre (réglé sur passe-bas, fc = C, ordre = D, etc.) ==> signal 2
3- opération fréquentielle (signal 1 * signal 2) ==> signal 3 (on obtient alors le filtre passe bande)
4- tronquer un signal (troncage, centré sur le pic, etc. ==> signal 3) ==> signal 4
5- générer une fenêtre (gaussienne, paramètre 1.4) ==> signal 5
6- opération temporelle (signal 4 * signal 5) ==> signal 6

Ensuite on pourrait éventuellement imaginer un ou 2 boutons pour afficher des graphes d'amplitude fréquentielle, de phase, de délai de groupe, de réponse d'impulsion temporelle, et afficher une ou plusieurs réponses (le signal 1, 2, 3... pour voir les effets de chaque étape par exemple), ainsi qu'un bouton pour exporter (en .txt, .wav, etc.).

Ainsi en chargeant une configuration, on pourrait avoir un liste d'étapes préconfigurées et modifiables à souhait, avec possiblité de supprimer, ajouter, changer l'ordre de chaque tache de la liste, pour l'adapter à ses propres besoins.

Enfin, un bouton "Creer un nouveau filtre" permettrait de réinitialiser certains paramètres de la liste établie, et en fonction des taches le programme testerait chaque étape 1 par 1 et redemanderait les paramètres (avec éventuellement des valeurs par défaut si on ne veut pas les remodifier). Si les valeurs par défaut conviennent, on pourrait les laisser tel quel, sinon on pourrait les modifier. Par exemple, on pourrait conserver une FC de coupure particulière si on ne veut pas avoir à rentrer la FC a chaque test, mais demander à chaque nouvelle création de reimporter un fichier de mesure, de correction cible etc.).

Qu'en pensez-vous ? Avez-vous des suggestions ou des critiques (constructives de préférence  ;)) à faire au niveau de "l'idée" ? Les fonctionnalités que j'implémenterai dépendront de mes limites en connaissances et en temps.
« Modifié: janvier 20, 2014, 22:37:15 pm par LeChacal619 »

DanyHell

  • Jr. Member
  • **
  • Messages: 381
Re : Programme génération de filtres
« Réponse #1 le: janvier 20, 2014, 22:52:52 pm »
avec javascript et jQuery on peut faire des applis web vraiment sympas de nos jours, tout ou presque peut tourner sur le client donc l'appli répond hyyyper rapidement comparé aux anciennes technos style php ou je ne sais quoi, c'est une bonne idée !!

après, à fonctionalités équivalentes tu risques quand même de galérer plus qu'avec Qt, qui est aussi ok pour le multi-plateforme

LeChacal619

  • Hero Member
  • *****
  • Messages: 2024
    • E-mail
Re : Programme génération de filtres
« Réponse #2 le: janvier 20, 2014, 22:58:10 pm »
Oui c'est ce que je suis en train de me dire, surtout que j'ai déjà les bases pour le C++, le java j'en avais fait i'a un moment mais ca date. Et sous linux, il existe la librairie fftw que je peux facilement inclure, chose qui risque d'être plus compliqué pour une application web.

Et si je trouve pas de librairie, je me vois mal l'implémenter (ca a l'air complexe, surtout en ce qui concerne l'optimisation...). En fait, j'ai déjà oublié l'idée de l'appli web j'ai d'ailleur supprimé le post...  :d

DanyHell

  • Jr. Member
  • **
  • Messages: 381
Re : Programme génération de filtres
« Réponse #3 le: janvier 20, 2014, 23:06:12 pm »
il existe une pléthore de lib en javascript aussi, ya ce qui faut pour la fft entre autres

si tu choisis Qt+fftw tu vas devoir gérer des dépendances spécifiques par plateformes, mais tout ça est GPL

LeChacal619

  • Hero Member
  • *****
  • Messages: 2024
    • E-mail
Re : Programme génération de filtres
« Réponse #4 le: janvier 20, 2014, 23:10:05 pm »
C'est quoi le plus simple de ton point de vu ?

DanyHell

  • Jr. Member
  • **
  • Messages: 381
Re : Programme génération de filtres
« Réponse #5 le: janvier 20, 2014, 23:16:10 pm »
vu que tu dis être plus à l'aise avec c++ tu as déjà la réponse adaptée à ton cas ;-)

perso je trouve sympa l'idée de l'appli web car rien à distribuer pour toi si ce n'est un lien, et rien à installer pour l'utilisateur

après ça dépend du but recherché aussi, tu pourrais très bien rester avec octave par exemple

une question à se poser aussi c'est de comparer ton idée avec ce qui existe déjà
parfois il vaut mieux améliorer/compléter un truc bien qui existe déjà que de repartir from scratch

LeChacal619

  • Hero Member
  • *****
  • Messages: 2024
    • E-mail
Re : Re : Programme génération de filtres
« Réponse #6 le: janvier 20, 2014, 23:25:05 pm »
perso je trouve sympa l'idée de l'appli web car rien à distribuer pour toi si ce n'est un lien, et rien à installer pour l'utilisateur

Oui moi aussi ca serait le top pour le front end.

Citer
après ça dépend du but recherché aussi, tu pourrais très bien rester avec octave par exemple

J'ai réussi à obtenir quelque chose de sympa avec mon programme Octave. Le problème c'est que les gens ne seront pas tentés de l'utiliser ou l'essayer étant donné qu'il est assez chiant à utiliser et je n'ai pas pris le temps de documenter ni son fonctionnement ni l'installation ni rien. Mon script utilise des packages (signal et java), qui ne sont pas installés par défaut. Même pour installer Octave c'est pas forcément évident pour un utilisateur lambda (version Visual studio, version Cygwin, version MingGCC, j'y comprend rien xD). Et sous linux j'ai installé le package java, mais il ne fonctionne pas, il me donne la même erreur que si le package est installé. Quand j'essaie de le désinstaller, il reste dans la liste des packages installés. Quand je teste java, ca fonctionne, j'ai passé 2 heures à chercher une solution sans résultat si bien que j'ai du modifier mon programme pour utiliser des fichiers a des emplacements arbitraires et pour chaque voie j'ai du me modifier le code du programme a chaque fois.....

Etant donné que j'ai réussi à régler mon système, le but c'est donc de rendre mon programme Octave plus facile à utiliser, d'ou mon attirance pour l'appli web malgré les contraintes :/

Citer
une question à se poser aussi c'est de comparer ton idée avec ce qui existe déjà
parfois il vaut mieux améliorer/compléter un truc bien qui existe déjà que de repartir from scratch

J'ai déjà cherché des générateurs de filtres FIR, j'ai jamais rien trouvé (j'en avais trouvé un mais il est très basique, pas open source, et ne permet pas de générer des filtres pour un sampling rate > 8khz de mémoire enfin un truc inexploitable xD). Sinon je me serai pas fais chier a faire mon programme octave  ! J'ai peut être mal cherché aussi... :p Je me renseigne pour le Java EE, apparemment c'est comme le Java, le Java je connaissais un peu aussi.... Ce que je connais pas c'est le java script, et je pensais que les applis webs se faisaient en java script ou autre, mais je ne savais pas qu'on pouvait les développer en java ! Effectivement si c'est en java, il doit exister plétore de librairies pour les FFT, meme pour l'affichage les graphiques :)
« Modifié: janvier 20, 2014, 23:39:27 pm par LeChacal619 »

DanyHell

  • Jr. Member
  • **
  • Messages: 381
Re : Programme génération de filtres
« Réponse #7 le: janvier 21, 2014, 00:21:21 am »
"J'ai déjà cherché des générateurs de filtres FIR, j'ai jamais rien trouvé"
en fait, j'avais déjà fait le même constat, et j'avais trouvé ça étrange, mais c'était ya un moment déjà..
je m'étais dit qu'il y avait pt etre une bonne raison à ça.. pas trouvé laquelle.. pas cherché non plus ;-)
ça m'intéresse bcp moins aujourd'hui mais qd mm.. étrange..

"meme pour l'affichage les graphiques"
idem en javascript ya largement de quoi plotter, calculer fft, nb complexe, etc.. etc..

sinon java ça ressemble à c++ tu serais pas trop perdu, juste moins souple et bcp bcp bcp moins puissant en terme de OO

LeChacal619

  • Hero Member
  • *****
  • Messages: 2024
    • E-mail
Re : Programme génération de filtres
« Réponse #8 le: janvier 21, 2014, 12:09:39 pm »
J'ai choisi de rester sur le Qt. Voici pour l'instant l'ébauche de ce que je souhaiterai faire :



Chaque liste de tâches pourrait être sauvegardée, et rechargée ou ajouter dans un noeud de l'arbre. Par exemple, sur mon screenshot, on pourrait enregistrer une branche de l'arbre nommé "Band pass filter", constitué des 3 feuilles generate low pass filter, generate high pass filter, multiply low pass * high pass.

Ensuite on pourrait charger cette branche (si on souhaite générer un filtre band pass), ou ajouter cette branche dans une liste de taches. Je ne sais pas trop comment mettre en pratique la sauvegarde de cette arbre ou des branches, il existe peut etre des trucs déjà tout fait sinon il faudrait peut etre que je me penche sur une sauvegarde en .xml ?

petoind

  • Administrator
  • Hero Member
  • *****
  • Messages: 7574
    • Conception des enceintes acoustiques
    • E-mail
Re : Programme génération de filtres
« Réponse #9 le: janvier 21, 2014, 17:36:35 pm »
Bonjour

La question est aussi de savoir ce dont les utilisateurs ont besoin sur leur PC pour faire tourner le programme.
Si j'ai fait tout les outils de calculs en PHP, c'est justement parce qu'il n'y a rien à installer sur le PC client, et donc que cela tourne quelque soit la plateforme, Windows, Mac ou Linux.
Je ne connais pas trop la puissance du serveur utilisé pour les calculs, mais il traite ses 1000 demandes jours sans broncher.
Un informaticien ne l'aurai sans doute pas fait comme cela, mais ça marche.
Si vous avez besoin d'un petit espace pour le PHP, nous en parlerons en privé.

Cordialement, Dominique

LeChacal619

  • Hero Member
  • *****
  • Messages: 2024
    • E-mail
Re : Re : Programme génération de filtres
« Réponse #10 le: janvier 21, 2014, 17:49:57 pm »
Si vous avez besoin d'un petit espace pour le PHP, nous en parlerons en privé.

Bonjour Dominique merci pour la proposition j'avais pensé vous demander de l'aide à un moment (notamment pour savoir quel type de langage vous utilisez pour vos pages de calculs intéractives). Mais après réflexion j'ai choisi néanmoins de rester sur un programme autonome en langage C++ via les outils Qt.

Le programme sera plus agréable à utiliser je pense et je ferai en sorte qu'il soit compatible Linux et Windows au minimum. Il devrait être autonome autrement dit il suffira de le décompresser dans un dossier et le lancer : pas d'installation à effectuer (en tout cas pour windows, pour linux je sais pas), ni quoi que ce soit à configurer.

DanyHell

  • Jr. Member
  • **
  • Messages: 381
Re : Programme génération de filtres
« Réponse #11 le: janvier 21, 2014, 18:04:20 pm »
"La question est aussi de savoir ce dont les utilisateurs ont besoin sur leur PC pour faire tourner le programme"
c'est exactement ce dont nous avons déjà discuté et un choix a été fait ensuite

"Si j'ai fait tout les outils de calculs en PHP, c'est justement parce qu'il n'y a rien à installer sur le PC client"
la lourdeur de la solution php est qu'il faut repasser par le serveur et recharger la page au moindre changement de paramètre de calcul
ça devient très vite pénible à utiliser comparé à javascript qui présente aussi l'avantage de n'avoir rien à installer sur le client

"Je ne connais pas trop la puissance du serveur utilisé pour les calculs, mais il traite ses 1000 demandes jours sans broncher"
pour les calculs effectués sur votre site, aucun problème, n'importe quel bouzin peut en faire 1000 à la minute au bas mot
avec une solution de type javascript le problème ne se pose même pas, le calcul est fait sur 1000 machines..

petoind

  • Administrator
  • Hero Member
  • *****
  • Messages: 7574
    • Conception des enceintes acoustiques
    • E-mail
Re : Programme génération de filtres
« Réponse #12 le: janvier 21, 2014, 18:45:47 pm »
Ce n'est pas demain que je referai mes programmes en Java !!!
Il y a tout de même des lenteurs en PHP, pour le calcul des images par exemple dans : http://petoindominique.fr/php/evolfiltre.php avec les simulations JMLC.

C'est peut être sur des choses ciblées comme les images que je ferai quelque chose.

DanyHell

  • Jr. Member
  • **
  • Messages: 381
Re : Programme génération de filtres
« Réponse #13 le: janvier 21, 2014, 19:09:18 pm »
"Ce n'est pas demain que je referai mes programmes en Java !!!"
je ne parlais pas de java mais de javascript (rien à voir), par contre je ne vous dis pas de tout refaire, évidemment ;-)

"Il y a tout de même des lenteurs en PHP, pour le calcul des images"
peut être parce que vous recalculez systématiquement l'image entière ?
essayez de ne calculer que la partie de l'image qui change (les courbes) ça améliorera certainement la performance
« Modifié: janvier 21, 2014, 19:13:00 pm par DanyHell »

petoind

  • Administrator
  • Hero Member
  • *****
  • Messages: 7574
    • Conception des enceintes acoustiques
    • E-mail
Re : Programme génération de filtres
« Réponse #14 le: janvier 21, 2014, 21:00:13 pm »
J'ai un programme de calcul des images, je ne spécifie que les paramètres d'entrée, l'adresse de l'image, et je la récupère dans une page en PHP.
Je n'ai pas essayé de ne rajouter que la courbe dans une image pré existante.
Avantage : Lorsque je faits une mise à jour, toutes mes images calculées sont à jour...