Wednesday, January 25, 2017

Mouvement Moyenne Bruit Blanc

Génération DSP de bruit rose (1f) Regard sur la façon de générer du bruit rose par deux méthodes: 1 - Un filtre rose pour le bruit blanc. 2 - L'algorithme de Voss-McCartney consistant à ajouter de multiples sources de bruit blanc aux octaves inférieures et inférieures. (2006-03-27 Voir aussi Larry Trammells Algorithme stochastique de Voss-McCartney.) Mots-clés: Bruit rose, 1f bruit, 1fnoise, bruit de scintillement, génération de nombres aléatoires, DSP. 1999 18 octobre Mises à jour mineures: 2003 10 juillet: opcode rose en Csound. 2005 19 septembre: nouvelle page sur les générateurs pseudo-aléatoires Park-Miller-Carta ..rand31 2006 27 mars: Lien vers Larry Trammells (RidgeRats) Algorithme stochastique de Voss-McCartney. 2007 22 janvier: Mise à jour du lien vers le matériel Larrys. 2010 12 mars: Ajout d'un lien vers dsprelated. 2011 20 mars: Lien ajouté au document de Henning Thielemanns Robin Whittle rwfirstpr. au La plupart de ce matériel est écrit par d'autres personnes, particulièrement Allan Herriman, James McCartney, Phil Burk et Paul Kellet tous de la liste de diffusion music-dsp. Les adresses e-mail ici ont xxxx. Ajoutés pour confondre les robots SPAM. Bien que la plupart ou la totalité des travaux présentés ici aient été placés dans le domaine public par ses créateurs, veuillez ne pas refléter cette page ou des parties de celle-ci n'importe où sans demander ma permission. Le danger est que plusieurs copies périmées ou incomplètes soient dispersées sur le Web. Retour au répertoire DSP Retour au site principal de First Principles, y compris matériel sur Csound. Bonne nouvelle pour Csounders Standard Csound (après la version 4.07) a un opcode rosâtre qui génère du bruit rose ou filtre le bruit blanc externe pour le rendre rose. Cela a été écrit par Phil Burk et John Ffitch, et est documenté ici: Cela a été ajouté en mai 2000, mais je ne l'ai réalisé qu'en 2003 Juillet 10. Plus d'informations sur la langue Csound synthensis est à csounds. Gtgtgt Introduction gtgtgt Les nombres pseudo aléatoires et le bruit blanc gtgtgt Les caractéristiques du bruit rose gtgtgt Les utilisations du bruit rose gtgtgt Filtrage du bruit blanc pour le rendre rose gtgtgt L'algorithme de Voss gtgtgt L'algorithme de Voss-McCartney gtgtgt Allan Herrimans analyse et traité illustré du Voss - Algorithme de McCartney gtgtgt Réduction de l'ondulation dans les algorithmes réponse en fréquence gtgtgt Références et liens gtgtgt Quelle est la suite gtgtgt Historique des mises à jour Un graphique de Allan Herrimans illustre un traité sur la somme des sources de bruit: allan-2spectrum2.html. Introduction Un flux de nombres aléatoires constitue un bruit blanc s'il est écouté comme un signal audio. Le blanc se réfère à la distribution uniforme des longueurs d'onde en lumière blanche, avec une signification particulière dans le sens audio ou DSP: que la puissance du bruit est répartie uniformément sur toutes les fréquences, entre 0 et une fréquence maximale qui est typiquement la moitié de la fréquence d'échantillonnage . Par exemple, le bruit blanc à une fréquence d'échantillonnage de 44,100 Hz aura autant de puissance entre 100 et 600 Hz et entre 20 000 et 20 500 Hz. À nos oreilles, ceci semble très lumineux et dur. Un traité de 1996 de Joseph S. Wisniewski sur les Couleurs du bruit, incluant le blanc, le rose, l'orange, le vert. Est à: msaxoncolors. htm. (Dans ce même site, Martin Saxons décrit les différents schémas de pondération pour mesurer le bruit: msaxonnoise. htm.) Dans le monde naturel, il existe de nombreux processus physiques qui produisent du bruit avec ce qu'on appelle une distribution rose de puissance. Le bruit rose a une distribution uniforme de puissance si la fréquence est cartographiée dans une échelle logarithmique. Un exemple simple serait qu'il y a autant de puissance de bruit dans l'octave de 200 à 400 Hz qu'il y a dans l'octave de 2000 à 4000 Hz. Par conséquent, il semble, nos oreilles nous disent que c'est un bruit naturel même. Génétique statistique Le professeur Wentian Li conserve une formidable bibliographie sur 1f noise à l'adresse suivante: linkage. rockefeller. eduwli1fnoise Cependant, avant de créer cette page, il ne mentionnait rien à faire avec la génération de bruit avec les techniques de traitement du signal numérique. Le but de cette page est de recueillir des informations sur la génération de bruit et surtout de bruit rose numériquement. Mon principal usage pour DSP bruit rose est dans la synthèse de musique de logiciels, à la fois comme un signal audio et comme un signal de contrôle, qui pourrait avoir des fréquences aussi faibles que 0,001 Hz. Espérons que ce matériel sera de valeur pour d'autres domaines aussi. En 1999, lorsque j'ai écrit la plupart de cette page, j'ai utilisé un Park Miller PRNG, en tant que J'ai écrit à: .... csound. Celui que j'ai utilisé était un générateur congruentiel linéaire de Park-Miller de 31 bits par Ray Gardner: c. snippets. orgsniplister. phpfnamergrand. c. 2005 Mise à jour du 19 septembre: Voir ma nouvelle page sur les générateurs de nombres pseudo-aléatoires de Park-Miller-Carta ..rand31 Un flux de nombres aléatoires non corrélés constitue un bruit blanc. Par exemple, une source de bruit uniforme avec une plage de -10 à 10 sera constituée de nombres aléatoires sans aucune corrélation entre l'un et l'autre et où il y a une chance de 5 que chaque échantillon soit, par exemple, dans la plage de -10 à - 9, la plage 2 à 3 ou toute autre plage qui est un 20e de la plage crête-à-crête totale. Caractéristiques du bruit rose Aux fins de cette discussion, puissance signifie la puissance moyenne ou l'énergie contenue dans un signal sur une plage Longue période de temps. Le bruit blanc a la même distribution de puissance pour toutes les fréquences, donc il ya la même quantité de puissance entre 0 et 500 Hz, 500 et 1000 Hz ou 20 000 et 20 500 Hz. Le bruit rose a la même distribution de puissance pour chaque octave, de sorte que la puissance comprise entre 0,5 Hz et 1 Hz est la même entre 5 000 Hz et 10 000 Hz. Puisque la puissance est proportionnelle à l'amplitude au carré, l'énergie par Hz diminuera à des fréquences plus élevées à une vitesse d'environ -3dB par octave. Pour être absolument précis, le rolloff devrait être -10dBdecade, qui est d'environ 3.0102999 dBoctave. Les utilisations du bruit rose L'utilisation la plus évidente du bruit rose est comme un signal audio, à utiliser directement, à filtrer ou à être utilisé pour moduler quelque chose. Je suis également intéressé par le bruit de bruit rose en dessous de 1 Hz comme un signal de contrôle pour simuler les aspects aléatoire fluctuant de la musique. Par exemple, je voudrais que certains aspects d'une pièce fluctuent minute par minute, donc j'ai besoin de nombres aléatoires avec de l'énergie à 0,01 Hz et en dessous. Mon intérêt particulier est de pouvoir sculpter de tels signaux de commande à partir d'une source de bruit rose purement par l'utilisation de filtres. L'idée serait que je puisse avoir un filtre passe-bande avec une certaine bande passante en octaves (ou fractions d'octave) et que je pourrais choisir de régler sa fréquence comme je l'ai aimé, sans affecter le niveau RMS de sa sortie. Sans une source de bruit rose, par exemple en utilisant une source de bruit blanc, il devient très difficile d'ajuster la pièce en changeant la fréquence du filtre de sculpture, car cela affecte également le niveau du signal résultant. Dans Csound) Je voudrais être en mesure de spécifier le bruit avec: 1 - Une certaine fréquence de limitation inférieure. Par exemple. 0,1 Hz. En dessous de cela, il y aurait soit peu d'énergie, soit l'énergie resterait plate par Hz, plutôt que d'augmenter par Hz pour donner la 3dBoctave caractéristique du bruit rose. Donc, il serait blanc en dessous de 0,1 Hz. 2 - Un certain niveau RMS par octave. Par exemple, 5,0 RMS par octave. Par conséquent, un filtre parfait qui excluait tout sauf une octave, quelle que soit l'octave au-dessus de la fréquence de délimitation inférieure, aurait un niveau RMS de 5,0. Le bruit étant le bruit, il faudrait beaucoup de temps pour la moyenne des fluctuations pour mesurer cette précision. 3 - Il peut également être souhaitable de spécifier une fréquence de délimitation supérieure, afin de réduire la charge de calcul lorsque les hautes fréquences ne sont pas requises. Dans l'avenir, j'ai l'intention d'écrire un générateur d'unités Csound Quasimodo pour une production à débit k ou k, d'une qualité industrielle plutôt que d'une qualité analytique. L'acide nitrique industriel ou technique précise qu'il présente une résistance minimale et approximative particulière. La qualité analytique spécifie exactement sa résistance et la tolérance pour cette spécification, ainsi que les niveaux maximaux admissibles des contaminants les plus importants. Ces paramètres seraient i taux: fixé au début de l'instanciation ugens, non modifiable dans le temps. Donc la spécification d'une limite inférieure limite de fréquence de la qualité rose du bruit se traduirait par cette limite étant fixé à l'octave la plus proche, et non pas précisément. Il est possible de concevoir un générateur de bruit rose avec un contrôle de vitesse k des fréquences de limite de niveau, supérieur et inférieur et des pentes de ces limites. De cette manière, un contrôle précis de la distribution de la fréquence du bruit pourrait être réalisé sans changer le niveau RMS du bruit. Je vais laisser cette idée pour l'instant, mais il serait très pratique Filtrage du bruit blanc pour le rendre rose Les filtres DSP les plus simples sont -6dBoctave. Cependant, un DSP ou un filtre passe-bas analogique électronique avec une réponse -3dBoctave est (ou plutôt, était) une bête rare en effet. Voici trois filtres qui font le travail. (Paul Kellet a contribué deux filtres antérieurs à ceux énumérés ici.) Un tel filtre serait alimenté avec le bruit blanc pour produire le rose, dans certaines limites d'exactitude. Au-dessous des algorithmes est Allan Herrimans analyse graphique de la réponse de ces trois filtres. La première description que je connais est celle de Robert Bristow-Johnson ltpbjrbjxxxx. viconetgt affichant sur la liste Music-DSP le 30 juin 1998: (Il s'agit du rbj (Rouge) Robert Bristow-Johnsons à trois pôles et à trois filtres zéro.) Gt Orfanidis aussi Mentionne un moyen astucieux d'obtenir un bruit assez raisonnable: additionner n randhs, où chaque randh exécute une octave gt plus lente que la précédente (une): gt gt Ceci est une référence à Sophocles Orfanidis livre Introduction to gt Signal Processing: gt Gt prenhallbooksesm0132091720.html gt gt Cela ressemble à un très bon moyen de le faire. Une autre méthode que mentionne Orfanidis provient d'un poste comp. dsp de la mienne. Son juste un filtre roseing simple à appliquer au bruit blanc. Puisque le roulage est -3 dBoctave, -6 dBoctave (pôle 1er ordre) est trop raide et 0 dBoctave est trop peu profond. Une approximation équirippée du filtre de rosage idéal peut être réalisée en alternant des pôles réels avec des zéros réels. Une solution simple d'ordre 3 que i obtenue est: la réponse suit la courbe idéale -3 dBoctave à l'intérieur ou - 0,3 dB sur une plage de 10 octaves allant de 0,0009nyquist à 0,9nyquist. Probablement si je devais le faire à nouveau, id faire 5 pôles et 4 zéros. R b-j pbjrbjxxxx. viconet a. k.a. robertxxxx. audioheads a. k.a. robertxxxx. wavemechanics Ne pas céder au côté obscur. Boycott intel et microsoft. A partir de l'archive du code Music-DSP: music. columbia. educmcmusic-dsp (Was at shoko. calarts. edu glmrboymusicdspdspsource. html) Paul Kellet ltpaul. kellettxxxx. maxim. abel. co. ukgt abel. fr maxim a été mise à jour le Plusieurs fois et maintenant (1999 17 octobre) contient deux implémentations, situées ici: shoko. calarts. edu glmrboymusicdspsourcecodepink. txt qui est précis à -0.05dB au-dessus de 9.2Hz (44100Hz taux d'échantillonnage). 2011-03-20 mise à jour: la musique-DSP archives sont à: musicdsp. orgshowmany. php contient plusieurs éléments relatifs au bruit rose, mais je ne suis pas sûr lequel de ces, le cas échéant, sont le pink. txt mentionné ci-dessus. Le 17 octobre 1999, Paul a mis au point un autre perfectionnement: filtres de qualité instrumentale et économiques. Il s'agit d'une approximation d'un filtre -10dBdecade utilisant une somme pondérée de filtres de premier ordre. Il est précis à -0,05dB au-dessus de 9,2Hz (44100Hz taux d'échantillonnage). Le gain d'unité est à Nyquist, mais peut être ajusté par l'échelle des nombres à la fin de chaque ligne. (Il s'agit de pk3 (noir) Méthode raffinée de Paul Kellets dans l'analyse d'Allans.) B0 0,99886 b0 blanc 0,0555179 b1 0,99332 b1 blanc 0,0750759 b2 0,96900 b2 blanc 0,1538520 b3 0,86650 b3 blanc 0,3104856 b4 0,55000 b4 blanc 0,5329522 b5 -0,7616 b5 - blanc 0,0168980 rose b0 B1 b2 b3 b4 b5 b6 blanc 0.5362 b6 blanc 0.115926 Une version économique avec précision de -0.5dB est également disponible. (Ceci est pke (Bleu) méthode d'économie de Paul Kellets.) B0 0.99765 b0 blanc 0.0990460 b1 0.96300 b1 blanc 0.2965164 b2 0.57000 b2 blanc 1.0526913 tmp b0 b1 b2 blanc 0.1848 Voici l'analyse graphique d'Allan Herrimans de la réponse de ces trois filtres. (Bleu) Paul Kellets méthode de l'économie Flatness de trois filtres Pinking L'échelle verticale est 0,2dBdivision. J'ai demandé à Paul à propos de l'algorithme qu'il a utilisé pour concevoir ces filtres très tordu. Il a répondu avec le texte et l'image suivants. Il revient au roll-off d'un filtre passe-bas de premier ordre trop raide à -6dBoctave. La seule chose que je pouvais penser avec un roll-off plus doux était la transition de 0dBoct à -6dBoctave au genou d'un tel filtre. En positionnant suffisamment de ces genoux dans un escalier, une bonne pente de -3dBoct peut être faite. Une légère élévation de niveau se produit près de Nyquist, mais cela peut être contré par la combinaison d'un petit filtre non filtré, filtre passe-haut, et / ou signal retardé avec la sortie. Chaque version du filtre a été conçue à la main à l'aide d'un programme simple Visual Basic pour tracer la réponse impulsionnelle (avec un accent 3dBoct) que les coefficients ont été ajustés. L'image ci-jointe montre comment la version économique est construite. Je suis heureux de voir que ces filtres hautement tordus sont soigneusement fabriqués à la main. Dans le cadre d'une discussion sur l'aplatissement de la réponse en fréquence des algorithmes de Voss, Allan Herriman a contribué à l'aplatissement de la réponse de l'approche de bruit blanc filtré. (Il s'agissait avant l'instrumentation de Paul Kellets et les filtres roses d'économie du 17 octobre 1999.) Cette astuce pourrait également être utilisée pour réduire l'ondulation de la méthode du bruit blanc filtré. Cependant, dans ce cas, je pense qu'il est beaucoup plus efficace (et plus facile) d'ajouter juste plus de pôles et de zéros au filtre. Les filtres auront tous les pôles et les zéros réels (c'est-à-dire les sections du 1er ordre). Les pôles et les zéros alterneront, et il y aura un rapport constant entre les fréquences. Ce rapport détermine l'ondulation. Par exemple. Si le rapport est 2 et nous commençons par un pôle à 1 Hz, nous obtenons ce qui suit: Faire quelques simulations dans PSpice () m'a donné les valeurs d'ondulation approximatives suivantes: S'il ya seulement un petit nombre de pôles et de zéros (par exemple rb-js L'affichage a eu trois de chaque) alors le résultat optimal n'aura pas un espacement logarithmique exact des fréquences. Je suppose qu'il est possible d'utiliser une méthode d'optimisation pour obtenir le meilleur pôle et zéro emplacements pour une quantité donnée d'ondulation, mais je n'ai pas essayé. Les emplacements pôle et zéro peuvent également avoir besoin d'être déformés pour tenir compte des effets d'échantillonnage. Je suggère d'avoir un pôle de plus que zéro, de sorte que le bruit au-dessus de la gamme d'intérêt est brun, et le bruit en dessous de la gamme d'intérêt est blanc. Ce serait probablement pas important si. L'algorithme de Voss Le 30 juin 1998, Thomas Hudson m'a envoyé ce code C qui implémente l'algorithme de Voss, qui crée un bruit rose en ajoutant une série de sources de bruit blanc à des octaves successivement plus basses: Si vous avez du mal à trouver l'article de M. Gardner, J'ai une classe C qui implémente Vosss algorithme: include ltiostreamgt include ltstdlib. hgt J'ai répondu: Merci pour ce code. Cela confirme ma compréhension de l'échantillonnage direct et de la prise des sources de bruit blanc d'octave inférieur, et même la pondération de tous. La seule chose est que la source de bruit la plus rapide changeant dans ce code change chaque deuxième échantillon. Il ne devrait pas y avoir de bruit blanc sur chaque échantillon. Dans ce cas, il serait préférable de diviser les valeurs aléatoires par 6 plutôt que 5 et de fixer la somme à rans () (range6) au lieu de 0. Thomas a répondu: Youre right. En fait, je l'ai peut-être modifié un peu de l'article original. Ou peut-être une erreur. Je pense que j'ai été expérimenter w diverses gammes et le nombre de valeurs blanches. Quand j'ai fait ceci j'utilisais le nombre rose résultant comme valeur de consultation dans un tableau des notes. J'ai même peut-être une version quelque part qui avait un paramètre de granularité, ce qui permet non seulement de spécifier la plage, mais le nombre de valeurs blanches. J'ai eu l'intention de tracer l'effet de différents nombres de valeurs blanches. L'algorithme de Voss-McCartney À la fin du mois d'août et au début du mois de septembre, le premier débat sur le bruit a monté sa tête sous une forme très constructive sur la liste de diffusion Music-DSP: shoko. calarts. edu Sur la base de cette discussion et des commentaires des participants, Est l'élément clé de l'algorithme de Voss McCartney et de sa mise en œuvre. James McCartney ltasynth xxxx. Stephan M. Sprenger a écrit: gt gt J'ai entendu parler d'une proposition pour faire du bruit rose en ajoutant de multiples gt gt sources de bruit. (Je n'ai pas essayé ou analysé moi-même, donc je ne peux pas gt gt dire si c'est bon.) Gt gt gt Allan, gt gt c'est l'algorithme que j'ai appelé la méthode Voss dans mon précédent affichage gt. Il est décrit dans M. Gardner, White et Brown Music, Fractal gt Curves et One-Over-f Fluctuations, Sci. 16 (1978) p.288 gt selon Orfanidis qui le mentionne dans Introduction to Signal gt Processing. Il donne aussi une mise en œuvre de celui-ci, mais je n'ai pas essayé gt il encore si je ne peux pas vraiment commenter. J'ai posté une amélioration à cet algorithme un temps en arrière. Ici, il est de nouveau: Heres comment améliorer le Gardner rose générateur de bruit. Gardner ajoute plusieurs générateurs de nombres aléatoires uniformes qui sont évalués en intervalles de temps d'octave. Le schéma est le suivant: x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x Le problème avec ce qui précède est que sur certains échantillons, vous devez ajouter beaucoup plus de valeurs aléatoires que d'autres. Cela peut également provoquer de grandes discontinuités dans la vague lorsque beaucoup de valeurs changent à la fois. En réarrangant l'ordre que les générateurs aléatoires changent, la charge peut être rendue uniforme, l'opération peut être rendue plus efficace et l'écart d'un échantillon à l'autre est limité par une valeur constante de chaque échantillon. Heres le modèle, une structure arborescente: Un seul des générateurs change chaque échantillon. Cela rend la charge constante. Cela signifie également que vous pouvez mettre à jour la somme en soustrayant la valeur précédente d'un générateur et en ajoutant la nouvelle valeur, au lieu de les additionner toutes ensemble. Vous pouvez déterminer quel nombre aléatoire doit être modifié chaque échantillon en incrémentant un compteur et en comptant les zéros de fin dans le mot. Le nombre de zéros à la fin est l'indice du nombre aléatoire à modifier. Le nombre de zéros de fin de course peut être déterminé très rapidement sur une machine avec une instruction de zéros de départ. Reste d'excercise laissé au lecteur. Les motifs ci-dessus montrent le temps se déplaçant horizontalement vers la droite, et chaque ligne étant un nombre aléatoire, ou plutôt une source de bruit blanc échantillonné d'onde carrée. Plus tard, James a clarifié ceci en notant que chaque échantillon contenait également un échantillon de bruit blanc: gt L'extrémité supérieure du spectre n'était pas aussi bonne. La cascade de péché (x) x gt formes que j'ai prédit dans mon autre poste était assez évident. Gt Ripple était seulement environ 2dB jusqu'à Fs8 et 4dB jusqu'à Fs5. La réponse gt était d'environ 5 dB vers le bas à Fs4 (l'un des sin (x) x nuls), et il y avait gt un null profond à Fs2. Gt (Ces chiffres sont un peu grossiers. Une moyenne plus élevée aurait aidé.) Vous pouvez améliorer un peu l'octave supérieure en ajoutant un générateur de bruit blanc à la même amplitude que les autres. Ce qui remplit le diagramme de la façon suivante: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xx x x x x x x x x x x x x x x x x x x x x x x Il sera toujours bosselé là-haut, mais les nuls ne sera pas aussi profond. Voici mon diagramme ASCII des ondes qui, je crois, représente le dernier diagramme de James: Les échantillons de sortie sont sur la rangée supérieure et représentent la somme de toutes les autres lignes à ce moment. La ligne -1 est le bruit blanc ajouté à chaque échantillon de sortie. Les rangées 0 à 4 sont les rangées de bruit blanc échantillonné qui sont toutes mélangées ensemble. Allan a affiché une explication graphique ASCII des spectres de fréquence des différentes sources de bruit et de la façon dont elles ajoutent toutes. Voir allan-2spectrum2.html pour une analyse théorique et graphique plus précise. Allan Herriman sam, 04 sept 1999 05:18:24 1000 Les statistiques des nombres aléatoires sont identiques. Cependant, chaque ligne représente une séquence produite à un débit différent. Une autre façon de voir cela est qu'il existe une véritable source de bruit blanc (largeur de bande infinie), avec un échantillon différent et maintenu pour chaque ligne. L'échantillon et la prise (ou la tenue d'ordre zéro) ont une réponse en fréquence sin (x) x. (Je pense que nous devrions penser en termes de pouvoir, donc la réponse est ((sin (x) x) 2)). Comme chaque rangée échantillonne à un taux différent, sa réponse en fréquence sera différente. (Désolé pour l'art ASCII.) Croyez-moi, ça marche. Je viens de passer toute une soirée à le tester. Oui je sais. J'ai besoin d'avoir une vie :( Phil Burk posté un code, qui était apparemment semblable à ce que Allan allait post. Il s'agit d'une implentation entière, et plutôt que d'addiing toutes les lignes pour chaque échantillon, quand une ligne change, il soustrait La valeur précédente des lignes du total en cours et ajoute la nouvelle valeur de la ligne (un nombre aléatoire). Il ya un signal de bruit blanc ajouté à ce total en cours pour produire la valeur de sortie comme je l'ai suggéré ci-dessus, l'équivalent d'une ligne -1 qui change Chaque échantillon. La version finale du code de Phil Burks est ici: Voir aussi le code boucle intérieure ci-dessous de James McCartney. Puis après, il y avait un peu de discussion sur la façon de coder la sélection de laquelle ligne à mettre à jour. Et la boucle de test pour compter le nombre de zéros à la fin, qui sélectionne ensuite la ligne à mettre à jour. La CPU Power PC a une instruction pour cela, et donc apparemment, le Pentium. Tout cela est dans l'archive de liste au début de Septembre 1999 et je Il n'y avait pas de ligne (les rangées 0 à 4 dans mon diagramme ci-dessus) changerait, à des occasions peu fréquentes. James McCartney a répondu que l'échantillon inchangé occasionnel n'est pas un gros problème. Je suis d'accord, d'autant plus que nous ajoutons du bruit blanc (ligne -1 dans mon diagramme) sur chaque échantillon. Il a également commenté les stratégies de codage pour optimiser la vitesse lors de la recherche de l'état 0 d'un compteur dans une boucle. Je ne l'ai pas vraiment suivi. James McCartney a écrit: gt gt gt gt à 10:39 -0600 9499, Phil Burk a écrit: gt Gt gt Juste pour tester ma compréhension, j'ai mis en place une application C gt gt gt de l'algorithme Pink Noise weve discuté. Gt gt gt Quelque chose qui n'était pas évident pour moi au début était que lorsque le gt gt gt est zéro, je ne modifie aucune ligne. Gt gt gt gt Une rangée doit changer chaque échantillon. Gt gt Je ne suis pas sûr d'être d'accord avec cela. Le diagramme arborescent que vous avez montré avait un nombre impair de colonnes, 2N-1. Je pense que la colonne manquante représente un échantillon gt quand aucune ligne ne change. Sinon, l'une des lignes change une fois trop gt souvent et non à une fréquence d'octave. Il n'a pas vraiment d'importance. Si vous avez suffisamment d'octaves alors le compteur sera zéro seulement rarement. Notez qu'avec cette méthode, le nombre d'octaves que vous utilisez n'a aucun effet sur le coût de calcul. Si vous utilisez 16 octaves, vous obtenez un peu plus d'énergie vers le bas à 0,67 Hz Fs44100. Si vous utilisez 8 octaves alors il sera à 172Hz, mais il est assez négligeable. Il est préférable de le laisser arriver que de vérifier un zéro à chaque fois dans la boucle. Ce qui soulève un autre sujet. Dans beaucoup de code DSP je vois des gens faire cela: C'est un moyen très coûteux de le faire, parce que vous vérifiez le compteur à chaque fois, même si la plupart du temps à travers la boucle le test échoue. Puisque vous connaissez la valeur du compteur, vous pouvez prédire quand il sera épuisé. Par conséquent, il est beaucoup mieux de faire ce qui suit: Cela élimine tous les tests conditionnels non nécessaires, accélérant ainsi la boucle intérieure. James McCartney a posté sa boucle intérieure code: James McCartney lundi 6 sept 1999 12:51:50 -0600 À 10:14 -0600 9699, Phil Burk a écrit: gt James McCartney a écrit: gt gt gt gt À 18h22 - Malheureusement, puisque je ne suis pas écrire le code pur Macintosh, je ne peux pas compter sur gt gt gt l'instruction sncp PPC pour compter zéros en tête. J'utilise donc une boucle de niveau élevé inefficace gt gt gt pour compter les zéros à la fin. Cette boucle échoue gt gt gt quand le compteur est zéro donc je dois vérifier pour zéro de toute façon. Gt gt gt gt OU le compteur avec 0xFFFF0000. Ensuite, vous aurez 16 octaves gt gt et votre boucle ne sera jamais échouer. Gt gt Peut-être que mon thé n'a pas donné un coup de pied en cuz je ne comprends toujours pas. Supposons que j'ai gt 16 octaves, indexées 0-15. OR avec 0xFFFF0000 signifie que je vais parfois obtenir gt 16 zéros à la fin. Donc, je ne devrais pas encore vérifier pour que le cas gt pour empêcher la sur-indexation de mon tableau. Je pourrais aussi bien vérifier pour zéro avant gt entrer dans la boucle. Alors OU avec 0xFFFF8000 gt Im incliné à coller avec mon code d'origine puisqu'il est mathématiquement gt OK, portable, et acceptably rapide. La branche (cntr0) ne sera prise qu'une fois toutes les 2N fois. Les autres fois, il ne coûte qu'une branche d'instruction de 1 gt n'est pas prise parce que le test suit la génération de gt l'index et les codes de condition sont déjà définis. Vraiment, je pense que si vous n'utilisez pas une instruction pour obtenir les zéros à la fin, il n'y a aucun avantage à mon algorithme. Le point entier de cela est que avec en profitant d'une telle instruction vous obtenez une grande vitesse vers le haut sur le bruit de filtrage, ou l'algorithme normal de VossGardner. Je pense que la plupart des processeurs ont de telles instructions. Je ne vois aucune raison que vous ne pouvez pas ifdef dans votre code. Voici ma propre implémentation de la boucle interne: unsigned long dés, compteur, prevrand, newrand, semence, total, ifval, k flotter pour (i0 iltnsmps i) k CTZ (compteur) comptage zéros traînants kk amp 15 obtenir la valeur précédente de cette octave Prevrand dicek générer une nouvelle valeur aléatoire semences 1664525 semences 1013904223 changement de se déplacer dans mantissa bitfield divisé par 16 newrand semences gtgt 13 mise à jour total total (newrand - prevrand) générer une nouvelle valeur aléatoire pour le top octave semences 1664525 semences 1013904223 changement pour passer à la mantisse Bitfield divisé par 16 newrand seed gtgt 13 il ya une chance théorique que le newrand total pourrait déborder le bitfield mantissa, mais il est extrêmement peu probable en raison du total étant une valeur gaussienne distribuée. Convertir en valeur à virgule flottante de 2,0 à 4,0 en masquant ifval (total newrand) 0x40000000 soustraire 3 pour obtenir dans la plage de -1 à 1 et sortie out ((float) ampifval) - 3.0f) Allan Herrimans analyse et traité illustré sur le Algorithme de Voss-McCartney Allan m'a envoyé deux documents analysant l'approche de Voss pour créer le bruit rose. Aussi noté ici est une idée de la mine pour faire de la distribution de puissance de l'algorithme approcher plus étroitement de l'idéal. La première était une feuille de calcul Excel de trois pages représentant la moyenne de 1024 FFT de bruit, chacune d'entre elles étant de 524 288 points. Ce fichier en fichier. zip 351k est disponible ici: allan-1graph. zip. Un de ses graphiques est montré à la fin de cette page. Les notes d'Allans sur ce fichier de feuille de calcul sont: allan-1graph-zip. readme. txt. Le second était un fichier Word analysant théoriquement comment les sources de bruit multiples s'ajoutent. Je l'ai converti en HTML (avec Word 97), donc vous pouvez lire Allans largement illustré traité ici allan-2spectrum2.html Un graphique de cela est montré au début de cette page. Notez que ce que Allan se réfère à la rangée 0 pour le bruit blanc sur chaque échantillon est ce que je désigne comme ligne -1 dans mon diagramme ASCII ci-dessus. Assurez-vous de lire le traité ci-dessus. Allan a également contribué aux éléments suivants sur la question de savoir si le bruit rose est stationnaire ou non. Un jour j'espère être en mesure de comprendre DSP à ce niveau. Pour l'instant, je reproduis textuellement ce qu'il a écrit. Je pense que pour garder les universitaires heureux, nous avons besoin d'une déclaration quelque part que le vrai bruit (large bande) rose n'est pas stationnaire. Une preuve de cela a été donnée dans comp. dsp un temps en arrière. (L'enregistrement de Jeff Schencks est archivé ici: allan-1stationary. html.) Le problème vient d'avoir une puissance constante par octave sur un nombre infini d'octaves. Une des implications est que nous ne pouvons pas faire le vrai bruit rose en filtrant le bruit blanc. OTOH, si on s'intéresse seulement à la précision jusqu'à une fréquence de coupure inférieure, alors le bruit est stationnaire, et nous pouvons le générer en filtrant le bruit blanc. Ce sera généralement le cas pour les applications audio. Notez que l'algorithme de Voss est très heureux de résumer un nombre infini d'octaves avec seulement deux nombres aléatoires par échantillon (vous avez besoin d'une mémoire infinie pour cela si), et n'est donc pas soumis au problème de coupure de basse fréquence. Je lui ai demandé ce que non stationnaire signifiait, et il a répondu: From OS:. Ces fonctions de distribution de probabilité peuvent être une fonction de l'indice temporel n. Dans le cas où toutes les fonctions de probabilité sont indépendantes d'un changement d'origine temporelle, le processus aléatoire est dit stationnaire. En d'autres termes, les statistiques du signal ne changent pas avec le temps. Il s'avère que les processus aléatoires avec PSDs proportionnels à 1fa sont stationnaires pour un lt 1. Le bruit rose représente le cas a 1. Le bruit brun (ou rouge) représente le cas a 2 et n'est pas non plus stationnaire. Allan cite de l'une des Bibles de DSP comme mentionné au site de FAQ de comp. dsp (voir la section de références ci-dessous): AV Oppenheim et RW Schafer, Traitement numérique du signal, Prentice-Hall, Inc. Englewood Cliffs, NJ 1975. ISBN 0-13-214635-5. Réduction de l'ondulation dans la réponse de fréquence des algorithmes Il ya une certaine ondulation dans la réponse en fréquence de l'algorithme de Voss comme montré dans les graphiques en haut et en bas de cette page. Ces réductions dans l'ondulation de la réponse en fréquence des algorithmes ne seraient pas nécessaires pour mes applications musicales, mais elles pourraient être utiles pour générer du bruit rose de qualité analytique à des fins scientifiques. Allan suggère des moyens de réduire ce phénomène. L'ondulation dans le générateur de Voss peut être réduite à la moitié de ce niveau (à environ 12 dB) en additionnant les sorties de deux générateurs de bruit rose, l'un fonctionnant à 1sqrt (2) (environ 70) de la fréquence d'échantillonnage de l'autre. Des taux d'échantillonnage impairs comme celui-ci pourraient être un peu difficiles à mettre en œuvre, et ne serait utile que pour des applications telles que des instruments de test (où on s'intéresse vraiment à la planéité), etc. Sa remarque sur l'utilisation de techniques similaires pour réduire l'ondulation dans l'approche du bruit blanc filtré est Dessus dans la section de filtrage. J'ai une autre idée pour réduire l'ondulation dans la réponse: fréquence moduler chaque rangée à des octaves inférieures sur une base aléatoire Comme je l'ai écrit à Allan: Pour mettre en œuvre la modulation de fréquence aléatoire vers le bas pour chaque ligne, chaque fois que la ligne doit être mis à jour avec Un nouveau nombre aléatoire, utilisez une fonction aléatoire pour décider de le faire ou de le laisser inchangé. Si une seule mise à jour a été manquée, alors la valeur des lignes resterait la même pour deux fois plus longtemps que d'habitude. En pratique, si nous voulons que la probabilité de mise à jour soit de 50, alors nous gardons le compte de comptage de boucle, mais avant d'appeler le code pour obtenir un nouveau nombre aléatoire et de mettre à jour la ligne appropriée, nous regardons un peu d'un random number and only call the code if the bit 1. I would not like to write a formula for the frequency response of the results I believe that by doing a drastic, noisy, frequency - modulation of each row, those distinctive curves in its frequency response will be scattered rather nicely and so the sum of all the rows frequency responses will be smoothed out. Overall, the frequency of the resulting noise would move downwards, by some factor which I couldnt be bothered thinking about right now. Therefore, we might want to add a lower level of white noise (my row -1 to compensate for this. On average, I guess this noise would be about 70 the frequency of the original. 50 of the time it would be the normal frequency through doing the normal row update. 25 of the time it would be an octave down through missing a single row update. (However, this covers two row sample times, so my 25 should be higher) 12.5 of the time it would be 1.5 octaves down through missing two updates, and so running at 13 the normal sample rate. 6.25 of the time it would be 2 octaves down through missing three updates. The pattern continues, but these are for longer and longer times, so calculating the exact change to the power distribution is left as an exercise to the reader. (Allan had to get back to some other responsibilities for the time being.)2006-03-27 Please see Larry Trammells (RidgeRats) Stochastic Voss-McCartney algorithm details below. References to other material Here are a few references to other material and web sites. Please let me know if any of these links no longer works. In some cases I have copies of the pages and software and will put them on my site if the original pages cannot be found anywhere. There is a widely known article in Scientific American. Stephan M. Sprenger (ltsms xxxx. prosoniqgt, prosoniq ) wrote in Music-DSP on 30 June 1998: The original algorithm has been suggested by Voss in M. Gardner, White and Brown Music, Fractal Curves and One-Over-f Fluctuations, Scientific American, 1978. It doesnt yield exact 1f noise though, but for most practical applications it comes close enough. Searching AltaVista for voss and noise and gardner I came across a site on chaos site usuarios. intercom. escocleabennett. htm which mentioned another article by Voss: Voss, Richard F. and John Clarke. ampquot 1f noise in Music: Music From 1f Noise. J. Acoust. Soc. Un m. 63(1) (1978): 258-261. JASA is a fascinating journal. Everything from the neurochemistry of a gnats auditory system to the propagation of sound waves in water across the Pacific Ocean. I will try to find these articles. Apparently the suggested algorithm is adding successive noise sources where each source is an octave below the previous one, and all have the same level. The implementaion of this is discussed in Thomas Hudsons C code above. Wentian Lis bibliography also lists another article: R. F. Voss and J. Clarke, 1f noise in music and speech, Nature,258, 317-318 (1975). On the Music-DSP list (25 August 1999) Chuck Cooper ltplangent xxxx. mediaone. netgt wrote: About generating 1F noise directly: Theres an algorithm in Computer Music -- Synthesis, Composition and Performance by Charles Dodge and Thomas Jerse. Page 290 in the more recent edition. Its a pretty short loop. It picks one of N integers (N a power of 2) with a 1F distribution. A good site for FAQs DSP code and DSP development software is DSP-Guru . dspguru. Denis Matignon has a site on noise which is related to pink-noise. tsi. enst. fr matignon I dont understand this field of fractional differential systems theory, but I think it relates to noise in servo systems which has a power distribution at a different slope from -3dBoctave. (Explanatory material at this site was not viewable with Netscape due to a missing style sheet, so use a less fussy browser instead.) The web site for the Music-DSP mailing list is shoko. calarts. edu (New April 2000) An article on pink noise, including an analogue filter circuit, by Don Morgan for Embedded Systems magazine. embedded200000030003spectra. htm . 2006-03-27 Larry Trammells (RidgeRats) Stochastic Voss-McCartney algorithm . home. earthlink. net ltrammelltechpinkalg. htm . He announced it on the MusicDSP mailing list: aulos. calarts. edupipermailmusic-dsp2006-Marchthread. html. There is some interesting discussion on the list, which I have not attempted to summarise here - please see the archives . 2007-01-22 Larry Trammells (RidgeRats) new approach, which is faster and smoother: home. earthlink. net 2006-03-27 Nicolas Brodu has a paper using the Voss-McCartney algorithm with the highly respected Mersenne Twister PRNG: 2010-03-12 A good source of DSP information is dsprelated . 2011-03-20 Henning Thielemanns paper Sampling-Rate-Aware Noise Generation users. informatik. uni-halle. de thielemaResearchnoise. pdf may be of interest. It concerns pink and white noise and methods of generating them which dont lead to unpleasant surprises if the sampling rate is changed. What next Please suggest improvements and additions for this page. At some stage in the future, when I get my brain back into programming mode, I intend to write a pink noise ugen for Csound (and Quasimodo) for k and a rate. I can think of some ways to make a speedy algorithm by hard coding the first few rows of noise, writing it into a buffer (say 32 or 64 floats) which are subsequently read out until they are all goen and it is time to calculate a new set. This way, I think, we dont need to fuss over counting zeroes, except for the one sample of the 32 or 64 which changes according to the main counter. There was some discussion on the list of the merits of this, but it is hard to envisage the effects of caching and of how I would implement it. One view is that any use of buffers of pre-computed noise samples would be slower. However, maybe fast, hard-coded calculations filling a buffer, and that buffer being used in a loop to fill an array of a rate samples, looks attractive to me. Thanks to James, Phil and Allan Here is a graph from Allan Herrimans spreadsheet. It is based on averaging 1024 FFTs of noise, each of them 524,288 points. 10db per decade reduction in power is precisely what it should be. Update history See also minor updates at the beginning. 2007 January 22 Updated link to Larrys material. 2006 March 27 Link to Larry Trammells Stochastic Voss-McCartney algorithm and to Nicholas Brodus paper and source code. 2005 September 19 Added link to new Park-Miller-Carta PRNG page. 2003 July 10 Added link to pinkish opcode in Csound. 2000 April 11 Added link to Don Morgans article. 1999 October 18 Removed Paul Kellets two earlier filters, added Allans graphical analysis of these two and Robert Bristow-Johnsons pinking filters into the main page. Also added Pauls description of how he devised the filters. 1999 October 17 Added updated pinking filter algorithms from Paul Kellet, but left his first two there, because Allan had analysed them. 1999 October 15 Added an updated allan-2spectrum2.html and Allans analysis of the pinking filters. 1999 September 20 Updated Paul Kellets pinking filter. 1999 September 14 Everything revised in light of comments and contributions. Multiple revisions during the day. A completely new version of Allans treatise added. Added my proposal for randomised frequency modulation of each row to reduce ripple. 1999 September 09 (9999) Page created. Allans graph added. Autoregressive Moving Average ARMA(p, q) Models for Time Series Analysis - Part 1 In the last article we looked at random walks and white noise as basic time series models for certain financial instruments, such as daily equity and equity index prices. Nous avons constaté que dans certains cas un modèle de marche aléatoire était insuffisant pour capturer le comportement d'autocorrélation complet de l'instrument, ce qui motive des modèles plus sophistiqués. Dans les deux prochains articles, nous allons discuter de trois types de modèle, à savoir le modèle autorégressif (AR) d'ordre p, le modèle de moyenne mobile (MO) d'ordre q et le modèle de la moyenne mobile déplacée (ARMA) mixte de l'ordre p , Q. Ces modèles nous aideront à tenter de saisir ou d'expliquer davantage la corrélation sérielle présente dans un instrument. En fin de compte, ils nous fourniront un moyen de prévoir les prix futurs. Cependant, il est bien connu que les séries chronologiques financières possèdent une propriété connue sous le nom de regroupement de la volatilité. Autrement dit, la volatilité de l'instrument n'est pas constante dans le temps. The technical term for this behaviour is known as conditional heteroskedasticity . Comme les modèles AR, MA et ARMA ne sont pas conditionnellement hétéroscédasticisés, c'est-à-dire qu'ils ne tiennent pas compte de la volatilité, nous aurons besoin d'un modèle plus sophistiqué pour nos prédictions. De tels modèles incluent le modèle Hectoroskedastic conditionnel (ARCH) et le modèle Hectoroskedastic conditionnel (GARCH), et les nombreuses variantes de celui-ci. GARCH est particulièrement bien connu en finance quantitative et est principalement utilisé pour des simulations de séries chronologiques financières comme moyen d'estimer le risque. Cependant, comme avec tous les articles QuantStart, je veux construire ces modèles à partir de versions plus simples afin que nous puissions voir comment chaque nouvelle variante change notre capacité de prédiction. Malgré le fait que AR, MA et ARMA sont des modèles de séries temporelles relativement simples, ils sont à la base de modèles plus compliqués tels que la moyenne mobile intégrée (ARIMA) et la famille GARCH. Il est donc important que nous les étudions. Une de nos premières stratégies de négociation dans la série d'articles de séries chronologiques sera de combiner ARIMA et GARCH afin de prévoir les prix n périodes à l'avance. Cependant, nous devrons attendre jusqu'à ce que nous ayons discuté à la fois ARIMA et GARCH séparément avant de les appliquer à une véritable stratégie. Comment allons-nous? Dans cet article, nous allons présenter quelques nouveaux concepts de séries chronologiques qui ont besoin des autres méthodes, La stationnarité et le critère d'information Akaike (AIC). À la suite de ces nouveaux concepts, nous suivrons le modèle traditionnel pour l'étude de nouveaux modèles de séries temporelles: Rationale - La première tâche est de fournir une raison pour laquelle ils étaient intéressés par un modèle particulier, comme quants. Pourquoi introduisons-nous le modèle de la série chronologique Quels effets peut-il capturer Que gagnons-nous (ou perdons) en ajoutant une complexité supplémentaire Définition - Nous devons fournir la définition mathématique complète (et la notation associée) du modèle de série chronologique afin de minimiser Toute ambiguïté. Propriétés de second ordre - Nous allons discuter (et dans certains cas dériver) les propriétés du second ordre du modèle de série chronologique, qui comprend sa moyenne, sa variance et sa fonction d'autocorrélation. Correlogramme - Nous utiliserons les propriétés du second ordre pour tracer un corrélogramme d'une réalisation du modèle de série chronologique afin de visualiser son comportement. Simulation - Nous simulerons les réalisations du modèle de la série temporelle et ensuite adaptons le modèle à ces simulations pour nous assurer d'avoir des implémentations précises et de comprendre le processus d'ajustement. Données financières réelles - Nous allons adapter le modèle de la série chronologique aux données financières réelles et considérer le corrélogramme des résidus afin de voir comment le modèle tient compte de la corrélation série dans la série originale. Prédiction - Nous allons créer des prévisions n-step ahead du modèle de série chronologique pour des réalisations particulières afin de produire finalement des signaux de trading. Presque tous les articles que j'écris sur les modèles de séries chronologiques vont tomber dans ce modèle et il nous permettra de comparer facilement les différences entre chaque modèle que nous ajoutons plus de complexité. Were going to start by looking at strict stationarity and the AIC. Strictement stationnaire Nous avons fourni la définition de stationnarité dans l'article sur la corrélation sérielle. Toutefois, étant donné que nous allons entrer dans le domaine de nombreuses séries financières, avec diverses fréquences, nous devons nous assurer que nos modèles (éventuels) tiennent compte de la volatilité variable dans le temps de ces séries. En particulier, nous devons considérer leur hétéroscédasticité. Nous rencontrerons cette question lorsque nous essaierons d'adapter certains modèles à des séries historiques. D'une manière générale, on ne peut tenir compte de la totalité de la corrélation sérielle dans les résidus des modèles ajustés sans tenir compte de l'hétéroscédasticité. Cela nous ramène à la stationnarité. Une série n'est pas stationnaire dans la variance si elle a une volatilité variable dans le temps, par définition. La stationnalité stricte de la série A est rigoureusement stationnaire si la distribution statistique conjointe des éléments x, ldots, x est la même que celle de xm, ldots, xm, Pour tout ti, m. On peut penser à cette définition simplement que la distribution de la série temporelle est inchangée pour tout changement abrégé dans le temps. En particulier, la moyenne et la variance sont constantes dans le temps pour une série strictement stationnaire et l'autocovariance entre xt et xs (disons) ne dépend que de la différence absolue de t et s, t-s. Nous reviendrons sérieusement stationnaire dans les futurs postes. Critère d'information Akaike J'ai mentionné dans les articles précédents que nous aurions éventuellement besoin d'examiner comment choisir entre les meilleurs modèles distincts. Cela est vrai non seulement de l'analyse des séries chronologiques, mais aussi de l'apprentissage automatique et, plus généralement, des statistiques en général. Les deux principales méthodes que nous utiliserons (à l'heure actuelle) sont le Critère d'information Akaike (AIC) et le Critère d'information bayésien (au fur et à mesure que nous progressons dans nos articles sur les statistiques bayésiennes). Considérons brièvement l'AIC, car il sera utilisé dans la partie 2 de l'ARMA article. AIC est essentiellement un outil pour aider à la sélection de modèles. Autrement dit, si nous avons une sélection de modèles statistiques (y compris des séries chronologiques), alors l'AIC estime la qualité de chaque modèle, par rapport aux autres que nous avons disponibles. Il est basé sur la théorie de l'information. Qui est un sujet très intéressant, profond que malheureusement nous ne pouvons pas entrer dans trop de détails au sujet. Il essaie d'équilibrer la complexité du modèle, qui dans ce cas signifie le nombre de paramètres, avec la façon dont il correspond aux données. Nous fournissons une définition: Akaike Critère d'information Si nous prenons la fonction de vraisemblance pour un modèle statistique, qui a k ​​paramètres, et L maximise la probabilité. Alors le critère d'information d'Akaike est donné par: Le modèle préféré, à partir d'une sélection de modèles, a le minimum AIC du groupe. Vous pouvez voir que l'AIC croît au fur et à mesure que le nombre de paramètres, k, augmente, mais est réduit si la probabilité logarithmique négative augmente. Essentiellement, il pénalise les modèles qui sont overfit. Nous allons créer des modèles AR, MA et ARMA de différents ordres et une façon de choisir le meilleur modèle adapté à un ensemble de données particulier est d'utiliser l'AIC. C'est ce que bien faire dans l'article suivant, principalement pour les modèles ARMA. Autoregressive (AR) Modèles d'ordre p Le premier modèle va être considéré, qui forme la base de la partie 1, est le modèle autorégressif d'ordre p, souvent raccourci à AR (p). Dans l'article précédent, nous avons considéré la marche aléatoire. Où chaque terme, xt dépend uniquement du terme précédent, x et un terme de bruit blanc stochastique, wt: Le modèle autorégressif est simplement une extension de la marche aléatoire qui inclut des termes plus loin dans le temps. The structure of the model is linear . C'est-à-dire que le modèle dépend linéairement des termes précédents, avec des coefficients pour chaque terme. C'est d'où provient le régressif en autorégressif. Il s'agit essentiellement d'un modèle de régression où les termes précédents sont les prédicteurs. Modèle autorégressif d'ordre p Un modèle de série temporelle,, est un modèle autorégressif d'ordre p. AR (p), si: begin xt alpha1 x ldots alphap x wt somme p alphai x wt fin Où est le bruit blanc et alphai dans mathbb, avec alphap neq 0 pour un processus autorégressif p-order. Si nous considérons l'opérateur de décalage vers l'arrière. (Voir l'article précédent), alors nous pouvons réécrire ce qui précède en tant que fonction theta de: begin thetap () xt (1 - alpha1 - alpha2 2 - ldots - alphap) xt wt end Peut-être la première chose à noter sur le modèle AR (p) Est qu'une marche aléatoire est simplement AR (1) avec alpha1 égal à l'unité. Comme nous l'avons indiqué ci-dessus, le modèle auto - gressif est une extension de la marche aléatoire, ce qui est logique. Il est facile de faire des prédictions avec le modèle AR (p), pour tout temps t, car une fois que nous avons les coefficients alpha déterminés, Devient tout simplement: commencer hat t alpha1 x ldots alphap x fin Ainsi, nous pouvons faire des prévisions à l'avance en produisant chapeau, chapeau, chapeau, etc jusqu'à chapeau. En fait, une fois que nous considérerons les modèles ARMA dans la partie 2, nous utiliserons la fonction R predict pour créer des prévisions (avec des bandes d'intervalle de confiance d'erreur standard) qui nous aideront à produire des signaux de trading. Stationarité pour les processus autorégressifs L'un des aspects les plus importants du modèle AR (p) est qu'il n'est pas toujours stationnaire. En effet, la stationnarité d'un modèle particulier dépend des paramètres. Ive a abordé ce sujet dans un article précédent. In order to determine whether an AR(p) process is stationary or not we need to solve the characteristic equation . L'équation caractéristique est simplement le modèle autorégressif, écrit en mode de changement de direction, mis à zéro: nous résolvons cette équation pour. Pour que le processus autorégressif particulier soit stationnaire, il faut que toutes les valeurs absolues des racines de cette équation dépassent l'unité. C'est une propriété extrêmement utile et nous permet de calculer rapidement si un processus AR (p) est stationnaire ou non. Prenons quelques exemples pour concrétiser cette idée: Random Walk - Le processus AR (1) avec alpha1 1 a l'équation caractéristique theta 1 -. De toute évidence, cela a racine 1 et en tant que tel n'est pas stationnaire. AR (1) - Si on choisit alpha1 frac on obtient xt frac x wt. Ceci nous donne une équation caractéristique de 1 - frac 0, qui a une racine 4 gt 1 et donc ce processus AR (1) particulier est stationnaire. AR (2) - Si l'on place alpha1 alpha2 frac alors on obtient xt frac x frac x wt. Son équation caractéristique devient - frac () () 0, ce qui donne deux racines de 1, -2. Comme il s'agit d'une racine unitaire, il s'agit d'une série non stationnaire. Cependant, d'autres séries AR (2) peuvent être stationnaires. Propriétés du deuxième ordre La moyenne d'un processus AR (p) est nulle. Cependant, les autocovariances et les autocorrélations sont données par des fonctions récursives, connues sous le nom d'équations de Yule-Walker. Les propriétés complètes sont données ci-dessous: begin mux E (xt) 0 fin begin gammak somme p alphai gamma, enspace k 0 fin début rhok somme p alphai rho, enspace k 0 end Notez qu'il est nécessaire de connaître les valeurs des paramètres alphai avant Calculer les autocorrélations. Maintenant que nous avons indiqué les propriétés du second ordre, nous pouvons simuler différents ordres de AR (p) et tracer les corrélogrammes correspondants. Simulations et corrélogrammes Commençons par un processus AR (1). Ceci est similaire à une marche aléatoire, sauf que alpha1 ne doit pas être égal à l'unité. Notre modèle va avoir alpha1 0,6. Le code R pour créer cette simulation est donné comme suit: Notez que notre boucle for est exécutée de 2 à 100, pas 1 à 100, comme xt-1 lorsque t0 n'est pas indexable. De même pour les processus AR (p) de rang supérieur, t doit aller de p à 100 dans cette boucle. Nous pouvons tracer la réalisation de ce modèle et son corrélogramme associé à l'aide de la fonction de mise en page: Nous allons maintenant essayer d'adapter un processus AR (p) aux données simulées que nous venons de générer, pour voir si nous pouvons récupérer les paramètres sous-jacents. Vous vous rappellerez peut-être que nous avons effectué une procédure similaire dans l'article sur le bruit blanc et les randonnées aléatoires. Comme il s'avère R fournit une commande utile ar pour s'adapter modèles autorégressifs. Nous pouvons utiliser cette méthode pour nous indiquer d'abord le meilleur ordre p du modèle (tel que déterminé par l'AIC ci-dessus) et nous fournir des estimations de paramètres pour l'alphai, que nous pouvons ensuite utiliser pour former des intervalles de confiance. Pour compléter, nous pouvons recréer la série x: Maintenant, nous utilisons la commande ar pour ajuster un modèle autorégressif à notre processus AR (1) simulé, en utilisant l'estimation du maximum de vraisemblance (MLE) comme procédure d'ajustement. Nous allons d'abord extraire l'ordre le mieux obtenu: La commande ar a déterminé avec succès que notre modèle temporel sous-jacent est un processus AR (1). Nous pouvons alors obtenir les estimations des paramètres alpha: La procédure MLE a produit une estimation, chapeau 0.523, qui est légèrement inférieure à la valeur vraie de alpha1 0.6. Enfin, nous pouvons utiliser l'erreur standard (avec la variance asymptotique) pour construire 95 intervalles de confiance autour du (des) paramètre (s) sous-jacent (s). Pour cela, il suffit de créer un vecteur c (-1.96, 1.96) et de le multiplier par l'erreur-type: Le paramètre vrai tombe dans l'intervalle de confiance 95, comme nous l'avons supposé, nous avons généré la réalisation à partir du modèle spécifiquement . Que diriez-vous si nous changeons l'alpha1 -0.6 Comme précédemment nous pouvons adapter un modèle AR (p) en utilisant ar: Encore une fois nous récupérons l'ordre correct du modèle, avec une très bonne estimation hat -0.597 d'alpha1-0.6. Nous voyons également que le paramètre vrai tombe à nouveau dans l'intervalle de confiance 95. Ajoutons un peu plus de complexité à nos processus autorégressifs en simulant un modèle d'ordre 2. En particulier, nous allons définir alpha10.666, mais aussi définir alpha2 -0.333. Heres le code complet pour simuler et tracer la réalisation, ainsi que le corrélogramme pour une telle série: Comme avant, nous pouvons voir que le corrélogramme diffère de façon significative de celui du bruit blanc, comme wed attendre. Il existe des pics statistiquement significatifs à k1, k3 et k4. Une fois de plus, allions utiliser la commande ar pour adapter un modèle AR (p) à notre réalisation AR (2) sous-jacente. La procédure est similaire à celle de l'ajustement AR (1): l'ordre correct a été récupéré et les estimations du paramètre hat 0.696 et hat -0.395 ne sont pas trop éloignées des vraies valeurs des paramètres alpha 10.666 et alpha2-0.333. Notez que nous recevons un message d'avertissement de convergence. Notez également que R utilise réellement la fonction arima0 pour calculer le modèle AR. Les modèles AR (p) sont tout simplement des modèles ARIMA (p, 0, 0), et donc un modèle AR est un cas particulier d'ARIMA sans composante de moyenne mobile (MA). Eh bien également utiliser la commande arima pour créer des intervalles de confiance autour de plusieurs paramètres, c'est pourquoi weve négligé de le faire ici. Now that weve created some simulated data it is time to apply the AR(p) models to financial asset time series. Données financières Amazon Inc. Commençons par obtenir le prix de l'action pour Amazon (AMZN) en utilisant quantmod comme dans le dernier article: La première tâche est de toujours tracer le prix pour une inspection visuelle brève. Dans ce cas, bien utiliser les prix de clôture quotidiens: Vous remarquerez que quantmod ajoute un formatage pour nous, à savoir la date, et un graphique un peu plus joli que les graphiques habituels R: Nous allons maintenant prendre les retours logarithmiques d'AMZN, puis le premier - ordre de la série afin de convertir la série de prix d'origine d'une série non stationnaire en une série (potentiellement) stationnaire. Cela nous permet de comparer les pommes aux pommes entre les actions, les indices ou tout autre actif, à utiliser dans les statistiques multivariées ultérieures, comme lors du calcul d'une matrice de covariance. If you would like a detailed explanation as to why log returns are preferable, take a look at this article over at Quantivity . Permet de créer une nouvelle série, amznrt. Pour tenir notre journal différencié retours: Encore une fois, nous pouvons tracer la série: À ce stade, nous voulons tracer le corrélogramme. Were looking to see if the differenced series looks like white noise. Si ce n'est pas le cas, il existe une corrélation sérielle inexpliquée, qui pourrait être expliquée par un modèle autorégressif. Nous remarquons un pic statistiquement significatif à k2. Il existe donc une possibilité raisonnable de corrélation série inexpliquée. Soyez conscient cependant que cela peut être dû à un biais d'échantillonnage. Ainsi, nous pouvons essayer d'adapter un modèle AR (p) à la série et de produire des intervalles de confiance pour les paramètres: L'ajustement du modèle autorégressif AR à la série de prix différentiels de premier ordre produit un modèle AR (2) avec un chapeau -0,0278 Et chapeau -0.0687. Ive produit également la variance aystoptotique de sorte que nous pouvons calculer des erreurs standard pour les paramètres et produire des intervalles de confiance. Nous voulons voir si le zéro fait partie de l'intervalle de confiance 95, comme s'il l'est, cela réduit notre confiance que nous avons un vrai processus AR (2) sous-jacent pour la série AMZN. Pour calculer les intervalles de confiance au niveau 95 pour chaque paramètre, nous utilisons les commandes suivantes. Nous prenons la racine carrée du premier élément de la matrice de variance asymptotique pour produire une erreur standard, puis créons des intervalles de confiance en les multipliant par -1.96 et 1.96 respectivement, pour le niveau 95: Notez que cela devient plus simple quand on utilise la fonction arima , Mais bien attendre la partie 2 avant de l'introduire correctement. Ainsi, nous pouvons voir que pour alpha1, zéro est contenu dans l'intervalle de confiance, tandis que pour alpha2, zéro n'est pas contenu dans l'intervalle de confiance. Par conséquent, nous devrions être très prudents en pensant que nous avons vraiment un modèle AR (2) génératif sous-jacent pour l'AMZN. En particulier, nous notons que le modèle autorégressif ne prend pas en compte le regroupement de la volatilité, ce qui conduit à regroupement de la corrélation sérielle dans les séries chronologiques financières. When we consider the ARCH and GARCH models in later articles, we will account for this. When we come to use the full arima function in the next article, we will make predictions of the daily log price series in order to allow us to create trading signals. SampP500 US Equity Index Along with individual stocks we can also consider the US Equity index, the SampP500. Appliquons toutes les commandes précédentes à cette série et produisons les parcelles comme précédemment: Nous pouvons tracer les prix: Comme avant, bien créer la différence de premier ordre des prix de clôture de log: Encore une fois, nous pouvons tracer la série: Il est clair À partir de ce graphique que la volatilité n'est pas stationnaire dans le temps. Ceci est également reflété dans l'intrigue du corrélogramme. Il existe de nombreux pics, dont k1 et k2, qui sont statistiquement significatifs au-delà d'un modèle de bruit blanc. En outre, nous constatons des processus à mémoire longue car il existe des pics statistiquement significatifs à k16, k18 et k21: En fin de compte, nous aurons besoin d'un modèle plus sophistiqué qu'un modèle autorégressif d'ordre p. Cependant, à ce stade, nous pouvons toujours essayer d'adapter un tel modèle. Voyons ce que nous obtenons si nous le faisons: L'utilisation de ar produit un modèle AR (22), c'est-à-dire un modèle avec 22 paramètres non nuls. Qu'est-ce que cela nous indique? Il est indicatif qu'il ya probablement beaucoup plus de complexité dans la corrélation sérielle que Un modèle linéaire simple des prix passés peut vraiment expliquer. Cependant, nous le savions déjà parce que nous pouvons voir qu'il existe une corrélation sérielle significative dans la volatilité. Par exemple, considérons la période très volatile autour de 2008. Cela motive le prochain ensemble de modèles, à savoir la moyenne mobile (q) et l'ARMA (p, q). Eh bien apprendre à propos de ces deux dans la partie 2 de cet article. Comme nous le mentionnons à plusieurs reprises, ces derniers nous mèneront finalement à la famille des modèles ARIMA et GARCH, qui fourniront tous deux un meilleur ajustement à la complexité de corrélation sérielle du Samp500. Cela nous permettra d'améliorer sensiblement nos prévisions et de produire finalement des stratégies plus rentables. Cliquez ci-dessous pour en savoir plus. L'information contenue sur ce site web est l'opinion des auteurs individuels basée sur leur observation personnelle, leur recherche et leurs années d'expérience. L'éditeur et ses auteurs ne sont pas des conseillers en placement, des avocats, des CPA ou d'autres professionnels des services financiers enregistrés et ne rendent pas de conseils juridiques, fiscaux, comptables, de placement ou autres services professionnels. L'information offerte par ce site Web est seulement l'éducation générale. Parce que chaque situation factuelle des individus est différente, le lecteur devrait chercher son conseiller personnel. Ni l'auteur ni l'éditeur n'assument aucune responsabilité ou responsabilité pour des erreurs ou omissions et n'a aucune responsabilité ni responsabilité envers une personne ou une entité à l'égard des dommages causés ou prétendument causés directement ou indirectement par les informations contenues sur ce site. À utiliser à vos risques et périls. En outre, ce site Web peut recevoir une compensation financière des sociétés mentionnées par la publicité, les programmes d'affiliation ou autrement. Les tarifs et offres des annonceurs affichés sur ce site changent fréquemment, parfois sans préavis. Alors que nous nous efforçons de maintenir des informations exactes et en temps opportun, les détails de l'offre peuvent être périmés. Visitors should thus verify the terms of any such offers prior to participating in them. The author and its publisher disclaim responsibility for updating information and disclaim responsibility for third-party content, products, and services including when accessed through hyperlinks andor advertisements on this site.


No comments:

Post a Comment