Friday 25 August 2017

Mover Média Iir Filtro


Este applet java é uma demonstração de filtros digitais. Você deve ouvir uma forma de onda de ruído quando o applet é iniciado. Se você receber uma mensagem Precisa de java 2 para o som, então você deve obter o plug-in Java. O applet inicia com um filtro passa-baixa. Ele mostra a resposta de freqüência do filtro, o espectro da forma de onda filtrada sendo reproduzida, a própria forma de onda e a resposta de impulso do filtro. Clique na curva de resposta para alterar a frequência de corte. O gráfico de resposta de freqüência mostra a resposta do filtro (mostrado verticalmente, em dB, com linhas em intervalos de 10 dB) em relação à freqüência (mostrada horizontalmente, com linhas verticais marcando oitavas). O gráfico do espectro mostra o espectro da saída de som. O menu pop-up de Entrada permite que você selecione uma forma de onda de entrada. As opções são: Noise Sine Wave - selecione a freqüência clicando no espectro. Sawtooth Wave Triangle Wave Onda quadrada Ruído periódico - selecione a freqüência clicando no espectro. Varrer - uma onda senoidal que varre o espectro de freqüência a uma taxa ajustável. Impulsos Vários arquivos mp3 (você pode adicionar o seu próprio, baixando o applet e depois editando o arquivo index. html) O menu pop-up Filtro permite que você selecione um filtro. Veja este site para obter detalhes técnicos sobre os tipos de filtro. As opções são: FIR Low-pass - filtra as altas freqüências (tudo abaixo da freqüência de corte, que é ajustável clicando no gráfico de resposta com o mouse). FIR High-pass - filtra as baixas frequências. FIR Band-pass - filtra tudo, exceto uma variedade de freqüências. Utilize os controles deslizantes de frequência central e largura de banda passadeira para ajustar o alcance. FIR Band-stop - filtra uma variedade de freqüências. Aqui estão alguns parâmetros ajustáveis ​​que afetam a qualidade dos filtros FIR: o número de pontos, que você pode ajustar com o controle deslizante Ordem (mais pontos é melhor) e a janela, que você seleciona com o menu pop-up Janela. Um filtro FIR é definido por sua resposta de impulso, que você pode ver perto da parte inferior da janela. Para visualizar a função da janela, selecione FIR Low-pass. Ajuste a freqüência de corte perto de zero e veja a resposta de impulso. FIR personalizado - desenhe no gráfico de resposta de freqüência para especificar seu próprio filtro. A resposta real, mostrada em vermelho, é afetada pelo controle deslizante Ordem e Janela popup. Nenhum - sem filtragem Butterworth Low-pass - um filtro plano que filtra as altas freqüências Butterworth High-pass - um filtro plano que filtra as baixas freqüências Butterworth Band-pass - um filtro plano que filtra as freqüências fora de uma certa banda Butterworth Band - Stop - um filtro plano que filtra as frequências dentro de uma certa banda Chebyshev Low-pass - um filtro de passagem baixa com uma quantidade ajustável de ondulação na banda de passagem Chebyshev High-pass, Band-pass, Band-stop Inv Cheby Low-pass - Chebyshev inverso (também conhecido como Chebyshev tipo II), um filtro de passagem baixa com uma banda de passagem plana, mas uma quantidade ajustável de ondulação na faixa de batente Inv Cheby Passagem de alto, Passe de banda, Baixa-Elíptica Baixa passagem - ( Também conhecido como Cauer), um filtro passa-baixa com uma quantidade ajustável de ondulação na banda passante e na banda de parada. Ajustar a largura da faixa de transição alterará a atenuação da banda de interrupção. Elliptic High-pass, Band-pass, Band-stop Comb () - este filtro (usado no ruído) parece que alguém sopra em um tubo. Peito (-) - este é um tubo com uma extremidade coberta. Atraso - um filtro de eco (o mesmo que um filtro de pente, mas com atrasos mais longos) Filtro de seqüência de caracteres - quando o popup de Entrada está configurado para Impulsos, isso soa como uma seqüência de caracteres sendo arrancada. Reson w Zeros - um filtro de ressonância com zeros adicionados a 0 e metade da taxa de amostragem Notch - filtra uma faixa estreita de freqüências Moving Average - uma tentativa FIR simples em um filtro passa-baixa. Este filtro (quando usado no ruído) me lembra um Atari 2600. Tripass Allpass - passa todas as freqüências de forma igual, mas com atraso de fase diferente. Use o item de Resposta de Fase no menu Exibir para visualizar a resposta de fase. Para baixas frequências, este filtro age como um atraso fraccional (um atraso menor que uma amostra). Gaussian - a resposta de impulso e a resposta de freqüência são ambos aleatoriamente em forma gaussiana IIR personalizado - arraste os pólos e os zeros ao redor para mudar o filtro. O popup da taxa de amostragem permite visualizar ou alterar a taxa de amostragem. Você não pode alterar a taxa se a entrada for um MP3. O menu Exibir permite ativar ou desativar as várias visualizações. O item Escala de freqüência de registro que mostra a resposta de freqüência usando um gráfico logarítmico em vez de linear. O item Mostrar toda a forma de onda irá compactar os segmentos da forma de onda horizontalmente para que cada um se encaixa na janela dessa maneira, toda a forma de onda será exibida, mas a janela geralmente não será ampla o suficiente para mostrar cada amostra separadamente. O item Ferris Plot exibirá um Plot Ferris da função de transferência. Ao exibir a resposta de freqüência, o applet mostra apenas a porção do espectro de 0 para a freqüência de Nyquist (pi). O resto da resposta até 2pi é apenas uma imagem espelhada disso, e então a resposta é repetida a cada 2pi. Por exemplo, aqui está uma resposta de freqüência como mostrado no applet (até pi): Aqui está a resposta até 4pi: bons livros sobre filtros digitais: Steiglitz (excelente introdução ao DSP tem informações sobre filtros de pente, resons, plucked-string ) Smith (descarregável) Winder MitraDSP geração de Pink (1f) Ruído Olhando como gerar ruído rosa por dois métodos: 1 - Um filtro de coloração rosa para o ruído branco. 2 - O algoritmo Voss-McCartney de adicionar múltiplas fontes de ruído branco nas oitavas inferior e inferior. (2006-03-27 Por favor veja também algoritmo de Larry Trammells Stochastic Voss-McCartney.) Palavras-chave: ruído rosa, 1f ruído, 1fnoise, ruído de cintilação, geração de números aleatórios, DSP. 1999 18 de outubro Minor updates: 2003 10 de julho: opcode pinkish em Csound. 2005 19 de setembro: nova página nos geradores de números pseudo-aleatórios Park-Miller-Carta ..rand31 2006 27 de março: Link para Larry Trammells (RidgeRats) algoritmo Stochastic Voss-McCartney. 2007 22 de janeiro: atualizou o link para material Larrys. 2010 12 de março: Adicionado link para dsprelated. 2011 20 de março: link adicionado ao papel de Henning Thielemanns Robin Whittle rwfirstpr. au A maioria deste material é escrito por outras pessoas, especialmente Allan Herriman, James McCartney, Phil Burk e Paul Kellet, todos da lista de discussão music-dsp. Os endereços de e-mail aqui têm xxxx. Adicionado para confundir robôs SPAM. Enquanto a maioria ou todo o trabalho apresentado aqui foi colocado no domínio público por seus criadores, não espere essa página ou partes dela sem pedir minha permissão. O perigo é que múltiplas cópias ou cópias incompletas estariam espalhadas pela Web. Voltar ao diretório DSP Voltar ao principal site dos Primeiros Princípios, incluindo o material em Csound. Boas notícias para Csounders Standard Csound (após a versão 4.07) tem um opcode pinkish que gera ruído rosa ou filtra o ruído branco externo para torná-lo rosa. Isto foi escrito por Phil Burk e John ffitch, e está documentado aqui: isso foi adicionado em maio de 2000, mas eu só percebi isso em 10 de julho de 2003. Mais informações sobre a linguagem Csound music synthensis estão em csounds. Gtgtgt Introdução gtgtgt Pseudo números aleatórios e ruído branco gtgtgt As características do ruído rosa gtgtgt Os usos do ruído rosa gtgtgt Filtragem do ruído branco para torná-lo rosa gtgtgt Algoritmo Voss Algoritmo Voss-McCartney Análise Allan Herrimans e tratado ilustrado no Voss - Algoritmo de algoritmo de McCartney Reduzindo a ondulação nos algoritmos Gtgtgt de resposta de freqüência Referências e links gtgtgt O próximo gtgtgt Histórico de atualização Um gráfico de Allan Herrimans ilustrou o tratado sobre o somatório de fontes de ruído: allan-2spectrum2.html. Introdução Um fluxo de números aleatórios constitui ruído branco se for ouvido como um sinal de áudio. O branco refere-se à distribuição uniforme de comprimentos de onda na luz branca, com um significado particular no sentido de áudio ou DSP: que a potência do ruído é distribuída uniformemente em todas as freqüências, entre 0 e alguma freqüência máxima que normalmente é metade da taxa de amostragem . Por exemplo, o ruído branco com uma taxa de amostragem de 44.100 Hz terá uma potência entre 100 e 600 Hz entre 20.000 e 20.500 Hz. Para nossos ouvidos, isso parece muito brilhante e áspero. Um tratado de 1996 de Joseph S. Wisniewski sobre as cores do ruído, incluindo branco, rosa, laranja, verde. Está em: msaxoncolors. htm. (Também neste site, descrição de Martin Saxons dos vários esquemas de ponderação para medir o ruído: msaxonnoise. htm.) No mundo natural, existem muitos processos físicos que produzem ruído com o que é conhecido como uma distribuição rosa de energia. O ruído rosa tem uma distribuição uniforme de energia se a freqüência estiver mapeada em uma escala logarítmica. Um exemplo direto seria que há tanto poder de ruído na oitava de 200 a 400 Hz, como há na oitava de 2.000 a 4.000 Hz. Consequentemente, parece que nossos ouvidos nos dizem que esse é um ruído mesmo natural. Genética estatística O Prof. Wentian Li mantém uma formidável bibliografia sobre 1f ruído em: linkage. rockefeller. eduwli1fnoise No entanto, antes de eu criar esta página, não mencionava nada a ver com a geração de ruído 1f com técnicas de processamento de sinal digital. O objetivo desta página é coletar informações sobre a geração de ruído e especialmente o ruído rosa digitalmente. O meu principal uso para o ruído rosa DSP é a síntese de música de software, tanto como sinal de áudio como como sinal de controle, que poderia ter freqüências tão baixas como 0,001 Hz. Esperemos que este material seja de valor para outros campos também. (Para obter informações gerais de DSP, consulte as Perguntas frequentes sobre o grupo de notícias Usenet comp. dsp e as FAQs mencionadas: bdtifaq.) Números pseudo-aleatórios e ruído branco Em 1999, quando escrevi a maior parte desta página, usei um Park Miller PRNG, como Eu escrevi em: .... csound. O que eu usei foi um gerador congruente linear Park-Miller de 31 bits de Ray Gardner: c. snippets. orgsniplister. phpfnamergrand. c. Atualização de setembro de 2005 em setembro: veja minha nova página nos geradores de números pseudo-aleatórios Park-Miller-Carta ... rand31 Um fluxo de números aleatórios não correlacionados constitui ruído branco. Por exemplo, uma fonte de ruído uniforme com um alcance de -10 a 10 será feita de números aleatórios sem correlação entre um e o próximo, e onde há uma chance de cada amostra ser, por exemplo, em -10 a - 9, o intervalo de 2 a 3 ou qualquer outro intervalo que seja um 20º do intervalo total de pico a pico. As características do ruído rosa. Para os fins desta discussão, o poder significa a potência ou energia média contida em um sinal ao longo de um longo período de tempo. O ruído branco tem a mesma distribuição de energia para todas as freqüências, portanto existe a mesma quantidade de energia entre 0 e 500 Hz, 500 e 1.000 Hz ou 20.000 e 20.500 Hz. O ruído rosa tem a mesma distribuição de potência para cada oitava, de modo que a potência entre 0,5 Hz e 1 Hz é a mesma que entre 5 000 Hz e 10 000 Hz. Uma vez que o poder é proporcional à amplitude ao quadrado, a energia por Hz diminuirá em freqüências mais altas a uma taxa de cerca de -3dB por oitava. Para ser absolutamente preciso, o rolloff deve ser -10dBdecade, que é cerca de 3.0102999 dBoctave. O uso do ruído rosa O uso mais óbvio do ruído rosa é como um sinal de áudio, para ser usado diretamente, para ser filtrado ou para ser usado para modular algo. Também estou interessado em barulho rosa abaixo de 1 Hz como sinal de controle para simular aspectos flutuantes aleatoriamente da música. Por exemplo, talvez eu queira algum aspecto de uma peça flutuar numa base minuto a minuto, então preciso de números aleatórios com energia a 0,01 Hz e abaixo. O meu interesse particular é poder esculpir tais sinais de controle a partir de uma fonte de ruído rosa, puramente pelo uso de filtros. A idéia seria que eu poderia ter um filtro de passagem de banda com uma certa largura de banda em oitavas (ou frações de uma oitava) e que eu poderia escolher configurar sua freqüência como eu gostava, sem afetar o nível RMS de sua saída. Sem uma fonte de ruído rosa, por exemplo, usando uma fonte de ruído branco, torna-se muito difícil ajustar a peça alterando a freqüência do filtro de escultura, porque isso também afeta o nível de sinal resultante, idealmente, para fins de controle (por exemplo, barulho de taxa k Em Csound) Gostaria de poder especificar o ruído com: 1 - Uma certa frequência de limite inferior. Por exemplo. 0,1 Hz. Abaixo disso, haveria pouca energia, ou a energia permaneceria plana por Hz, em vez de aumentar por Hz para dar a característica 3dBoctave do ruído rosa. Então, seria branco abaixo de 0.1 Hz. 2 - Um certo nível RMS por oitava. Por exemplo, 5,0 RMS por oitava. Portanto, um filtro perfeito que excluiu tudo, exceto uma oitava, não importa qual oitava acima da freqüência de limite inferior, seria uma média de um nível de RMS de 5,0. O ruído sendo ruído, levaria muito tempo a média das flutuações para medir isso com precisão. 3 - Também pode ser desejável especificar uma freqüência de delimitação superior, para reduzir a carga computacional onde não foram necessárias altas frequências. No futuro, pretendo escrever um gerador de unidade Csound Quasimodo para uma saída de taxa k, de qualidade industrial, em vez de grau analítico. O ácido nítrico de grau industrial ou técnico especifica que é de uma força mínima e aproximada específica. O grau analítico especifica exatamente sua força e a tolerância para essa especificação, bem como observando os níveis máximos permitidos dos contaminantes mais importantes. Tais parâmetros seriam os que eu classificamos: configurado no início da instancia do ugens, não variável ao longo do tempo. Assim, especificar um limite de frequência de limite inferior da qualidade rosa do ruído resultaria em que o limite fosse configurado para a oitava mais próxima, não com precisão. É possível conceber um gerador de ruído cor-de-rosa com controle de frequência k de nível, frequências de limite superior e inferior e as encostas desses limites. Desta forma, um controle preciso sobre a distribuição da freqüência de ruído pode ser alcançado sem alterar o nível RMS do ruído. Deixarei essa ideia por agora, mas seria poderoso. Filtragem do ruído branco para torná-lo cor-de-rosa. Os filtros DSP mais simples são -6dBoctave. No entanto, um DSP ou filtro eletrônico passa baixo eletrônico com uma resposta -3dBoctave é (ou melhor, foi) uma besta rara, de fato. Aqui estão três filtros que fazem o trabalho. (Paul Kellet contribuiu com dois filtros anteriores para aqueles listados aqui.) Esse filtro seria alimentado com ruído branco para produzir rosa, dentro de certos limites de precisão. Abaixo dos algoritmos é Allan Herrimans análise gráfica da resposta desses três filtros. A primeira descrição que conheço é de Robert Bristow-Johnson ltpbjrbjxxxx. viconetgt postar para a lista Music-DSP em 30 de junho de 1998: (Este é rbj (Vermelho) Robert Bristow-Johnsons três pólos e três zero filtro.) Gt Orfanidis também Menciona uma maneira inteligente de obter razoavelmente bom 1f gt noise: junte n randhs, onde cada randh está executando uma oitava gt mais lenta que a anterior (uma): gt gt Esta é uma referência ao livro de Sophocles Orfanidis Introdução ao gt Processamento de sinal: gt Gt prenhallbooksesm0132091720.html gt gt Isto parece uma boa maneira de fazê-lo. Outro método que Orfanidis menciona veio de uma postagem comp. dsp minha. É apenas um simples filtro de coloração a ser aplicado ao ruído branco. Uma vez que o rolloff é -3 dBoctave, -6 dBoctave (pólo de 1ª ordem) é muito íngreme e 0 dBoctave é muito raso. Uma aproximação equiripple ao filtro de coloração ideal pode ser realizada alternando pólos reais com zeros reais. Uma solução simples de 3ª ordem que eu obtive é: a resposta segue a curva de dBoctave ideal -3 dentro de ou - 0,3 dB em uma faixa de 10 oitavas de 0.0009nyquist a 0.9nyquist. Provavelmente se eu fosse fazer isso de novo, id faz 5 pólos e 4 zeros. R b-j pbjrbjxxxx. viconet a. k.a. robertxxxx. audioheads a. k.a. robertxxxx. wavemechanics Não ceda ao lado escuro. Boicotear Intel e Microsoft. Do arquivo de código Music-DSP: music. columbia. educmcmusic-dsp (Foi em shoko. calarts. edu glmrboymusicdspdspsource. html) Paul Kellet ltpaul. kellettxxxx. maxim. abel. co. ukgt abel. co. uk maxim foi atualizado em Várias ocasiões e agora (1999, 17 de outubro) contém duas implementações, localizadas aqui: shoko. calarts. edu glmrboymusicdspsourcecodepink. txt, que é preciso dentro de -0.05dB acima de 9.2Hz (taxa de amostragem 44100Hz). Atualização 2011-03-20: os arquivos de música-DSP estão em: musicdsp. orgshowmany. php contém vários itens relacionados ao ruído rosa, mas não tenho certeza de qual destes, se houver, o pink. txt acima mencionado. Em 17 de outubro de 1999, Paul apresentou um refinamento adicional: filtros de nível de instrumentação e economia. Esta é uma aproximação a um filtro de 10dddecade usando uma soma ponderada de filtros de primeira ordem. É preciso dentro de -0.05dB acima de 9.2Hz (taxa de amostragem 44100Hz). O ganho de unidade é no Nyquist, mas pode ser ajustado escalando os números no final de cada linha. (Este é o método refinado pk3 (preto) Paul Kellets na análise Allans.) B0 0,99886 b0 branco 0,0555179 b1 0,99332 b1 branco 0,0750759 b2 0,96900 b2 branco 0,1538520 b3 0,86650 b3 branco 0,3104856 b4 0,55000 b4 branco 0,5329522 b5 -0,7616 b5 branco 0,0168980 rosa b0 B1 b2 b3 b4 b5 b6 branco 0,5362 b6 branco 0.115926 Uma versão econômica com precisão de -0.5dB também está disponível. (Este é o método de economia Paul Kellets do pke (azul). B0 0,99765 b0 branco 0,0990460 b1 0,96300 b1 branco 0,2965164 b2 0,57000 b2 branco 1,0526913 tmp b0 b1 b2 branco 0.1848 Aqui está a análise gráfica Allan Herrimans da resposta desses três filtros. Magnitude Squared Response of Three Pinking Filters Allan Herriman 18 de outubro de 1999 rbj (Vermelho) Robert Bristow-Johnsons três pólos e três zero filtro pk3 (Preto) Paul Kellets método refinado pke (Azul) Paul Kellets método econômico Flatness de Três Filtros Pinking A escala vertical é 0.2dBdivisão. Perguntei a Paul sobre o algoritmo que ele usou para elaborar esses filtros altamente ajustados. Ele respondeu com o seguinte texto e imagem. Ele volta ao roll-off de um filtro passa-baixa de primeira ordem sendo muito íngreme em -6dBoctave. O único que eu poderia pensar com um roll-off mais suave foi a transição de 0dBoct para -6dBoctave no joelho de um tal filtro. Ao posicionar o suficiente desses joelhos em uma escada, uma boa inclinação -3dBoct pode ser feita. Um ligeiro aumento no nível ocorre perto de Nyquist, mas isso pode ser contrariado pela combinação de um pouco de filtro não filtrado, de passagem de alta, ou de sinal atrasado com a saída. Cada versão do filtro foi projetada manualmente usando um programa simples do Visual Basic para traçar a resposta ao impulso (com uma ênfase 3DBoct) à medida que os coeficientes foram ajustados. A imagem em anexo mostra como a versão econômica é construída. Fico feliz em ver que esses filtros altamente ajustados são cuidadosamente trabalhados manualmente. Como parte de uma discussão sobre o achatamento da resposta de freqüência dos algoritmos de Voss, Allan Herriman contribuiu com o seguinte a favorecer a resposta da abordagem de ruído branco filtrada. (Isto foi antes da instrumentação de Paul Kellets e filtros de economia de cor-de-rosa de 17 de outubro de 1999.) Esse truque também poderia ser usado para reduzir a ondulação do método do ruído branco filtrado. No entanto, neste caso, acho que é muito mais eficiente (e mais fácil) apenas adicionar mais pólos e zeros ao filtro. Os filtros terão todos os pólos e zeros reais (ou seja, seções de 1ª ordem). Os pólos e os zeros alternarão, e haverá uma relação constante entre as freqüências. Essa relação determina a ondulação. Por exemplo. Se a proporção for 2 e começarmos com um pólo a 1Hz, obtemos o seguinte: fazer algumas simulações no PSpice () me deu os seguintes valores de ondulação aproximados: se houver apenas um pequeno número de pólos e zeros (por exemplo, rb-js Postagem tinha três de cada), então o resultado ideal não terá um espaçamento logarítmico exato de freqüências. Eu acho que é possível usar algum método de otimização para obter o melhor pólo e zero locais para uma determinada quantidade de ondulação, mas não tentei isso. Os locais de pólo e zero também podem ser deformados para levar em consideração os efeitos de amostragem. Sugiro ter mais um pólo do que zero, de modo que o ruído acima da gama de interesse seja marrom e o ruído abaixo da faixa de interesse é branco. Isso provavelmente não importaria. O algoritmo Voss Em 30 de junho de 1998, Thomas Hudson me enviou esse código C que implementa o algoritmo Voss, que cria barulho rosa, adicionando uma série de fontes de ruído branco em oitavas sucessivamente mais baixas: caso você tenha dificuldade em encontrar o artigo de M. Gardner, Eu tenho uma classe C que implementa o algoritmo Vosss: inclua ltiostreamgt include ltstdlib. hgt Eu respondi: Obrigado por este código. Isso confirma minha compreensão da amostra reta e segure as fontes de ruído branco da oitava inferior, e até a ponderação de todas elas. O único aspecto é que a fonte de ruído em mudança mais rápida neste código muda a cada segunda amostra. Deve também haver um ruído branco em cada amostra. Em que caso, seria melhor fazer os valores aleatórios divididos em 6 em vez de 5 e definir soma para rans () (range6) em vez de 0. Thomas respondeu: Você está certo. Na verdade, talvez eu tenha modificado isso um pouco do artigo original. Ou pode ser um erro. Eu acho que estava experimentando w várias gamas e números de valores brancos. Quando fiz isso, estava usando o número rosa resultante como um valor de pesquisa em uma tabela de notas. Eu até posso ter uma versão em algum lugar que tivesse um parâmetro de granularidade, permitindo não apenas especificar o intervalo, mas o número de valores de branco. Eu tenho significado traçar o efeito de diferentes números de valores brancos. O algoritmo de Voss-McCartney No final de agosto e início de setembro, o debate sobre o ruído 1f criou a cabeça de forma mais construtiva na lista de discussão Music-DSP: shoko. calarts. edu Com base nessa discussão e comentários e contribuições dos participantes, aqui São os elementos-chave do algoritmo Voss McCartney e sua implementação. James McCartney ltasynth xxxx. Iogt 2 de setembro de 1999 21:00:30 -0600 Às 3:52 PM -0600 9299, Stephan M. Sprenger escreveu: gt gt Eu ouvi falar de uma proposta para fazer barulho rosa, adicionando várias fontes de gt gt gt. (Eu não tentei ou analisei isso mesmo, então não posso dizer se é bom.) Gt gt gt Allan, gt gt Este é o algoritmo que eu conheci como método Voss na minha postagem anterior do gt. É descrito em M. Gardner, White e Brown Music, Fractal gt Curves and One-Over-f Fluctuations, Sci. Amer. 16 (1978) p.288 gt de acordo com Orfanidis que o menciona em Introdução ao Processo de Sinal gt. Ele também dá uma implementação disso, mas não tentei fazê-lo ainda, então eu não posso realmente comentar. Eu postei uma melhoria nesse algoritmo por um tempo atrás. Aqui está novamente: Heres como melhorar o gerador de ruído rosa Gardner. Gardner acrescenta vários geradores de números aleatórios uniformes que são avaliados em intervalos de tempo de oitava. O padrão é o seguinte: 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 x x x x x x Agora o problema com o acima é que, em algumas amostras, você tem que adicionar valores muito mais aleatórios do que outros. Isso também pode causar grandes descontinuidades na onda quando muitos dos valores mudam ao mesmo tempo. Ao reorganizar a ordem em que os geradores aleatórios mudam a carga pode ser feita mesmo, a operação pode ser tornada mais eficiente e o desvio de uma amostra para outra é limitado por um valor constante de cada amostra. Seu padrão, uma estrutura de árvore: somente um dos geradores muda cada amostra. Isso torna a carga constante. Isso também significa que você pode atualizar a soma subtraindo o valor anterior de um gerador e adicionando o novo valor, em vez de somá-los todos juntos. Você pode determinar qual número aleatório precisa ser alterado em cada amostra incrementando um contador e contando os zeros à direita na palavra. O número de zero zero é o índice do número aleatório a ser alterado. O número de zeros de fuga pode ser determinado muito rapidamente em uma máquina com uma instrução de referência de zero. Resto do exercício deixado para o leitor. Os padrões acima mostram que o tempo se move horizontalmente para a direita e cada linha é um número aleatório ou, em vez disso, uma fonte de ruído branco amostral de onda quadrada. Mais tarde, James esclareceu isso, observando que a amostra também continha uma amostra de ruído branco: gt O topo do espectro não era tão bom. A cascata de formas de pecado (x) x gt que eu prevei em minha outra postagem era bastante óbvia. Gt Ripple era apenas cerca de 2dB até Fs8 e 4dB até Fs5. A resposta gt foi de cerca de 5dB para baixo em Fs4 (um dos sinais (x) x nulos), e havia gt um nulo profundo em Fs2. Gt (Estes números são um pouco difíceis. Mais uma média teria ajudado.) Você pode melhorar a oitava superior um pouco, adicionando um gerador de ruído branco com a mesma amplitude que os outros. O que preenche o diagrama da seguinte maneira: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 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 x x x Ainda será bumpy lá em cima, mas os nulos não serão tão profundos. Aqui está o meu diagrama ASCII das ondas que eu acho que os últimos representantes do diagrama de James: as amostras de saída estão na linha superior e são a soma de todas as outras linhas naquele momento. A linha -1 é o ruído branco adicionado a cada amostra de saída. As fileiras 0 a 4 são as linhas de ruído branco amostrado que são todos misturados entre si. Allan postou uma explicação gráfica ASCII dos espectros de freqüência das várias fontes de ruído e como elas se juntam a outras. Veja allan-2spectrum2.html para uma análise teórica e gráfica mais precisa. Allan Herriman Sáb, 04 de setembro de 1999 05:18:24 1000 As estatísticas dos números aleatórios são idênticas. No entanto, cada linha representa uma sequência que está sendo exibida em uma taxa diferente. Outra maneira de ver isso é que existe uma fonte de ruído branco verdadeira (largura de banda infinita), com uma amostra e espera diferente para cada linha. A amostra e a retenção (ou a retenção de ordem zero) tem uma resposta de frequência de pecado (x) x. (Penso que devemos pensar em termos de poder, então a resposta é ((sin (x) x) 2)). Como cada linha amostras em uma taxa diferente, sua resposta de freqüência será diferente. (Desculpe pela arte ASCII.) Confie em mim, isso funciona. Acabei de passar uma noite inteira testando. Sim eu conheço. Eu preciso ter uma vida: (Phil Burk postou algum código, o que aparentemente era semelhante ao que Allan ia publicar. Esta é uma implantação de números inteiros, e ao invés de adicionar todas as linhas para cada amostra, quando uma linha muda, ela subtrai O valor anterior das linhas do total em execução e adiciona o novo valor da linha (um número aleatório). Existe um sinal de ruído branco adicionado a este total em execução para produzir o valor de saída como sugeri acima, o equivalente a uma Linha -1 que muda Cada amostra. A versão final do código de Phil Burks está aqui: veja também o código do loop interno abaixo de James McCartney. Em seguida, houve um pouco de discussão sobre como codificar a seleção da linha a ser atualizada. O código Phils usa um turno E o loop de teste para contar o número final de zeros, que então seleciona a linha para atualizar. A CPU do Power PC tem uma instrução para isso, e também aparentemente o Pentium. Tudo isso está no arquivo da lista no início de setembro de 1999 e eu Não o reproduziremos aqui. Havia Então, discussão de quando nenhuma linha (linhas 0 a 4 no meu diagrama acima) mudaria, em ocasiões infreqüentes. James McCartney respondeu que a amostra ocasional não alterada não é um problema. Eu concordo, especialmente porque estamos adicionando ruído branco (linha -1 no meu diagrama) em cada amostra. Ele também comentou estratégias de codificação para otimizar a velocidade ao procurar o estado 0 de um contador em um loop. Eu realmente não segui isso. James McCartney Sun, 5 Set 1999 16:18:52 -0600 Às 12:34 PM -0600 9599, Phil Burk escreveu: gt James McCartney escreveu: gt gt gt gt Às 10:39 AM -0600 9499, Phil Burk escreveu: gt Gt gt Apenas para testar a minha compreensão, coloquei uma implementação Gt gt gt gt do algoritmo de ruído rosa que estamos discutindo. Gt gt gt Algo que não era óbvio para mim no início, era que quando o gt gt gt é zero, não mudo nenhuma linha. Gt gt gt gt Uma linha deve mudar cada amostra. Gt gt Não tenho certeza de que concordo com isso. O diagrama de árvore que você mostrou tinha um número de colunas gt, 2N-1. Acho que a coluna ausente representa uma amostra gt quando nenhuma linha muda. Caso contrário, uma das linhas muda uma vez gt frequentemente e não em uma freqüência de oitava. Realmente não importa. Se você tiver oitavas suficientes, o contador será zero apenas com pouca frequência. Observe que, com este método, o número de oitavas que você usa não tem efeito no custo computacional. Se você estiver usando 16 oitavas, então você ganha um pouco mais de energia em 0,67 Hz Fs44100. Se você estiver usando 8 oitavas, então será em 172Hz, mas é bastante insignificante. É melhor deixar isso acontecer do que verificar um zero sempre ao longo do loop. O que traz outro tópico. Em um monte de código DSP eu vejo as pessoas fazendo isso: Essa é uma maneira muito cara de fazê-lo, porque você verifica o contador todas as vezes, mesmo que a maioria das vezes no loop a prova falhe. Como você conhece o valor do contador, você pode prever quando ele será esgotado. Portanto, é muito melhor fazer o seguinte: Isso elimina todos os testes condicionais não necessários, acelerando assim o loop interno. James McCartney postou seu código de loop interno: James McCartney Seg, 6 de setembro de 1999 12:51:50 -0600 Às 10:14 AM -0600 9699, Phil Burk escreveu: gt James McCartney escreveu: gt gt gt gt às 18:22 - 0600 9599, Phil Burk escreveu: gt gt gt James McCartney escreveu: gt gt gt gt gt Infelizmente, uma vez que não escrevo código puro do Macintosh, não posso confiar na gt gt gt a snazzy instrução PPC para contar os zeros avançados. Então, estou usando um gt gt gt loop de alto nível ineficiente para contar zeros à direita. Este loop falha gt gt gt quando o contador é zero, então eu tenho que verificar o zero de qualquer maneira. Gt gt gt gt OU o contador com 0xFFFF0000. Então você terá 16 oitavas gt gt e seu loop nunca falhará. Gt gt Talvez o meu chá não tenha sido chutado porque ainda não entendo. Suponha ter gt 16 oitavas, indexadas de 0 a 15. ORing com 0xFFFF0000 significa que às vezes eu vou ter 16 zeros à direita. Então, eu ainda não tenho que verificar esse caso gt para evitar a sobre-indexação da minha matriz. Eu também poderia verificar para zero antes de gt entrar no loop. Então, OU com 0xFFFF8000 gt Estou inclinado a ficar com o meu código original, pois é matematicamente bom, portátil e aceitavelmente rápido. O ramo (cntr0) só será gt tomado uma vez a cada 2N vezes. As outras vezes só custa um ramo de instruções de um gt não tomado porque o teste segue a geração de gt o índice e os códigos de condição já estão definidos. Na verdade, acho que, a menos que você use uma instrução para obter os zeroes de trânsito, que não há nenhuma vantagem para o meu algoritmo. O objetivo é que, ao aproveitar essa instrução, você obtém uma grande velocidade sobre o ruído de filtragem ou o algoritmo VossGardner normal. Eu acho que a maioria dos processadores tem essas instruções. Não vejo nenhum motivo que você não consiga em seu código. Aqui está a minha própria implementação de loop interno: dados longos não assinados, contador, prévio, novo, semente, total, ifval, k flutuam para (i0 iltnsmps i) k CTZ (contador) contagem zero zero kk amp 15 obtenha o valor anterior desta oitava Prevrand dicek gerar uma nova semente de valor aleatório 1664525 semente 1013904223 mudança para mover-se para o campo de bits da mantisa dividido por 16 novas fontes de gtgt 13 atualizar o total total (newrand - prevrand) gerar um novo valor aleatório para a semente de oitava superior 1664525 semente 1013904223 mudança para se mover para a mantisa Bitfield dividido por 16 newrand seed gtgt 13, existe uma chance teórica de que o total de newrand possa transbordar o bitfield da mantisa, mas é extremamente improvável devido ao total de ser um valor distribuído gaussiano. Converte para o valor de ponto flutuante de 2.0 para 4.0, mascando ifval (total newrand) 0x40000000 subtrai 3 para entrar no intervalo de -1 a 1 e saída (((flutuante) ampifval) - 3.0f) Análise de Allan Herrimans e trabalho ilustrado sobre o Algoritmo Voss-McCartney Allan me enviou dois documentos analisando a abordagem de Voss para criar ruído rosa. Também observamos aqui uma idéia minha para fazer com que a distribuição de energia do algoritmo se aproxime mais do ideal. A primeira foi uma planilha de Excel de três páginas que mostra a média de 1024 FFTs de ruído, cada uma delas 524,288 pontos. Esse arquivo como um arquivo. zip de 351k está disponível aqui: allan-1graph. zip. Um dos seus gráficos é mostrado no final desta página. As notas de Allans neste arquivo de planilha são: allan-1graph-zip. readme. txt. O segundo foi um arquivo do Word que analisa teoricamente como as múltiplas fontes de ruído se somam. Eu converti isso em HTML (com o Word 97), para que você possa ler o documento extensivamente ilustrado de Allans aqui allan-2spectrum2.html Um gráfico dele é mostrado no início desta página. Observe que o que Allan refere como linha 0 para o ruído branco em cada amostra é o que eu chamo de linha -1 no meu diagrama ASCII acima. Certifique-se de ler o tratado acima. Allan também contribuiu com o seguinte material sobre se o ruído rosa está parado ou não. Um dia espero poder entender o DSP a esse nível. Por enquanto, reproduz o que escreveu textualmente. Eu acho que para manter os acadêmicos felizes, precisamos de uma declaração em algum lugar que o ruído rosa verdadeiro (de banda larga) não é estacionário. Uma prova disso foi dada em comp. dsp há um tempo atrás. (O lançamento de Jeff Schencks é arquivado aqui como: allan-1stationary. html.) O problema decorre de ter um poder constante por oitava em um número infinito de oitavas. Uma das implicações é que não podemos fazer um verdadeiro ruído rosa, ao filtrar o ruído branco. OTOH, se estamos apenas interessados ​​em precisão até alguma freqüência de corte mais baixa, então o ruído é estacionário, e podemos gerá-lo através da filtragem de ruído branco. Isso geralmente será o caso para aplicativos de áudio. Note-se que o algoritmo Voss é bastante feliz em somar um número infinito de oitavas com apenas dois números aleatórios por amostra (você precisa de memória infinita para isso) e, portanto, não está sujeito ao problema de corte de baixa freqüência. Perguntei-lhe o que não era imobilizado, e ele respondeu: do SO:. Essas funções de distribuição de probabilidade podem ser uma função do índice de tempo n. No caso em que todas as funções de probabilidade são independentes de uma mudança de tempo de origem, o processo aleatório deve ser estacionário. Em outras palavras, as estatísticas do sinal não mudam com o tempo. Acontece que os processos aleatórios com PSD proporcionais a 1fa são estacionários para um lt 1. O ruído rosa representa o 1 caso. O ruído Brown (ou vermelho) representa o caso 2 e também não está estacionário. Allan está citando uma das Bíblias do DSP como mencionado no site de perguntas frequentes de comp. dsp (veja a seção de referências abaixo): AV Oppenheim e RW Schafer, Processamento de Sinal Digital, Prentice-Hall, Inc. Englewood Cliffs, NJ 1975. ISBN 0-13-214635-5. Reduzir a ondulação na resposta de freqüência de algoritmos Existe alguma ondulação na resposta de freqüência do algoritmo Voss como mostrado nos gráficos na parte superior e inferior desta página. Essas reduções na ondulação da resposta de freqüência dos algoritmos não seriam necessárias para minhas aplicações musicais, mas elas podem ser úteis para gerar ruído rosa de qualidade analítica para fins científicos. Allan sugere formas de reduzir isso. A ondulação no gerador de Voss pode ser reduzida para metade deste nível (até cerca de 12 dB), somando as saídas de dois geradores de ruído rosa, um funcionando em 1sqrt (2) (cerca de 70) da taxa de amostragem do outro. Taxas de amostra ímpares como esta podem ser um pouco difíceis de implementar, e só valerão a pena para aplicações como instrumentos de teste (onde você realmente se preocupa com planicidade), etc. Sua nota sobre o uso de técnicas similares para reduzir a ondulação na abordagem de ruído branco filtrada é Listados acima na seção de filtragem. Eu tenho outra idéia para reduzir a ondulação na resposta: a freqüência modula cada linha para octavas inferiores em uma base aleatória. Como escrevi para Allan: Para implementar a modulação de freqüência para baixo aleatória para cada linha, para cada vez que a linha deve ser atualizada com Um novo número aleatório, use uma função aleatória para decidir se deve fazê-lo ou deixá-lo inalterado. Se uma única atualização fosse perdida, então esse valor de linhas permaneceria o mesmo por duas vezes o tempo que de costume. In practical terms, if we want the probability of updating to be 50, then, we keep the loop counter counting, but before calling the code to get a new random number and update the appropriate row, we look at a bit of a previously obtained 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 reference s 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. Sou. 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.

No comments:

Post a Comment