Question:
Comment puis-je entendre à quoi ressemble une fonction mathématique?
Matt D
2016-03-31 06:02:23 UTC
view on stackexchange narkive permalink

Je travaille actuellement sur des devoirs d'équations différentielles, et je viens de trouver une solution à un problème qui a la forme:

enter image description here

J'ai tracé la fonction avec mon ordinateur et il a une forme d'onde intéressante que je veux entendre. Est-ce que je peux faire cela?

La [fréquence est trop basse pour entendre] (https://www.wolframalpha.com/input/?i=play+ (16% 2F15) cos (0.5t) - (1% 2F15) cos (2t)).
Vous pouvez essayer de doubler la fréquence une ou deux ou trois fois, puis en faire une analyse de Fourier pour obtenir ses spectres, puis la recréer avec un synthé additif. J'ai l'impression que quelque part là-bas, il doit y avoir un synthé qui acceptera une équation pour une forme d'onde, mais je ne sais pas avec certitude. Je me demande si vous obtiendrez une bonne réponse lors de l'échange de pile de recommandations logicielles.
Vous n'avez pas besoin de faire une analyse de Fourier - c'est une combinaison linéaire de cosinus. Les coefficients de Fourier sont «16/15» et «-1 / 15», juste là dans l'équation, et tous les autres coefficients sont nuls. Vous pouvez le recréer dans n'importe quel synthé addatif, par exemple ZynAddSubFX, ou opérateur dans Ableton. Il sonnera comme une onde sinusoïdale avec une harmonique douce de seconde octave.
Vous pouvez transmettre ** n'importe quel ** vecteur de valeurs à divers outils de type DAC qui convertiront les données en sortie audio. Les gens l'ont fait avec les chiffres de pi, entre autres choses farfelues.
Merci @naught101 pour votre excellente perspicacité! Auriez-vous l'amabilité de nous expliquer comment vous savez que l'harmonique de la 2e octave est plus douce? Est-ce le terme -1/15? ou cela a-t-il à voir avec le .5t et le 2t
@sova: Oui, les nombres en dehors des «cos» sont essentiellement des facteurs d'échelle. Le nombre entre parenthèses définit la fréquence. Essayez de mettre `* cos (b * x)` (remplacez `a` et` b` par des nombres réels) dans https://www.desmos.com/calculator, et dérangez-vous avec les valeurs de a et b. Vous comprendrez rapidement comment ces deux coefficients affectent le tracé. Ensuite, essayez quelque chose comme `cos (x) + cos (2 * x)` pour voir comment l'addition fonctionne.
Cinq réponses:
topo Reinstate Monica
2016-03-31 12:50:58 UTC
view on stackexchange narkive permalink

Comme le dit naught101, votre cas particulier ici est une onde sinusoïdale avec une troisième harmonique silencieuse. Pour entendre à quoi cela ressemble à une fréquence audible, accédez à http://meettechniek.info/additional/additive-synthesis.html dans un navigateur prenant en charge l'API Web Audio (comme Firefox ou Chrome) , activez l'audio et réglez-le comme ceci:

enter image description here

H1 représente votre (16/15) cos ( ½ t) , bien que la fréquence par défaut de ce synthétiseur en ligne soit 440, nous l'avons effectivement mise à l'échelle en cos (440 × 2π × t), et (16/15) vient d'être normalisée à «1.000» . H3 représente le bit - (1/15) cos (2t) , à nouveau mis à l'échelle en fréquence - idéalement, le volume serait de 0,0625, soit 1/16 du volume du fondamental (H1), mais 0,065 est assez proche.

Vous ne trouverez peut-être pas que cela semble intéressant après tout! En fait, toutes les formes d'onde strictement périodiques sans variation ont tendance à sembler assez ennuyeuses (du moins pour moi) - elles seront toutes simplement un bourdonnement ou un bourdonnement statique. C'est généralement la variation de la forme de la forme d'onde dans le temps qui la rend intéressante.

En raison de la nature de cette équation particulière, il est facile de reproduire sa sortie dans un synthétiseur additif. Dans le cas plus général, une façon d'entendre une équation consiste à échantillonner sa sortie - générer le 'y' pour certaines valeurs de 't' (à une certaine fréquence d'échantillonnage telle que 44,1 kHz, ce qui générer 44100 échantillons par seconde) - et lire la liste des valeurs y sous forme de données audio numériques PCM.

À titre d'exemple, un éditeur audio que j'utilise pour faire cela est le (assez ancien) Adobe Audition 1.5, qui peut charger dans un fichier texte, interpréter chaque ligne comme une valeur d'échantillon et lire la forme d'onde résultante comme un WAV ou tout autre fichier audio. Pour ce faire, il souhaite que les valeurs y soient mises à l'échelle pour tenir dans la plage de données 8 bits ou 16 bits (par exemple entre -32 768 et 32 ​​767 pour 16 bits) et arrondies à l'entier le plus proche, de sorte que le fichier texte ressemble à (par exemple)

  391745875387464530241911791-632-1901
-2554-2124-1234  

Vous pouvez demander sur https://softwarerecs.stackexchange.com/ s'il existe un éditeur audio plus récent / gratuit qui peut importer des exemples de données textuelles comme celui-ci.

Si vous pouvez faire du codage, il devrait être assez facile de trouver une bibliothèque capable d'écrire des fichiers audio (par exemple, le langage Python a le module 'wave') une fois vous avez généré une liste d'exemples de valeurs, vous pouvez donc facilement écrire un fichier audio dans un format commun à partir de votre programme.

Ce type d'échantillonnage est susceptible d'être ce que l'excellente suggestion wolframalpha de Dom fera en interne, même si je ne pouvais pas le faire fonctionner dans mon navigateur! Pour obtenir votre équation dans la plage audible, vous pouvez la mettre à l'échelle - par ex. en utilisant (16/15) cos (250 * 2π * t) - (1/15) cos (1000 × 2π × t) vous donnera une onde avec une fréquence fondamentale de 250 Hz (en supposant que t est en secondes). Une chose à surveiller lors de l'échantillonnage est le aliasing - pour éviter cela, vous devez échantillonner à une fréquence d'au moins le double de la valeur de toute composante de fréquence de la forme d'onde générée par la fonction.

leftaroundabout
2016-03-31 23:47:44 UTC
view on stackexchange narkive permalink

Vous n'avez besoin d'aucun logiciel audio spécifique pour générer des formes d'onde audibles. Voici un programme C simple qui générera les données requises sur la sortie standard:

  #include <stdint.h> # include <stdio.h> # include <math.h>double y (double t) cos (t / 2) - cos (t * 2)) / 15;} double pas = 440 * 2 * 3,14159; // donc la hauteur de base sera un standard A noteint main () {int16_t v; char * p = (char *) (&v); // "buffer" pour la sortie standard double t = 0; tandis que (t + = 1. / 44100) {v = (int16_t) (y (t * pitch) * (2<<12)); putchar (p [0]); putchar (p [1]); // avertissement: ce n'est PAS une bonne programmation putchar (p [0]); putchar (p [1]); // style, juste un hack rapide pour sortir les données} return 0;}  

Enregistrer un signal.c , et exécuter

  gcc signal.c -lm && ./a.out | aplay -f cd  

Cela devrait fonctionner dès la sortie de la boîte, dans une installation Linux normale (par exemple Ubuntu).

peut-être `double pas = 440; double angularVelocity = pas * 2 * 3.14159`?
Eh bien oui ... mais les unités de physique sont un peu foirées de toute façon ici; cela n'a pas vraiment de sens de considérer cos (2 ⋅ _t_) si _t_ est un temps.
`Vous n'avez besoin d'aucun logiciel audio spécifique`, lorsque vous écrivez votre propre logiciel ...
José David
2016-04-08 15:02:53 UTC
view on stackexchange narkive permalink

La question suppose que la forme d'onde en jeu est directement audible par l'homme. Si tel était le cas, une approche alternative à la programmation consisterait à utiliser un synthétiseur additif pour synthétiser la forme d'onde. Pour ceux qui sont dans le domaine de la MAO / DAW, il existe un certain nombre de synthétiseurs VST gratuits qui effectuent une synthèse additive, et je me souviens d'au moins un (devrait le chercher dans mes archives de sauvegarde) qui génère directement une forme d'onde à partir d'une fonction mathématique expression.

Cependant, la fonction présentée n'est PAS compréhensible par l'homme. C'est une combinaison de 2 ondes sinusoïdales de fréquence:

  • f1 = 0,5 / (2 * Pi) = ~ 0,32 Hz
  • f2 = 2 / (2 * Pi) = ~ 3,14 Hz

L'audition humaine commence à environ 20 Hz, donc la fonction présentée n'est pas directement audible. Afin d'avoir un rendu sonore de la fonction, nous devrons appliquer une sorte de processus de "sonification", c'est-à-dire appliquer une sorte de transformation à la fonction qui la place dans la gamme de l'audio audible humain. Dans ce cas, une simple multiplication de fréquence, disons par un 100, ferait l'affaire et permettrait l'application des méthodes indiquées dans les réponses précédentes. Mais il existe de nombreuses techniques très diverses et intéressantes qui peuvent être utilisées pour «sonifier» tout ensemble de données d'échantillons.

Une mine d'informations peut être trouvée en recherchant "sonification", mais pour ceux qui sont intéressés et qui n'ont pas encore de point de départ, je suggère d'essayer l'environnement gratuit en ligne Earsketch de Université Georgia Tech. C'est un environnement de programmation musicale interactif complet basé sur la syntaxe Python, donc si vous êtes déjà familier avec Python, cela aide beaucoup, mais Python est de toute façon un langage facile à apprendre. Il est totalement en ligne, vous n'avez pas besoin d'installer de logiciel.

Un chapitre spécifique du didacticiel en ligne Earsketch traite de la sonification.

Voici un projet d'exemple Earsketch partagé par sonification de données (dans ce cas, des données météorologiques). Il est assez simple de remplacer vos propres données.

Le PO n'incluait aucune unité physique. Cela pourrait aussi bien être _f₁_ = (0,5 min⁻¹) / 2π ≈ 0,0013 Hz, ce qui est encore plus dans le subsonique. Ou, plus raisonnablement, cela pourrait être compris comme se référant à une échelle de temps arbitraire, c'est-à-dire que la fréquence de base est ad libitum.
thrig
2016-03-31 19:29:57 UTC
view on stackexchange narkive permalink

Les équations peuvent être introduites par ex. SuperCollider. Une autre option consiste à "clôturer" l'équation et à convertir la valeur de l'équation à ces points en une hauteur (et peut-être aussi une durée, peut-être basée sur la pente à ce point, ou autre), bien que cela nécessitera un certain temps. pour mettre à l'échelle de manière appropriée les bornes (quelles sont les valeurs x) et la sortie (valeurs y) pour qu'elles s'intègrent dans un ambitus approprié:

 % perl -e 'for $ x (0..10) { printf "% d \ n", 60 + 10 * (16/15 * cos (.5 * $ x) - 1/15 * cos (2 *% x))} '7068656054504849525762% perl -e' pour $ x ( 0..100) {printf "% d \ n", 60 + 10 * (16/15 * cos (.5 * $ x) - 1/15 * cos (2 *% x))} '| atonal-util pitch2ly --mode = absolu | ly-fu --instrument = orchestral \ harp --open --absolute -  

enter image description here

Illia Koshovyi
2020-04-09 05:20:11 UTC
view on stackexchange narkive permalink

Pour cela, il nous a fallu 4 ans, nous l'avons fait. nous créons un échantillon avec 440 frq.
f (x) = 16/15 cos (1 / 2x) - 1/15 cos (2x) Profitez de l'écoute https://drive.google.com/file/d / 1BPtJyHHpR3jCnHHlDAtylO6IpPDHsPb7 / view? Usp = partage enter image description here



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Continuer la lecture sur narkive:
Loading...