UNIVERSIDADE SANTA ÚRSULA CENTRO DE CIÊNCIAS EXATAS E TECNOLOGIA CURSO DE ENGENHARIA ELÉTRICA

LEVANTAMENTO DE FUNÇÃO DE TRANSFERÊNCIA DE SISTEMAS DE ÁUDIO

Luiz Fausto de Souza Brito

Rio de Janeiro Julho/2005

Levantamento de Função de Transferência de Sistemas de Áudio

Luiz Fausto de Souza Brito

Monografia

apresentada

ao

Curso

de

Engenharia Elétrica como requisito parcial para obtenção do título de Graduado em Engenharia Elétrica. Orientador: Álvaro da Silva Ferreira

Rio de Janeiro Julho/2005

B862 2005

Brito, Luiz Fausto de Souza Levantamento de Função de Transferência de Sistemas de Áudio / Luiz Fausto de Souza Brito – Rio de Janeiro, 2005 80 f. Monografia (Curso de Engenharia Elétrica) – Universidade Santa Úrsula, 2005. Bibliografia: f. 80 1. Processamento Digital de Sinais. 2. Áudio 3. Função de Transferência. 4. Varredura Senoidal I. Titulo CCD 621.389

Levantamento de Função de Transferência de Sistemas de Áudio

Luiz Fausto de Souza Brito

Monografia

apresentada

ao

Curso

de

Engenharia Elétrica como requisito parcial para obtenção do título de Graduado em Engenharia Elétrica.

Aprovada em 28 de julho de 2005

BANCA EXAMINADORA ____________________________________________________ Prof. Ms. Álvaro da Silva Ferreira Universidade Santa Úrsula ____________________________________________________ Prof. Dr. Stéphane L. G. Quebaud Universidade Santa Úrsula ____________________________________________________ Prof. Ms. José Ricardo Potier de Oliveira Universidade Santa Úrsula ____________________________________________________ Eng. Guilherme Machado Goehringer SKY Brasil Serviços Ltda

Ao meu Deus.Ao meu pai. pelo espírito investigativo. À minha mãe. . pela perseverança. pela serenidade.

A Swen Müller. . por prover os recursos necessários à elaboração desse trabalho. Ao Professor Stéphane Quebaud. pela dedicação e por acreditar no projeto. A todos que me apoiaram de alguma forma. e cujo desenvolvimento deve muito a ele. Ao Professor Álvaro Ferreira. por me apresentar à tecnologia de medição que utilizei. pelo acolhimento e orientação. meus sinceros agradecimentos.AGRADECIMENTOS À Delart Estúdios Cinematográficos Ltda. Aos bons profissionais do áudio no Brasil. que me inspiraram.

23) ."Se alguém tem ouvidos para ouvir. que ouça" (Mc 4.

baseado em varredura senoidal. As vantagens e desvantagens desse método serão discutidas em comparação com outros. O presente trabalho visa apresentar um método de medição de parâmetros de sistemas de áudio. Serão exibidos alguns resultados com a finalidade de demonstrar a funcionalidade do método. sob condições adversas (principalmente ruído e distorção) a maioria não é capaz de obter resultados satisfatórios. Utiliza-se como ênfase a estimativa do espectro do ruído de fundo do sistema sob teste. Uma técnica recente. algumas possíveis aplicações da técnica de medição proposta são citadas. comparar medidas com e sem ênfase no espectro de ruído.RESUMO Muitas técnicas de medição de função de transferência de sistemas de áudio têm sido propostas nos últimos anos. utilizando varredura senoidal com ênfase arbitrária. pode obter resultados ótimos mesmo sob as condições adversas supracitadas. Será apresentada uma implementação em software do algoritmo de medição proposto. Entretanto. e confrontar os resultados obtidos com um software de medição comercial. tanto eletrônicos quanto acústicos. Por fim. .

Background noise spectrum estimation of the system under test is to be used as emphasis. under adverse conditions (mainly noise and distortion) most of them are unable to obtain satisfactory results. Some results are shown. Finally. This method’s advantages and disadvantages are discussed in comparison with others. A recent technique. to compare measurements with and without noise spectrum based emphasis and to compare results obtained with a commercial measurement software.ABSTRACT In the last years. using arbitrarily emphasized sine sweeps can get optimum results. some possible applications of the proposed method are mentioned. both electronic and acoustic. . aiming to demonstrate the method’s functionality. based on sine sweeps. even under the above mentioned adverse conditions. many audio system’s transfer function measurement techniques have been proposed. A software implementation of the proposed measurement algorithm is presented. The goal here is to present a measurement method for audio systems parameters. However.

............... ALGUNS MÉTODOS DE MEDIÇÃO EXISTENTES ........................ 22 3................................... 16 2........... 19 2..... 14 1..............7 Análise com FFT de um canal ...........................3 Varredura Senoidal Discreta . 21 2................................................................... 15 2.................................... 30 4............... 28 4...........................6 Análise com FFT de dois canais ..............................................3................1 Análise Espectral do Ruído .......................................3.... 32 4................................ 34 4.............................................4 Impulsos .......3..................................................................................................3.......................................1 Geração de Espectro Rosa ........................3 Determinação dos Parâmetros Secundários ............ 29 4......3...................................... IMPLEMENTAÇÃO .................................................................SUMÁRIO 1......3 Distorção Harmônica Total (THD) ............................2 Time Delay Spectrometry (TDS) ...... 33 4....3..... 19 2............3..................2 Determinação da Resposta em Freqüência .............................................................................. INTRODUÇÃO .............................1................... 31 4......1 Motivação ...................1 Pressão Sonora Máxima .........3.............. MÉTODO PROPOSTO ...................................................... 16 2................................ 34 ........3..................................................................................................................................................................................... 33 4.....5 Tempo de Reverberação (RT60) e Curva de Decaimento de Schroeder ................................2 Plano de Trabalho ..............................3..4 Relação Sinal/Ruído (SNR) da Janela de Análise ... 32 4........................................2 Latência e Distância da Fonte Sonora ..................................................3..................5 Maximum Length Sequence (MLS) .......................... 20 2................................. 32 4..............3.......1 Determinação da Resposta ao Impulso ................6 Banda de Passagem .....................................2 Geração da varredura ................3................................................. 14 1............................................ 17 2........ 30 4................ 24 4.....3..3 Análise da Resposta ................................................. 33 4.............................................1 Gravador de Nível (Level Recorder) ....................3...... 31 4...........................................

...2 Medidas utilizando o EASERA ..... 40 5............ 35 4.......................4............1................................5....1....................3 Medida da Caixa de Som .......1............................................................................................... 40 5....................................4......................................................................... 50 5...................... 53 6................2 Medidas Eletrônicas .....................2........... 43 5..................... CONCLUSÕES ..1 Auto-Referência ............................................... 35 4.................. 35 4...............1..................2 Resposta em Freqüência do Microfone .....1 Aplicações e Trabalhos Futuros ........................................................1 Síntese da Resposta em Freqüência do microfone ..........5 Calibragem do Ganho do Equipamento de Medição ......................... 37 5........................................................................................1 Medidas do Equalizador utilizando varredura com ênfase .....................5.........................................................................................1..2...1 Medida da Caixa de Som .........................................................CÓDIGO FONTE (SCRIPT – SCILAB) .......4 Registro das Características do Microfone de Medição .........................................1... 35 4...................1 Medidas utilizando o programa desenvolvido .............................. 46 5.................2........................ 46 5............ 46 5........... 54 Anexo .......................... 36 5.................6 Suavização ..... 52 6.2 Medição do Nível de Referência ........1......... 34 4..........................7 Assistente de Medição .....................2................................ 42 5............... 37 5....... 47 5....................................................................................................... 34 4..................1 Medidas Acústicas ...........1..................... RESULTADOS EXPERIMENTAIS .................................................... 80 .............................1 Geração de Tom de Referência ........... 55 Referências Bibliográficas .....................2 Medida em loop-back .....1...................1...........2 Medidas do Equalizador utilizando varredura logarítmica ........

...1 – Diagrama de medição utilizando TDS .......1..................2. 3...........................1....1..............1 – Diagrama de medição utilizando o Método Proposto .. 5....1.. 5........ 3.....2...1 – Esquema das ligações realizadas para as Medidas Acústicas .. 50 Fig. 45 Fig.... 42 Fig.... 50 Fig... 26 Fig... 43 Fig...... 42 Fig...... 5.........2 – Fase da Resposta em Freqüência do Equipamento de Medição ............3...........1.......1 – Diagrama de medição utilizando MLS ......1..... 2........1..................................... sem suavização) ...2......................2 – Módulo da Resposta em Freqüência do Equalizador ...2...... 5...... 5.. 5.......2 – Módulo da Resposta em loop-back (EASERA......1 – Diagrama de medição utilizando FFT de dois canais ... 2.........1......1......3 – Parâmetros Secundários do sistema acústico medido .. 5..3.......5......................................1... 23 Fig.3 – Fase da Resposta em Freqüência do Equalizador .......... 5...3 – Parâmetros Secundários do Equipamento de Medição ......2 – Descarte da distorção harmônica na análise com varreduras ............ 46 Fig.3..........1........... 26 Fig..1..... 20 Fig....3........2. 5............... 38 Fig....2.1 – Esquema das ligações realizadas para as Medidas Eletrônicas ...1 – Módulo da Resposta em loop-back (EASERA.............1 – Módulo da Resposta em Frequência do sistema acústico (EASERA) ...7..1. 51 ...1.... 16 Fig..... 2..........1.........1 – Módulo da Resposta em Freqüência do Microfone de Medição ...........1............1. 22 Fig..1...7............................ 2.......1 – Resposta ao Impulso (após janelamento) do sistema acústico medido .2......... 5................ 17 Fig....7. 47 Fig. 24 Fig............... 43 Fig... 40 Fig.1.1 – Diagrama de medição utilizando o Gravador de Nível .......1...1. 5.... 2..2........ 44 Fig.......1......2 – Curva de Decaimento de Schroeder do sistema acústico medido ......4 – Módulo da Resposta em Freqüência do sistema acústico (programa) ....1..2 –Resposta em Freqúência sintetizada para o Microfone de Medição .............1 – Espectro do Ruído do Equalizador (com suavização de 3 oitavas) ...............LISTA DE FIGURAS Fig...........2.1.......2...................2 – Esquema das ligações realizadas para a Auto-Referência e loop-back .... 5.....2 – Síntese de sinais a partir do domínio da freqüência ..2............. 49 Fig........1.. 5.......1............2.............. 2.... 41 Fig..3 – Geração de varredura com ênfase arbitrária . 3....... 36 Fig.........6.1.... 5. 39 Fig.........1.......1 – Diagrama de medição utilizando FFT de um canal ..1 – Fluxograma (simplificado) do funcionamento do Assistente de Medição ..1... 4..1........... 5. 21 Fig.. 5...................... 46 Fig.. 5....1 – Módulo da Resposta em Freqüência do Equipamento de Medição . 44 Fig..........1......... 5..... suavização de 1/48 oitava) ...

5. 52 .4 – Parâmetros Secundários da medida do equalizador (varredura com ênfase) .. 51 Fig..1 – Parâmetros Secundários da medida do equalizador (varredura logarítmica) .1.2...2.Fig. 5.2.

................................ 35 ..1 – Ganhos ajustados no equalizador para o teste ..LISTA DE TABELAS Tabela 5...2............

que vão desde simplesmente estabelecer critérios de avaliação de qualidade e de comparação entre dispositivos. Assumindo-se que todo sistema de áudio apresenta algum grau de não-linearidade. ou pelo menos minimizá-los. além de separar a distorção harmônica. no levantamento da resposta linear do sistema (função de transferência e/ou resposta ao impulso). se assume que o sistema é linear e se despreza o ruído de fundo. Isso porque. quando algum parâmetro não está de acordo com o desejado (por exemplo. normalmente. é apresentada a técnica da varredura senoidal com ênfase no espectro do ruído. passam pelo estabelecimento de ações corretivas. Embora existam diversos métodos disponíveis para realizar o levantamento da função de transferência de sistemas de áudio. muitas vezes eles apresentam erros causados pelas nãoidealidades dos sistemas sob teste. para obter uma reprodução sonora de alta-fidelidade) e vão até a simulação ou implementação virtual dos sistemas medidos. Essa técnica é capaz de otimizar a relação sinal/ruído de uma medição. Essas medições também se justificam pelas suas diversas aplicações. O método proposto se baseia no artigo “Transfer-Function Measurement with Sweeps” [5]. e que está sujeito a ruído. isolá-los. A importância desse tipo de medição está no fato desses parâmetros alterarem a qualidade percebida de um sistema de som.1 Motivação O presente trabalho visa apresentar um método de medição de parâmetros de sistemas de áudio. de Swen Müller e Paulo Massarani. . tanto eletrônicos quanto acústicos.14 Capítulo 1 INTRODUÇÃO 1. se possível. desejar-se-ia estimar esses efeitos e. Para alcançar estes objetivos.

No capítulo 2. realizamos uma breve introdução sobre o problema em questão. Suas vantagens e desvantagens serão brevemente discutidas. No capítulo 6 serão apresentadas as conclusões e apontadas algumas aplicações específicas que podem derivar das medições realizadas. utilizando um software de computação científica (Scilab) e um software de edição e gravação de áudio (Audacity).2 Plano de Trabalho No capítulo 1. apresentaremos alguns dos métodos existentes para o levantamento de função de transferência de sistemas de áudio.15 1. No capítulo 3. apresentaremos o método da varredura senoidal com ênfase no espectro de ruído. comparar medidas com e sem ênfase no espectro de ruído. No capítulo 4 será apresentada a implementação realizada para o método proposto. . e confrontar os resultados obtidos com um software de medição comercial. além de possíveis caminhos para a continuidade desse trabalho. com a finalidade de demonstrar a funcionalidade do método. No capítulo 5 serão apresentados alguns resultados experimentais obtidos.

2. As diferenças estão em qual sinal de estímulo é empregado e como se processa a análise da resposta.1 – Diagrama de medição utilizando o Gravador de Nível (adaptado de [5]) . Explicações e referências mais detalhadas sobre os métodos podem ser encontradas em [5]. A seguir será realizada uma breve descrição de alguns métodos existentes. 2.1.1 Gravador de Nível (Level Recorder) DUT + - Atuador (motor) Sensor (potenciômetro) Fig.16 Capítulo 2 ALGUNS MÉTODOS DE MEDIÇÃO EXISTENTES Todos os métodos de medição disponíveis aplicam um sinal de estímulo que contenha todas as freqüências de interesse no dispositivo sob teste e comparam o espectro da resposta com o espectro do estímulo.

17 O Gravador de Nível é um dos métodos mais antigos disponível. O resultado desenhado no papel é o módulo da resposta em freqüência do dispositivo. não podendo ser realizado nenhum pós-processamento.1 – Diagrama de medição utilizando TDS (extraído de [5]) . cuja outra entrada é alimentada por um divisor de tensão que utiliza um potenciômetro de precisão controlado pela posição de uma caneta. Um gerador analógico de varredura senoidal logarítmica é usado como excitação para o dispositivo sob teste (DUT). que alimenta uma das entradas de um amplificador diferencial. 2. Possui precisão horizontal limitada pela oscilação da velocidade do papel e resolução vertical discretizada pelo potenciômetro de precisão.2 Time Delay Spectrometry (TDS) Fig. o resultado está armazenado apenas em papel. 2. Esta se desloca sobre um papel que se move com velocidade constante. A suavização da representação da resposta pode ser controlada através da velocidade da caneta. Esse método não mede a fase da resposta em freqüência. A saída desse amplificador controla a posição da mesma caneta. Além do mais.2. A saída do dispositivo é ligada a um retificador seguido de um filtro passabaixas.

Como os sinais possuem praticamente a mesma freqüência instantânea. passando finalmente por filtros passa-baixas. cuja resposta é multiplicada pelas saídas do gerador atrasadas (para compensar a latência do dispositivo sob teste). O multiplicador produz termos com a soma e a diferença das freqüências de suas entradas. enquanto o ruído de fundo presente em praticamente todas as medições possui mais energia em baixas freqüências (com espectro aproximadamente rosa ou vermelho). 1 De fato. para utilizar uma varredura não linear (logarítmica. os termos da resposta atrasados por reflexões (no caso de medidas acústicas) e os produtos de distorção são quase completamente rejeitados. a varredura dura menos tempo nas oitavas inferiores. Isso leva a uma baixa relação sinal/ruído em baixas freqüências porque. por exemplo. Como só são computados na resposta os termos da saída com a mesma freqüência instantânea da entrada (e como essa freqüência está aumentando progressivamente). . Sua maior desvantagem é utilizar varredura linear1 (com espectro branco). Também o ruído de banda larga é praticamente rejeitado (exceto é claro pelas componentes praticamente coincidentes com a freqüência instantânea da varredura). de fato. realizar uma medição com um alto-falante em uma sala e obter praticamente a mesma resposta de uma medição em campo aberto (ou em condições anecóicas). Seu diagrama de operação é apresentado na Figura 2. A precisão também é menor em baixas freqüências por causa do passa-baixas.18 Um método interessante é o TDS (Time Delay Spectrometry). Ele utiliza um gerador analógico de varreduras senoidal e cossenoidal lineares (sincronizadas). permitindo.2. da multiplicação com o seno teremos a parte real da resposta em freqüência e da multiplicação com o cosseno teremos a parte imaginária. Então. o termo da diferença estará praticamente em 0 Hz. por exemplo) seria preciso que os filtros passabaixas tivessem freqüência de corte variável.1. enquanto o termo da soma será rejeitado pelo filtro passabaixas. levando a oscilações (ripple) na resposta. A saída senoidal é ligada ao dispositivo sob teste.

para que não haja superposição das respostas. resulta na pior relação sinal/ruído. portanto que não pode ser compensado. O preferível seria utilizar um impulso digital através de um conversor D/A. disparo de arma de fogo. para descartar as reflexões é necessário que a janela de FFT seja menor que o retardo da reflexão (o que reduz a resolução da resposta).4 Impulsos Obviamente. Contudo deve-se observar que o período de repetição do impulso deve ser maior que a duração3 da resposta ao impulso do dispositivo. Por outro lado. Na prática.3 Varredura Senoidal Discreta A varredura senoidal discreta é o método mais demorado e que resulta na menor resolução. pois filtra somente a informação da freqüência em teste (passa-banda perfeito). A segunda alternativa gera resultados melhores. 2. explosão de balão) não possuem espectro plano. . Impulsos gerados de forma analógica (bater palmas. resulta na melhor relação sinal/ruído possível. Analisa freqüência por freqüência utilizando tons senoidais puros. A resposta em freqüência pode ser obtida. Contudo. mas um espectro que possui um alto grau de imprevisibilidade. A resposta do sistema pode ser retificada e filtrada ou pode ser feita a FFT armazenando somente a informação relativa à freqüência em teste2. Também pode ser usado para medir apenas os harmônicos e calcular a distorção harmônica. pode-se realizar a média de respostas a impulsos periódicos. Para elevar a relação sinal ruído. a duração da resposta ao impulso é medida até que este decaia até o limiar de ruído. por FFT. a forma mais simples de se obter uma resposta ao impulso de um dispositivo é aplicando um impulso na entrada. Em medições acústicas. então.19 2. em que se pudesse medir e compensar a resposta do próprio sistema de medição. 2 3 Desde que o sinal seja exatamente periódico dentro da janela de FFT.

entretanto. Isso foi uma grande vantagem desse método quando foi desenvolvido. Pode-se demonstrar que essa seqüência possui espectro praticamente branco [1]. seu espectro branco. o valor do sinal é mantido constante entre cada duas amostras. Pode ser utilizada pré-ênfase. como em algumas análises acústicas. Hoje. com período 2N-1. Normalmente a correlação cruzada é calculada de forma mais eficiente no domínio da freqüência.5. na década de 80. principalmente quando o que se desejava era apenas a reposta ao impulso (não a resposta em freqüência). 2.20 2. conectados de forma que todos os estados (valores) possíveis (menos o zero) ocorram seqüencialmente no registrador à medida que se aplicam pulsos de clock. para o MLS. porém com uso de FFT na cadeia de análise.1 – Diagrama de medição utilizando MLS (adaptado de [5]) DUT FHT MLS (Maximum Length Sequence) é uma seqüência binária que pode ser gerada de forma simples com um registrador de deslocamento e uma porta XOR.5 Maximum Length Sequence (MLS) CLOCK SHIFT REG ZOH XOR Fig. Por possuir espectro branco pode-se utilizar a correlação cruzada entre o sinal de estímulo e a resposta do dispositivo para obter a resposta ao impulso. o poder de processamento disponível (mesmo a baixo custo) permite realizar a FFT de forma muito rápida. a Transformada Rápida de Hadamard (FHT) calcula a correlação cruzada no domínio do tempo de forma muito eficiente (apenas utilizando somas e subtrações). . onde N é o número de estágios do registrador de deslocamento. A seqüência gerada é periódica. Para maximizar a energia entregue ao dispositivo analógico (ou acústico) a ser testado. As desvantagens do MLS são sua grande vulnerabilidade à distorção e variância no tempo e. Entretanto. principalmente.

.21 2. Contudo. Com isso.4 4 A resolução de uma análise por FFT é de fs/N. a resposta em freqüência é obtida dividindo o espectro da saída pelo espectro do sinal da entrada. O tamanho das janelas limita a resolução da análise. o sinal precisa ser dividido em diversas janelas temporais para a análise.1 – Diagrama de medição utilizando FFT de dois canais (extraído de [5]) A análise com FFT de dois canais possui um princípio de funcionamento bem simples: para qualquer sinal de excitação. onde fs é a freqüência de amostragem e N é o número de pontos da janela utilizada. geralmente muitas médias são necessárias para se obter um bom resultado. 2.6.6 Análise com FFT de dois canais Fig. qualquer sinal de estímulo pode ser utilizado. Com sinais aleatórios. Para isso. a confiabilidade do resultado depende de se ter um sinal com energia suficiente em todas as faixas de freqüência para garantir uma boa relação sinal/ruído. As janelas de FFT devem possuir um número de pontos que seja potência de 2.

6. Contudo ainda se faz a mesma restrição de que o sinal de estímulo tenha energia suficiente em todas as faixas de freqüência de interesse para se alcançar uma boa relação sinal/ruído. é necessário reproduzir o sinal pelo menos duas vezes (para estabelecer o regime permanente) para gravar na segunda. até a freqüência de Nyquist (fs/2). obtendo-se então a resposta em condições praticamente anecóicas. 2. Se for desejável rejeitar as reflexões. Os pontos restantes (que corresponderiam às freqüências negativas) podem ser recuperados utilizando a propriedade de que o espectro de sinais reais possui simetria real e anti-simetria imaginária. Como o sinal é periódico. que poderia ser um sinal qualquer. permitindo a análise com FFT de apenas um canal. ou seja.7.22 2. no caso de uma medição acústica. Seu espectro de referência5 pode ser previamente armazenado6. porém substituímos o sinal de excitação. . mas apenas “meio espectro”. aplicar uma janela que exclua as reflexões e calcular novamente a FFT.7 Análise com FFT de um canal A análise com FFT de um canal é semelhante à análise com dois canais. descrita na seção 2. por um sinal determinístico periódico com comprimento 2N. pode-se realizar a IFFT da resposta em freqüência. Note-se que não é necessário armazenar o espectro completo. ou seja. É preciso apenas medir a resposta do sistema em regime permanente. Fig.1 – Diagrama de medição utilizando FFT de um canal (extraído de [5]) 5 6 O espectro de referência é o inverso do espectro do sinal de estímulo aplicado (obtido pela FFT desse sinal). não são necessárias várias médias para se obter resultados consistentes (embora esse recurso possa ser utilizado para aumentar ainda mais a relação sinal/ruído).

Fig.23 A condição de energia suficiente em todas as bandas pode ser garantida caso o sinal de estímulo seja sintetizado a partir do espectro desejado (ênfase).7. Supondo espectros de banda larga. gerando uma varredura invertida – das altas para as baixas freqüências – mas precisa ser uma função monótona. conforme será visto no capítulo 3. 2. basicamente. sinais de três categorias podem ser gerados com um mesmo módulo no domínio da freqüência. com fase aleatória obteremos um ruído. mas com diferentes relações de fase: com fase nula obteremos um impulso. Se uma determinada relação for mantida entre o módulo e o atraso de grupo. obteremos uma varredura senoidal com envelope constante . e com atraso de grupo crescente7 obteremos uma varredura.2 – Síntese de sinais a partir do domínio da freqüência (extraído de [5]) 7 O atraso de grupo também pode ser decrescente.

Um diagrama simplificado do método proposto pode ser observado na Figura 3.1 – Diagrama de medição utilizando o Método Proposto (adaptado de [5]) .24 Capítulo 3 MÉTODO PROPOSTO O método proposto baseia-se na análise com FFT de um canal. DUT / IFFT FFT FFT x Fig. utilizando como sinal de estímulo uma varredura senoidal construída a partir do espectro do ruído de fundo do dispositivo sob teste. 3.1.

a posição na resposta ao impulso dos produtos de distorção não depende da freqüência. então. pois possuem menor fator de crista8 (3dB. produzindo “respostas ao impulso” individuais para cada harmônico que permitiriam sua análise em separado [2]. durante a convolução do sinal de resposta com o espectro de referência. com varreduras senoidais. 8 9 Define-se fator de crista como a relação entre a amplitude máxima (pico) de um sinal e o seu valor RMS. comparando a energia do tempo negativo da resposta ao impulso com a energia total da resposta ao impulso. de forma que a distorção harmônica total (THD) do sistema pode ser medida da mesma maneira em todos os casos. a separação da distorção ocorre para varreduras com qualquer ênfase. pois o resultado da análise de apenas uma reprodução do sinal é praticamente idêntico ao da média de várias repetições. descrito na seção 2. Os produtos de distorção aparecem muito antes do tempo correspondente às suas freqüências na varredura (supondo que a varredura é sintetizada das baixas para as altas freqüências). Quando seus atrasos forem subtraídos dos atrasos correspondentes no espectro de referência. Isso ocorre porque. Varreduras senoidais também possuem maior potência para uma mesma amplitude máxima do que os ruídos (e mesmo que o MLS depois dos conversores D/A). podendo ser utilizado o espectro do ruído do sistema a ser medido. A análise pode ser realizada de forma semelhante ao método com FFT de um canal. Como a FFT e a IFFT são periódicas. supondo a síntese com envelope constante). Podem possuir espectro arbitrário. Outra característica importante das medições com varredura é a sua capacidade de separar os produtos de distorção da resposta linear do sistema. garantindo uma relação sinal/ruído independente da freqüência. . A resposta linear pode. No caso particular da análise com varreduras logarítmicas.25 O levantamento da função de transferência de sistemas de áudio pode ser obtido de forma eficiente através de varreduras senoidais. resultarão em tempo negativo. Porém. Portanto. para que sejam separáveis da resposta linear do sistema é preciso que o tamanho da janela de análise (número de pontos considerados para o cálculo da FFT) comporte pelo menos duas vezes a duração do sinal de resposta9. ou pelo menos duas vezes a duração da resposta ao impulso do sistema a ser medido. a repetição do sinal não é necessária. ser obtida pelo janelamento da resposta ao impulso total. Em todo caso. os componentes de distorção aparecerão no final da resposta ao impulso medida. Isso corresponde à exigência de que a convolução entre o sinal de resposta e o de referência seja linear e não circular. cada componente freqüencial da resposta é deslocado de acordo com o seu atraso de grupo correspondente no espectro de referência. mas somente da ordem do harmônico.7.

Dado um espectro qualquer (H).2 – Descarte da distorção harmônica na análise com varreduras (extraído de [5]) Para que se possa controlar de forma arbitrária o espectro da varredura. 3.1) (Eq.2) Fig. para cada ponto da FFT. 3. para se obter uma varredura senoidal com o mesmo módulo e envelope constante.26 Fig. de acordo com a seguinte relação: (Eq. 3.3 – Geração de varredura com ênfase arbitrária (extraído de [5]) . o atraso de grupo (τg) deve ser calculado. é preciso sintetizá-la no domínio da freqüência. 3.

Maiores detalhes sobre o método serão fornecidos no Capítulo 4 (“Implementação”). A partir do atraso de grupo calcula-se a fase11. O sinal no domínio do tempo é obtido por IFFT. Para que esse “espalhamento” não se sobreponha12 ao sinal desejado. O atraso de grupo é o negativo da derivada da fase em relação à freqüência angular. mas ocorre um “espalhamento” no tempo em ambas as direções. calculado a partir da raiz quadrada do espectro de potência10 médio do mesmo. 12 O sinal no domínio do tempo apresentará componentes de baixa freqüência antes do instante de início desejado e componentes de alta freqüência após o instante de fim desejado. e a partir daí o espectro complexo. os componentes de baixa freqüência podem se sobrepor ao final da varredura e os componentes de alta freqüência podem se sobrepor ao início da varredura. . Nesse caso pode-se resolver o problema utilizando um filtro passa-altas. O sinal recuperado pela IFFT é então limitado utilizando uma janela de “meio cosseno” (half-cosine). Note-se que a síntese da varredura através do domínio da freqüência produz alguns problemas no domínio do tempo. a saber. No presente caso. foi utilizada uma janela com o dobro da duração da varredura. principalmente quando o espectro desejado possui uma excessiva concentração de energia em baixas freqüências. Utiliza-se como ênfase (módulo desejado para o espectro da varredura) a estimativa do espectro do ruído de fundo do sistema sob teste. Como a IFFT é periódica. Em alguns casos. é necessário utilizar uma janela de FFT maior do que o sinal desejado. 10 11 Define-se espectro de potência como o quadrado do módulo do espectro. a duração da varredura não fica confinada aos valores de atraso de grupo inicial e final estabelecidos. ainda pode haver sobreposição.27 O que a síntese do atraso de grupo procura fazer é garantir que a varredura demore mais tempo nas freqüências onde se deseja mais ênfase.

o levantamento da função de transferência de um equipamento eletrônico. inclui um elo acústico (com a utilização de um microfone). 1. Será chamada “medição de sistema eletrônico” toda aquela que não inclui nenhum elo acústico.28 Capítulo 4 IMPLEMENTAÇÃO Foi implementado um algoritmo de medição de sistemas de áudio utilizando um software de computação científica (Scilab – v.3).9. a saber. mesmo que o que se deseja medir não seja a acústica da sala. A Medição do Sistema visa levantar as características do sistema eletrônico ou acústico sob teste. Este procedimento é comum a praticamente todas as implementações de sistemas de medição [8].1. Na Auto-Referência faz-se a ligação do equipamento de medição em loop-back (ligando diretamente a saída na entrada). a fim de compensá-la na análise dos demais sistemas. 3. Essas etapas são compostas pelas seguintes sub-etapas: • • • 13 Análise Espectral do Ruído Geração da Varredura Análise da Resposta A presente implementação é multi-plataforma. com código fonte aberto. Esta é a própria medida que se objetiva realizar. por exemplo.3.1) um software de gravação e edição de som (Audacity – v. mas somente a resposta de um alto-falante. A “medição acústica”. para obtenção de resultados confiáveis. diferindo apenas nas conexões realizadas. ambos gratuitos. tendo sido testada em Windows XP (sp2) e MacOS X v10.2. .13 O procedimento implementado pode ser dividido em duas etapas: • • Auto-Referência Medição do Sistema (Eletrônico ou Acústico) A Auto-Referência visa levantar a resposta em freqüência do próprio equipamento de medição. por sua vez. As etapas de Auto-Referência e Medição do Sistema são praticamente idênticas.

fase aleatória. é realizada a suavização do espectro conforme o fator de suavização escolhido (conforme explicado na seção 4. Ruídos de banda larga resultarão. primeiramente. mais de uma) função separada em Scilab e será detalhada melhor nas seções seguintes. necessitamos apenas da informação de módulo para utilizar como ênfase durante a geração da varredura senoidal. para que a síntese da varredura apresente resultados aceitáveis. o que pode tornar difícil obter resultados utilizáveis. Finalmente. ruídos de banda estreita e elevada autocorrelação. Entretanto. eventualmente. Convenientemente. e a estimação do seu espectro através de médias e FFT. 14 Note-se que.29 No caso particular de medidas acústicas. por definição. o espectro informado a ela deve ser suficientemente suavizado (conforme explicado na seção 4. gerados.6). que podem não ser satisfatoriamente suavizados pelo procedimento descrito. duas sub-etapas são acrescentadas: • • Registro das Características do Microfone de Medição Calibragem do Ganho do Equipamento de Medição Por fim. através do procedimento acima descrito em um espectro suficientemente suavizado. É importante notar que.2). foi também desenvolvida uma função Assistente de Medição para automatizar a seqüência de procedimentos de uma medição normal.1 Análise Espectral do Ruído A Análise Espectral do Ruído compreende a captação do ruído de fundo do sistema sob teste. define-se. 4. Pode ser necessário repetir algumas vezes a análise. Cada uma das sub-etapas acima citadas foi implementada como uma (ou. geralmente se apresentam como picos acentuados no espectro. juntamente com algumas outras subrotinas de interesse. na análise espectral de ruído obtemos apenas o módulo do espectro. como o ruído possui. pela interferência da rede elétrica (humming). alterando o tamanho da janela e o fator de suavização até se alcançar um resultado satisfatório. de acordo com a resolução desejada. O espectro do ruído de fundo é então recuperado como sendo a raiz quadrada do espectro de potência médio14. . por exemplo. Divide-se o sinal em quantas janelas forem possíveis (os pontos restantes são descartados) e é calculada a média dos seus espectros de potência. A partir do ruído captado. o tamanho da janela de análise.

para limitar a energia subsônica do sinal a ser gerado. para que essa limitação não afete o espectro da varredura de forma significativa.1) é carregado e interpolado para o número de pontos desejado (determinado pela duração desejada para a varredura). e para reduzir o espalhamento do sinal gerado no domínio do tempo para além dos limites de tempo desejados. a menos que se gere uma varredura extremamente longa.2 Geração da varredura Inicialmente o espectro de ênfase desejado (gerado pela análise do ruído ou pela função de geração de espectro rosa. conforme seção 4. Também vale lembrar que o espectro da varredura terá sua resolução em freqüência limitada pela resolução do espectro da ênfase. prejudicando a relação sinal/ruído das demais freqüências. o atraso de grupo é calculado de acordo com a Eq. ou deve ser igual à resolução do espectro da varredura a ser gerada.30 Para o caso de não ser possível a obtenção de um espectro de ruído suficientemente suavizado e consistente15. Basta calcular o espectro ponto a ponto com decaimento logarítmico de 3 dB por oitava. são implementados filtros passa-altas e passa-baixas de 6 dB/oitava (que como são implementados depois do cálculo do atraso de grupo produzem uma modulação na amplitude da varredura. caso este seja muito diferente do espectro real do ruído. 4. o que aumenta também o tempo necessário à análise. a resolução do espectro da ênfase deve estar pelo menos uma década abaixo da menor freqüência de interesse. Adicionalmente foi incluída a opção de gerar um patamar plano no espectro.1. e podem servir para proteção de equipamentos. Como regra prática. . 3.1 Geração de Espectro Rosa A geração de um espectro rosa é bastante simples. Em seguida. foi implementada também uma síntese de espectro rosa (conforme a sessão seguinte) para substituir o espectro do ruído. conforme explicado no capítulo 3). abaixo de uma determinada freqüência inferior limite.1. Opcionalmente. 4. pode ocorrer que a duração da varredura seja quase que totalmente ocupada pela freqüência do pico. 15 Aumentar indefinidamente o fator de suavização pode conduzir à obtenção de um espectro branco. prejudicando a relação sinal ruído da análise. como alto-falantes. Caso o espectro informado apresente picos acentuados.

4). onde fs é a freqüência de amostragem)16.3. 4.31 A fase é calculada através da integral do atraso de grupo e em seguida corrigida para se obter fase nula na freqüência zero e na freqüência de Nyquist (fs/2. Caso contrário. 4. é feito um janelamento de meio-cosseno (half-cosine [5]). o sinal da varredura no tempo é obtido pela IFFT. . O espectro da varredura é então calculado pelo módulo e fase determinados.1 Determinação da Resposta ao Impulso A partir do sinal de resposta do sistema e do sinal de estímulo aplicado.3. e a determinação dos parâmetros desejados. o tamanho da janela de análise é ajustado para a primeira potência de 2 maior que a soma da duração dos dois sinais (para garantir convolução linear [10])17. Por fim. a captação simultânea de sua resposta. as seqüências correspondentes aos sinais de estímulo e resposta são completadas com a quantidade necessária de zeros [10].3. A determinação dos parâmetros do sistema pode ser resumida nas seguintes etapas: • • • Determinação da Resposta ao Impulso Determinação da Resposta em Freqüência Determinação dos Parâmetros Secundários Cada uma das etapas acima citadas será explicada a seguir.3. Este depende da resolução desejada para a análise (define o tamanho da janela) e do cálculo do “limiar de decaimento” (conforme definido na seção 4. Caso a janela de análise seja menor que o limiar de decaimento. com o início do meio cosseno definido pelo limiar de decaimento e o final pela janela de análise).3 Análise da Resposta A Análise da Resposta compreende a aplicação da varredura ao sistema sob teste.3. a latência absoluta (calculada conforme explicado na sessão 4. Em seguida é efetuado o janelamento da resposta ao impulso. Calcula-se a resposta ao impulso pela IFFT da razão entre suas respectivas FFTs.2) da resposta ao impulso é corrigida através de deslocamento circular [5]. Finalmente. Para ajustar o tamanho da janela de análise. 16 17 Condição normal para sinais reais [5]. é feito um janelamento retangular.

Se a análise for de Auto-Referência o espectro resultante é armazenado para possibilitar a compensação das demais medições. Em seguida.3. calcula-se a pressão sonora máxima a partir da energia média durante um intervalo centrado no ponto de máxima energia instantânea (com a duração do intervalo arbitrada em 200ms)18 e subtraindo a sensibilidade do microfone (conforme seção 4.3. ou diretamente a partir do próprio sinal de saída (resposta) do sistema.4) e ganho de entrada do equipamento de medição (conforme seção 4. O espectro resultante é. Quais parâmetros medir depende do objetivo que se tenha com a análise.4).2 Determinação da Resposta em Freqüência A resposta em freqüência é obtida pela FFT da resposta ao impulso após o janelamento e deslocamento circular.1 Pressão Sonora Máxima No caso de medidas acústicas.6) de acordo com o fator de suavização escolhido.3. . a saber: • • • • • • Pressão Sonora Máxima Latência e Distância da Fonte Sonora Distorção Harmônica Total (THD) Relação Sinal/Ruído (SNR) da Janela de Análise Tempo de Reverberação (RT60) e Curva de Decaimento de Schroeder Banda de Passagem As medições desses parâmetros foram implementadas conforme descrito a seguir. então.3 Determinação dos Parâmetros Secundários Todos os demais parâmetros medidos em sistemas de áudio são calculados a partir da Resposta em Freqüência ou da Resposta ao Impulso.3. o intervalo deve ter duração mínima maior que o período da menor freqüência de interesse. 4. suavizado (conforme seção 4. Foram escolhidos alguns parâmetros considerados importantes. caso não se trate de uma análise de Auto-Referência.32 4. a resposta é corrigida (por deconvolução) pela resposta do próprio equipamento de medição.5). a resposta é também corrigida pela resposta em freqüência do microfone de medição (obtida conforme seção 4. 4. Caso se trate de medição acústica. 18 Para um resultado consistente.

4. enquanto a latência absoluta é utilizada para correção da resposta ao impulso (conforme a seção 4.3.3. Para estimar isso. A relação sinal/ruído (SNR) é estimada como a razão entre a energia calculada do sinal e a do ruído da janela de análise. Calcula-se a energia do sinal como sendo a energia contida dentro da janela de análise subtraindo a energia de ruído.3. Essa posição é armazenada como limiar de decaimento.3 Distorção Harmônica Total (THD) Calcula-se a distorção harmônica total (THD) como a raiz quadrada da razão entre a energia da distorção (energia do tempo “negativo” da resposta ao impulso – conforme explicado no capítulo 3) e a energia total da resposta ao impulso. 4.1). a densidade de energia do ruído como a relação entre a energia após o limiar de decaimento e sua duração correspondente.3. Calcula-se a energia do ruído contido na janela de análise através da densidade de energia do ruído. busca-se inicialmente um limiar de decaimento. suposta constante. calcula-se a diferença entre a latência absoluta (definida como o tempo correspondente ao pico de amplitude da resposta ao impulso) e a latência de referência (definida como a latência absoluta obtida na Auto-Referência).3. Define-se aqui como limiar de decaimento o instante de tempo em que a resposta ao impulso decaiu ao patamar de ruído (quando a energia pára de decrescer). então. Em caso de medida acústica calcula-se a distância da fonte sonora a partir da latência relativa.3.2 Latência e Distância da Fonte Sonora Para se calcular a latência do sistema sob teste (latência relativa). calcula-se o primeiro instante em que a envoltória da resposta ao impulso ao quadrado possui derivada não-negativa (ou pelo menos negativa com módulo menor que o nível de quantização determinado pelo número de bits).33 4.3. A latência relativa é utilizada para exibição para o usuário.4 Relação Sinal/Ruído (SNR) da Janela de Análise Para estimar a relação sinal/ruído da janela empregada na análise (que serve como parâmetro de confiabilidade da medição). Calcula-se. .

O tempo de reverberação (RT60). deve-se informar qual o espectro (correspondente à resposta em freqüência) a ser utilizado (que deve ter sido gerado anteriormente) e a sensibilidade (ganho de transdução) do microfone. definido como o tempo necessário para a reverberação decair 60 dB é obtido através de uma interpolação linear (aqui calculada através da derivada média entre a latência absoluta e o limiar de decaimento) da curva de decaimento de Schroeder.3.34 4. posteriormente suavizados. 4. calcula-se o tempo de reverberação a partir da curva de decaimento de Schroeder [9].4 Registro das Características do Microfone de Medição Em medidas acústicas. a primeira em que a resposta (normalizada) do sistema atinge um determinado nível de limiar (definido pelo usuário) e uma freqüência superior.4. expressa em dB. a última em que a resposta atinge esse mesmo nível. . Esta curva deve expressar o decaimento do sistema ao longo do tempo.1 Síntese da Resposta em Freqüência do microfone Foi implementada uma síntese do espectro do microfone NTI MiniSPL (esse foi o microfone utilizado nos testes realizados). para permitir a compensação da resposta em freqüência do microfone e a aferição do nível de pressão sonora. 4. a partir de aproximação da sua carta de calibragem.6 Banda de Passagem A banda de passagem é definida a partir de uma freqüência inferior.3. por segmentos de reta. 4. Esta é definida como a integral da resposta ao impulso ao quadrado invertida no tempo.5 Tempo de Reverberação (RT60) e Curva de Decaimento de Schroeder Para medidas acústicas.3.3.

duração e amplitude especificadas pelo usuário. Dessa forma é possível determinar o ganho de saída e o ganho de entrada do equipamento de medição. o ganho de saída e o ganho de entrada do equipamento de medição. O processo de suavização diminui a resolução (e conseqüentemente a rugosidade) do espectro. para equalização de alto-falantes [8].5.35 4.1 Geração de Tom de Referência Foi implementada uma função que simplesmente gera um tom senoidal com a freqüência. Para isso. e é útil tanto para a análise espectral de ruído quanto para medições acústicas. mede-se o nível da resposta do equipamento de medição ao mesmo tom de referência gravado em loop-back. é gerado um tom de referência. O resultado de cada ponto é obtido como a média calculada entre “meio fator de suavização” para trás e “meio fator de suavização” para frente. Em seguida. através de um filtro “média móvel” variável.2 Medição do Nível de Referência Compara-se o nível do sinal elétrico de saída (que deve ter ser medido externamente ao equipamento) e o nível do arquivo de resposta da gravação do tom de referência em loopback com o nível do tom de referência gerado para obter.6 Suavização A suavização é implementada no espectro de potência. para manter a largura da banda de atuação (fator de suavização – razão logarítmica) constante. O espectro é recuperado pela raiz quadrada do espectro de potência suavizado.5. 4. respectivamente. Note-se que essa operação pode consumir muito tempo se o espectro possuir muitos pontos e se for utilizado um fator de suavização alto. 4. e sua tensão medida externamente. por exemplo.5 Calibragem do Ganho do Equipamento de Medição Para permitir a aferição do nível de pressão sonora das medidas acústicas é necessário o conhecimento prévio do ganho de entrada do equipamento de medição. 4. . que deve ser reproduzido pelo equipamento de medição.

4.1 – Fluxograma (simplificado) do funcionamento do Assistente de Medição . de forma resumida no fluxograma a seguir: INÍCIO JÁ POSSUI AUTOREFERÊNCIA? AUTO-REFERÊNCIA NÃO SIM ANÁLISE ESPECTRAL DO RUÍDO GERAÇÃO DA VARREDURA ANÁLISE DA RESPOSTA TIPO DE MEDIÇÃO? ACÚSTICA ELETRÔNICA JÁ POSSUI CALIBRAGEM? SIM NÃO CALIBRAGEM REGISTRO DO MICROFONE CALIBRAGEM DO GANHO MEDIÇÃO DO SISTEMA ANÁLISE ESPECTRAL DO RUÍDO GERAÇÃO DA VARREDURA ANÁLISE DA RESPOSTA FIM Fig.7. Seu funcionamento pode ser visto.36 4.7 Assistente de Medição A função Assistente de Medição foi implementada para guiar o usuário ao longo da seqüência de procedimentos necessários para realizar a medição de sistemas de áudio.

São exibidos os resultados de uma medida acústica (seção 5.1 Medidas Acústicas As medidas acústicas se destinavam a levantar a resposta de uma caixa de som.3 .2. Também são exibidas medidas eletrônicas (seção 5. mesmo posicionamento.1. O programa desenvolvido foi testado utilizando o seguinte sistema: • Computador Apple PowerMacintosh G3 (350 MHz.1 • Audacity 1. o EASERA (utilizado durante os 30 dias do período de avaliação gratuita).3. visando demonstrar a funcionalidade do programa gerado. realizada com o programa desenvolvido e com um software de medição comercial.9 • Scilab 3.1). 576 MB RAM) • Interface de áudio integrada • Sistema operacional MacOS 10. 5.37 Capítulo 5 RESULTADOS EXPERIMENTAIS Os testes aqui apresentados são apenas ilustrativos.2) com e sem ênfase no espectro de ruído. mesmo ambiente) utilizando dois sistemas: um com o programa desenvolvido e outro com um software de medição comercial (EASERA). Foram realizadas duas medidas nas mesmas condições (mesma caixa de som. mesmo microfone.

1 – Esquema das ligações realizadas para as Medidas Acústicas . 5.1.Varredura Logarítmica (duração de 6 segundos) • Análises com suavização de 1/3 oitava Um esquema das ligações realizadas pode ser observado na Figura 5.30 Os testes foram realizados nas seguintes condições: • Caixa de Som .38 O EASERA foi testado utilizando o seguinte sistema: • PC com processador AMD K6-2 (500 MHz).2 (largura) x 3.3 (altura) x 3.NTI MiniSPL (a cerca de 30 cm da caixa de som) • Sinal de Estímulo .15 (comprimento) (mobiliado) • Microfone .Creative CS120 (a 1 m do chão e mais de 1 m de qualquer outra superfície) • Quarto .1. 188 MB RAM • Placa de som C-Media CMI8738/C3DX PCI • Sistema Operacional Windows XP Professional • EASERA 1.0. (interface de áudio) OUT IN Fig.1.

Utilizando o EASERA. (interface de áudio) OUT IN Fig.2 – Esquema das ligações realizadas para a Auto-Referência (programa desenvolvido) e medição em loop-back (EASERA) Serão exibidos os seguintes resultados: Utilizando o programa desenvolvido Auto-Referência o Módulo da Resposta em Freqüência o Fase da Resposta em Freqüência o Parâmetros Secundários Resposta em Freqüência do Microfone o Resposta em freqüência do certificado de calibragem o Resposta em freqüência sintetizada .1.1.2). para verificação da consistência dos resultados obtidos na medição desejada.2) e a síntese da resposta em freqüência do microfone de medição (a partir do certificado de calibragem do microfone). foi realizada diretamente a medição desejada (sem correção da resposta em freqüência do equipamento de medição nem do microfone).1. 5.39 Utilizando o programa desenvolvido. inicialmente foi realizada a auto-referência do equipamento de medição (conectando-o conforme a figura 5. para finalmente realizar a medição desejada (já compensando as respostas do equipamento e do microfone). Posteriormente foi realizado um levantamento da resposta do equipamento de medição conectado em loop-back (conforme a figura 5.

1.40 Medida da Caixa de Som o Resposta ao Impulso o Curva de Decaimento de Schroeder o Módulo da Resposta em Freqüência Utilizando o EASERA Medida da Caixa de Som o Módulo da Resposta em Freqüência Medida em loop-back o Módulo da Resposta em Freqüência (sem suavização) o Módulo da Resposta em Freqüência (com suavização) 5.1.1.1 Auto-Referência Fig. 5.1 Medidas utilizando o programa desenvolvido 5.1 – Módulo da Resposta em Freqüência do Equipamento de Medição .1.1.1.

no caso da medida eletrônica. isso certamente alteraria a fase da resposta medida caso não houvesse a compensação da auto-referência. 19 Deve-se notar que a resposta da auto-referência foi intencionalmente plotada em uma faixa de freqúências maior que a faixa de áudio (de 1 Hz a 22050 Hz) a fim de exibir os filtros passa-altas e passa-baixas (anti-alias) existentes. . Embora na medida da resposta da caixa de som não estaremos interessados na fase da resposta em freqüência. essas diferenças serão compensadas nas medições seguintes. Fig.41 Pode-se notar que a interface de áudio utilizada para o teste com o programa desenvolvido possui resposta praticamente plana dentro da faixa de áudio (20 Hz a 20 kHz)19.2 – Fase da Resposta em Freqüência do Equipamento de Medição É interessante observar que a interface utilizada com o programa desenvolvido possui fase invertida (praticamente igual a -180º em toda a faixa de áudio).1.1. a menos de diferenças pequenas nos extremos. 5.1. De qualquer forma.

5.1.3 – Parâmetros Secundários do Equipamento de Medição Pelos parâmetros secundários do equipamento de medição podem ser observados os limites alcançáveis de qualidade nas medições com o programa desenvolvido utilizando esse equipamento.1. . o erro causado seria menor.1 – Módulo da Resposta em Freqüência do Microfone de Medição (extraído do certificado de calibragem) Pode-se notar pelo certificado de calibragem do microfone de medição utilizado que a não compensação da resposta em freqüência do microfone poderia acarretar um erro de mais de 3 dB na faixa de áudio.1.42 Fig. 5.2 Resposta em Freqüência do Microfone Fig.2.1.1. 5. embora dentro da faixa de resposta da caixa de som medida.1.1.

1.2 – Resposta em Freqüência sintetizada para o Microfone de Medição Pode-se notar que a resposta em freqüência sintetizada para o microfone de medição acompanha bem de perto a curva do certificado de calibragem. com erro bem menor que 1 dB.43 Fig.1. 5. 5. Embora se possa observar indiretamente dela a latência.1. esses dados podem ser obtidos de forma mais conveniente através dos parâmetros secundários calculados.1. 5.2.1 – Resposta ao Impulso (após janelamento) do sistema acústico medido A reposta ao impulso (após o janelamento) aqui apresentada é apenas ilustrativa.3 Medida da Caixa de Som Fig. o tempo de decaimento e o nível de ruído da medição. .1.1.3.

3.1.1.3. mas sobretudo. e não traduz o decaimento real do sistema acústico (que não decairia abaixo do nível de ruído). 5.3 – Parâmetros Secundários do sistema acústico medido .1.1. Note-se que o decaimento brusco no final da curva se deve ao janelamento. Fig.2 – Curva de Decaimento de Schroeder do sistema acústico medido A curva de decaimento de Schroeder exibe o comportamento do decaimento do sistema acústico medido. 5.44 Fig. é calculada para a obtenção do tempo de reverberação.

que não dispunha de síntese de varredura a partir do espectro do ruído. não foi possível (mesmo com a suavização) retirar esse pico. . O nível de distorção relativamente alto se deve ao fato de ser uma caixa de som de pequenas dimensões excitada com um sinal razoavelmente alto (além de não ser uma caixa de altafidelidade).1 e 4. 5. esse exemplo ilustra o problema mencionado nas seções 4. causado pela baixa relação sinal/ruído obtida nessa freqüência. O tempo de reverberação obtido é muito baixo por ter-se realizado a medição com o microfone muito próximo da caixa de som. mas trata-se simplesmente de ruído causado pela interferência da rede elétrica. Não se trata de um pico na resposta do alto-falante de fato. aumentando proporcionalmente o tempo necessário para todo o processo de análise. Como a varredura utilizada era logarítmica20 (e não sintetizada pelo espectro de ruído). que representa um erro no resultado.2. Em todo caso.1. 20 A razão principal de se ter utilizado uma varredura logarítmica foi para permitir a comparação com o resultado do EASERA.45 Os parâmetros secundários obtidos são bastante consistentes com a medição realizada.3. pois para remover esse pico seria necessário gerar uma varredura com ênfase no espectro de ruído com uma duração muito grande. Fig.1.4 – Módulo da Resposta em Freqüência do sistema acústico medido (programa desenvolvido) Na resposta da caixa de som aparece um pico em 60 Hz (embora atenuado pela suavização).

1 – Módulo da Resposta em Freqüência do sistema acústico medido (EASERA) Uma comparação entre a resposta obtida pelo EASERA e a resposta obtida anteriormente pelo programa desenvolvido aponta para uma diferença significativa nos dois extremos do espectro. 5.46 5.2. porém.2.2.2 Medida em loop-back Fig.2 Medidas utilizando o EASERA 5. embora nas freqüências médias o resultado seja praticamente coincidente.2.1.1 Medida da Caixa de Som Fig. Se a placa de som utilizada no teste com o EASERA fosse de boa qualidade.1 – Módulo da Resposta em loop-back (EASERA. que no programa desenvolvido foi compensada a resposta do equipamento de medição e do microfone. sem suavização) . provavelmente o erro seria pequeno. 5.1. contudo a medição em loop-back realizada no equipamento de medição utilizado para o teste com o EASERA irá revelar as causas dessa diferença.1.1.2.1. Deve-se observar. 5. enquanto no EASERA não.1.

5.2 – Módulo da Resposta em loop-back (EASERA. A atenuação em baixas e altas freqüências está claramente afetando a resposta da medição da caixa de som realizada anteriormente. causando uma grande corrugação na resposta . suavização de 1/48 oitava) A resposta em freqüência do equipamento de medição utilizado no teste com o EASERA revelou-se muito distante de um espectro plano. Pode-se observar da análise da resposta sem suavização que o equipamento possui um nível de ruído muito elevado. tornando necessária a suavização para facilitar a análise. Foram realizadas duas medidas nas mesmas condições (mesmo equalizador. mesmo ajuste.2.1.2. .47 A medida do equipamento de medição utilizado com o EASERA conectado em loopback apresentou resultados surpreendentemente ruins. mesma duração do sinal de excitação) utilizando dois sinais de excitação distintos: uma varredura senoidal construída com uma ênfase calculada a partir do espectro do ruído de fundo do dispositivo sob teste e uma varredura senoidal logarítmica. e justifica as diferenças observadas com relação à medição realizada com o programa desenvolvido. Fig.2 Medidas Eletrônicas As medidas eletrônicas se destinavam a levantar a reposta de um filtro implementado utilizando um equalizador gráfico. 5.

1 – Ganhos ajustados no equalizador para o teste .2. 576 MB RAM) • Interface de áudio integrada • Sistema operacional MacOS 10.3.12 dB + 12 dB + 12 dB + 12 dB + 12 dB Tabela 5.48 Foi utilizado o programa desenvolvido (nas duas medidas) com o seguinte sistema: • Computador Apple PowerMacintosh G3 (350 MHz.1 • Sinal de Estímulo .1 • Audacity 1.12 dB .Equalizador Gráfico de 7 bandas (Technics SH-GE70) • Ajustes .2.5 kHz .3 Os testes foram realizados nas seguintes condições: • Dispositivo sob teste .1.Varredura Senoidal (duração de 1.5 kHz 6.5 segundo) • Análises sem suavização 63 Hz 160 Hz 400 Hz 1 kHz 2.3 kHz 12.12 dB .2.9 • Scilab 3.conforme tabela 5.

2. 5.1 – Esquema das ligações realizadas para as Medidas Eletrônicas Serão exibidos os seguintes resultados: Medidas do Equalizador utilizando varredura com ênfase o Análise espectral do ruído (com suavização de 3 oitavas) o Módulo da Resposta em Freqüência o Fase da Resposta em Freqüência o Parâmetros Secundários Medidas do Equalizador utilizando varredura logarítmica o Parâmetros Secundários .1.49 Um esquema das ligações realizadas pode ser observado na Figura 5. Equalizador Gráfico IN OUT (interface de áudio) OUT IN Fig.2.

1. pois o espectro de ruído de fundo típico que decai com a freqüência está sendo alterado pelo próprio filtro implementado (aproximadamente um passa-altas). 5.2.1 Medidas do Equalizador utilizando varredura com ênfase Fig.50 5.1.1 – Espectro do Ruído do Equalizador (com suavização de 3 oitavas) O espectro do ruído de fundo do equalizador apresenta uma característica atípica.2. 5. Fig.2.2 – Módulo da Resposta em Freqüência do Equalizador . Esse espectro será utilizado como ênfase na geração da varredura a ser utilizada como sinal de estímulo.

5.1. Fig.4 – Parâmetros Secundários da medida do equalizador (varredura com ênfase) . Fig.51 Como se trata de um equalizador gráfico podemos identificar cada uma das bandas atuando como sete filtros "independentes". 5.2. o ganho de cada banda interfira no ganho das bandas adjacentes.1.2.3 – Fase da Resposta em Freqüência do Equalizador A resposta em fase revela que esse equalizador introduz uma pequena distorção de fase. mesmo sob a condição mais adversa de possuir duas bandas adjacentes com ganhos respectivamente mínimo e máximo. embora no resultado final.

5. .2 Medidas do Equalizador utilizando varredura logarítmica Fig.1 – Parâmetros Secundários da medida do equalizador (varredura logarítmica) Na medida utilizando varredura logarítmica só puderam ser observadas diferenças nos parâmetros secundários (por isso os demais resultados não foram reproduzidos.2.2. 5. vale notar que o equalizador sob teste introduz pouca distorção harmônica e que não possui latência21 (note-se que a latência do equipamento de medição está sendo compensada e que o equalizador é analógico). por serem praticamente idênticos aos obtidos na medida utilizando varredura com ênfase).52 Na análise dos parâmetros secundários.2. 21 A latência é medida com precisão de 1 sample (1/44100 s). Nota-se que a utilização do espectro de ruído para síntese da varredura produziu um ganho de apenas 2 dB na relação sinal/ruído em relação à utilização da varredura logarítmica. porque o nível de ruído do equipamento era baixo.

também aumenta consideravelmente o tempo necessário para a síntese do sinal. Embora se desejasse obter parâmetros que permitissem automatizar de maneira ótima uma medição. . Em todo caso. limitando a performance. Os melhores resultados ainda são obtidos com uma escolha apropriada de parâmetros para cada caso. ou pelo menos não com razoável complexidade (que implica em tempo) computacional que justificasse sua utilização em todos os casos. isso parece não ser possível. e elevada distorção no alto-falante. Em todo caso. a vantagem pode ser pequena. embora seja capaz de melhorar muito a relação sinal/ruído em medições com nível de ruído muito elevado. O resultado é ótimo quando o espectro do ruído não apresenta picos acentuados. Isso facilitou o desenvolvimento. Uma compensação adequada de picos no espectro de ruído pode exigir a geração de varreduras muito longas. mas certamente prejudicou a performance. deve-se lembrar que o programa desenvolvido é um script interpretado por outro programa. pois não há uma expressão matricial direta. tanto acústicos como eletrônicos. para sistemas que apresentam baixo nível de ruído de fundo. A síntese da varredura pelo espectro de ruído. aumentando proporcionalmente o tempo de análise.53 Capítulo 6 CONCLUSÕES O método proposto consegue realizar o levantamento da função de transferência de sistemas de áudio. e não um executável compilado. as operações de interpolação e a suavização são os procedimentos que consomem mais tempo. Na implementação. Isso porque esses cálculos são realizados ponto a ponto. e que funcionassem para todos os casos. foi observado que a síntese do atraso de grupo. mesmo em medições acústicas com elevado nível de ruído ambiente.

. ao invés de executá-lo como script interpretado dentro de outro software. etc) também podem ser oferecidas. tempos de reverberação filtrados por banda. para equalização de altofalantes). por exemplo). Pode-se utilizar a resposta em freqüência para implementar convolução com um sinal para simular a aplicação do sinal àquele sistema ou pode-se realizar uma deconvolução com um sinal a ser aplicado naquele sistema para corrigir sua resposta em freqüência (por exemplo. Também se pretende melhorar a interface com o usuário. pretende-se portar o código para alguma linguagem de programação para compilá-lo. quando desejado (equalização. Outros sinais de estímulo e outros parâmetros a serem analisados (resposta de cada harmônico. Para melhorar a performance da medição.1 Aplicações e Trabalhos Futuros As informações obtidas pela presente análise podem ser utilizadas para avaliar a qualidade de um sistema de áudio e também para guiar ações corretivas. Também se pode utilizar a resposta ao impulso para o desenvolvimento de um reverberador baseado em convolução rápida. Outra aplicação possível (possivelmente objeto de trabalhos futuros) é a utilização dessas informações para o processamento digital de sinais.54 6. oferecendo interface gráfica.

stacksize (40000000). //////////////////////////////////////////////////////////////////////////////// //limpa e aloca a memoria clear.wav com o Audacity. Nao testado em Linux. end disp(''). disp('16').'). disp('44100 Hz'). //Projeto de Graduacao . fs = input('fs = ').Engenharia Eletrica/Eletronica //Levantamento de Funcao de Transferencia de sistemas de audio //Aluno: Luiz Fausto de Souza Brito //Orientador: Alvaro Ferreira //Ultima alteracao: 20/07/2005 //Obs: Funciona em Windows e MacOS. end cd measures //////////////////////////////////////////////////////////////////////////////// function reftone disp('Programa que gera um tom senoidal de referencia.55 Anexo CÓDIGO FONTE (SCRIPT – SCILAB) mode(-1). //cria a pasta "measures" caso nao exista. if fs == [] then fs = 44100. para armazenamento das medicoes if fileinfo('measures')==[] then mkdir measures. //Tambem e necessario associar arquivos .USU . disp('Para aceitar o valor padrao tecle <ENTER>'). end . disp('Para aceitar o valor padrao tecle <ENTER>'). //bit = resolucao (numero de bits por amostra) do arquivo WAVE disp('Informe a resolucao desejada (em bits).'). disp(''). bit = input('bit = '). //Em ambiente Windows e necessario definir o path do sistema //para incluir a pasta do Audacity e a pasta do Scilab (bin). //Em ambas as plataformas e preciso ajustar uma preferencia do //Audacity que permite reproduzir uma pista enquanto grava outra. disp('Valor Padrao:[bit = 16]').'). //definicoes de inicializacao //fs = frequencia de amostragem do arquivo WAVE (em Hz) disp('Informe a frequencia de amostragem desejada (em Hz). if bit == [] then bit = 16. disp(''). disp(''). disp('Valor Padrao:[fs = 44100 Hz]').

caso exista. else unix('rm -f reftone. //T = tempo desejado para a geracao do sinal (em segundos) disp('Informe a duracao desejada (em segundos). if MSDOS then unix('del reftone. //plota o sinal gerado no dominio do tempo xbasc(0). //apaga o arquivo reftone. disp('1000 Hz').WAV com o sinal de referencia disp('Gravando o arquivo REFTONE. //t = vetor de tempo (em segundos) t = (0:1/fs:T)'. dBFS = input('dBFS = '). end disp(''). em plataformas //compativeis MSDOS ou UNIX disp('Gravando o arquivo REFTONE. disp(''). end disp('').').. disp('').. end //grava a amplitude do sinal de referencia no arquivo //reftone. disp('Concluido!'). //grava o arquivo REFTONE.').dat'). disp('5 s'). //sintese do sinal disp('Gerando o tom de referencia.dat write('reftone. end disp(''). if dBFS == [] then dBFS = -40. disp('Valor Padrao:[T = 5 s]'). disp('Concluido!'). disp('').').wav'). x = 10^(dBFS/20)*sin(2*%pi*F*t).'). wavwrite(x. disp('').fs. disp('Valor Padrao:[dBFS = -40]'). disp('-40').WAV.56 disp(''). disp('Valor Padrao:[F = 1000 Hz]'). disp('Para aceitar o valor padrao tecle <ENTER>').'reftone.dat. //definicoes de variaveis acessorias disp('Definindo variaveis de ambiente.dat'). disp(''). disp('Para aceitar o valor padrao tecle <ENTER>').'). disp('Concluido!').DAT.. if F == [] then F = 1000... disp('Concluido!').'). T = input('T = '). F = input('F = ').').dat'. disp('').bit. disp('Para aceitar o valor padrao tecle <ENTER>'). disp('').. //dBFS = amplitude desejada (em dBFS) disp('Informe a amplitude desejada (em dBFS).dBFS).. //F = frequencia desejada disp('Informe a frequencia desejada (em Hz). if T == [] then T = 5.. .

measure = input('measure = '). disp('')..'Amplitude'). //yn = numero de pontos do sinal de resposta yn = length(y). else unix('rm -f gain. n1 = round(yn/4). disp(''). //detecta o pico do sinal de teste e calcula o ganho de //entrada (dBFS @ 0 dBV) disp('Calculando o ganho de entrada. disp('').1. //apaga o arquivo gain..'Tempo (s)'.').dat'). disp('0 dBV'). disp('').WAV.').WAV) disp('Lendo o arquivo SYSTONE.wav').. xgrid(9). //definicoes de inicializacao //measure = nivel medido da saida (em dBV) disp('Informe o nivel medido da saida (em dBV).DAT. em plataformas //compativeis MSDOS ou UNIX disp('Gravando o arquivo GAIN. disp('Valor Padrao:[measure = 0 dBV]'). disp('').rect=[0.-1. disp('resposta a um tom de referencia..x.'). out = measure-ref..... caso exista.style=5. //definicoes de variaveis acessorias disp('Definindo variaveis de ambiente. disp('').. end . disp('Concluido!'). if MSDOS then unix('del gain. //le o arquivo WAVE da resposta do sistema (SYSTONE.dat'). xtitle('Tom de referencia gerado'. plot2d(t.dat'.1).')..').1]). in = 20*log10(max(abs(y(n1:n2))))-measure. //le o nivel do tom de referencia utilizado disp('Lendo o arquivo REFTONE. end disp('').'). endfunction //////////////////////////////////////////////////////////////////////////////// function setgain disp('Programa que calcula o ganho do sistema a partir da').. y = wavread('systone. //calcula o ganho de saida (dBV @ 0 dBFS) disp('Calculando o ganho de saida.0). disp('Para aceitar o valor padrao tecle <ENTER>'). disp('Concluido!').57 xset("window".').DAT.T. ref = read('reftone. disp(''). disp('Concluido!').dat.. if measure == [] then measure = 0. disp('Concluido!'). disp('Concluido!'). n2 = round(3*yn/4).').

disp('Concluido!'). disp('Ganho de entrada (dBFS @ 0 dBV) = '+string(round(10*in)/10)).dat write('gain.2). endfunction //////////////////////////////////////////////////////////////////////////////// function sweep(ref.58 //grava a amplitude do sinal de referencia no arquivo //reftone. disp('com o espectro especificado'). //le o espectro de referencia a partir do arquivo disp('Lendo o arquivo '+ref+'. //k = progresso da suavizacao (em %) k = 0. disp(''). disp(''). //definicoes de variaveis acessorias disp('Definindo variaveis de ambiente. disp('')... if int(j)>k then k = int(j).. j=100*i/N. H2s(i) = sum(H2(inf(i):sup(i))).[in. disp('Concluido!'). endfunction //////////////////////////////////////////////////////////////////////////////// function Hout = smoothing(Hin. ..'). for i=1:N.out])..out) disp('Programa que gera uma varredura senoidal'). disp('Calculando a suavizacao. //N = numero de pontos do espectro N = length(Hin). disp(''). //df = resolucao do vetor de frequencias (em Hz) df = fs/(2*(N-1)).dat'. //H2 = espectro de potencia H2 = Hin^2.. disp('Ganho de saida (dBV @ 0 dBFS) = '+string(round(10*out)/10)).factor) disp('Programa que calcula a suavizacao do espectro de um sinal')./Nmed). disp(''). '+string(k)+' %').N).fs. //inf = indice inferior da interacao inf = round(f/(2^(factor/2)*df))+1. //Nmed = numero de pontos de cada interacao Nmed = sup-inf+1.. disp('Concluido!').-1. //f = vetor de frequencia f = (0:df:fs/2)'. H = read(ref. disp(''). //H2s = somatorio do espectro de potencia H2s = 0..'). //sup = indice superior da interacao sup = min(round(f*2^(factor/2)/df)+1. //Hout = espectro suavizado do sinal //calcula a suavizacao do espectro de potencia disp('Calculando a suavizacao. end end Hout = sqrt(H2s.').

disp('Valor Padrao:[Tdecay = 5 s]').'). end disp(''). //Flf = frequencia inferior limite disp('Informe a frequencia de corte do passa-altas (em Hz)'). Fhf = input('Fhf = '). disp('Para aceitar o valor padrao tecle <ENTER>'). disp('0 Hz'). if bit == [] then bit = 16. disp('Para aceitar o valor padrao tecle <ENTER>'). disp('Valor Padrao:[bit = 16]'). disp(''). //Fhf = frequencia superior limite disp('Informe a frequencia de corte do passa-baixas (em Hz)'). //dBFS = amplitude do envelope da varredura (em dBFS) disp('Informe a amplitude desejada do envelope'). if dBFS == [] then dBFS = 0. end disp(''). disp(''). Tdecay = input('Tdecay = '). disp('da varredura (em dBFS)'). bit = input('bit = '). disp(''). disp('Para aceitar o valor padrao tecle <ENTER>'). end disp(''). disp(string(fs/2)+' Hz'). disp('Valor Padrao:[dBFS = 0]'). end disp('').1). //fs = frequencia de amostragem fs = H(1. disp('Para aceitar o valor padrao tecle <ENTER>'). if Fhf == [] then Fhf = fs/2. disp(''). disp('representacao da resposta em frequencia (em dB)'). if Tdecay == [] then Tdecay = 5. disp('Valor Padrao:[dynamic = 50 dB]').'). disp('Para aceitar o valor padrao tecle <ENTER>'). //definicoes de inicializacao //Tdecay = tempo estimado necessario para a resposta do //sistema em teste decair ate o patamar de ruido (em segundos) disp('Informe o tempo de decaimento (estimado)'). disp('Valor Padrao:[Flf = 0 Hz]'). disp(''). dBFS = input('dBFS = '). disp('16'). disp('do sistema a ser medido (em segundos).59 disp('Concluido!'). Flf = input('Flf = '). disp('Valor Padrao:[Fhf = '+string(fs/2)+' Hz]'). if Flf == [] then Flf = 0. disp('Para aceitar o valor padrao tecle <ENTER>'). disp('5 s'). disp(''). //bit = resolucao (numero de bits por amostra) do arquivo WAVE disp('Informe a resolucao desejada (em bits). end disp(''). //dynamic = faixa dinamica a ser representada nos graficos disp('Informe a faixa dinamica desejada para'). . disp('0 dBFS').

//f = vetor de frequencias (em Hz) fw = (0:dfw:fs/2)'. //k = progresso do calculo do atraso de grupo (em %) k = 0. //TgSTART = atraso de grupo inicial TgSTART = t(1). //dfH = resolucao do vetor de frequencia do espectro de referencia dfH = fs/(2*(length(H)-1)).1). disp(''). //H = modulo do espectro de referencia H = abs(H(2:size(H. //redefinicao do vetor de frequencias apos o janelamento //dfw = resolucao do vetor de frequencias (em Hz) dfw = fs*2/N. //Nlp = posicao correspondente a frequencia de corte do //passa-baixas Nlp = round(Fhf/df)+1.60 disp(''). //T = duracao da varredura (em segundos) T = N/(2*fs).2)). TgX(2) = TgSTART. //f = vetor de frequencias (em Hz) f = (0:df:fs/2)'. //fH = vetor de frequencia do espectro de referencia fH = (0:dfH:fs/2)'.'). //Nout = posicao do fade-out Nout = N/2 . //TgEND = atraso de grupo final TgEND = t(N/2). disp('Concluido!'). end disp(''). //df = resolucao do vetor de frequencias (em Hz) df = fs/N. //calcula a interpolacao do espectro de referencia para o . //definicoes de variaveis acessorias disp('Definindo variaveis de ambiente.1). //TgX = atraso de grupo sintetizado TgX(1:Nt) = 0. disp('50 dB').N/2000. if dynamic == [] then dynamic = 50. //fSTART = frequencia de inicio da varredura (em Hz) fSTART = df. //facilitando a FFT) N = 2^ceil(log2(2*Tdecay*fs)). //Nlf = posicao correspondente ao limite desejado para //frequencia inferior Nlf = round(Flf/dfw)+1. //t = vetor de tempo (em segundos) t = (0:dt:T-dt)'.. //Nt = posicao limite (correspondente a frequencia de Nyquist) Nt = (N/2)+1. //Nhf = posicao correspondente ao limite desejado para //frequencia superior Nhf = round(Fhf/dfw)+1. //Nhp = posicao correspondente a frequencia de corte do //passa-altas Nhp = round(Flf/df)+1.1)+%i*H(2:size(H. //Nin = posicao do fade-in Nin = N/1000. //dt = resolucao do vetor de tempo (em segundos) dt = 1/fs. dynamic = input('dynamic = ').. //fEND = frequencia de fim da varredura (em Hz) fEND = fs/2. //N = numero de amostras da varredura (otimizado para ser a //menor potencia de 2 necessaria para acomodar 2x o Tdecay.

'nearest')..5*cos((%pi:%pi/(Nin-1):2*%pi)')+0..f.*(0. phiX = phiX-(0:Nt-1)'/(Nt-1)*dphiXmax.. x = real(ifft(X)).H.5)... //atualizacao de X apos janelamento no tempo disp('Recalculando a FFT da varredura. //sintese do atraso de grupo disp('Calculando o atraso de grupo. .. modX = interp1(fH.5*cos((0:%pi/((N/2)-Nout):%pi)')+0. //calculo da fase disp('Calculando a fase.').*(0. //fade-out x(Nout:N/2) = x(Nout:N/2). disp('').. //limita a energia de baixas frequencias disp('Calculando filtro passa-altas.. disp('').'). modX(Nlp:Nt) = modX(Nlp:Nt).. disp(''). //CmodX2 = incremento do atraso de grupo CmodX2 = C*modX^2... disp('Concluido!'). //phiX = fase desejada para o dominio da frequencia phiX = .61 //numero de pontos desejado disp('Calculando a interpolacao do espectro.*10^((6/20)*log2(f(2:Nhp)/f(Nhp))). TgX(i) = TgX(i-1)+CmodX2(i). disp('Concluido!').').*exp(%i*phiX).. j=100*i/(Nt-2).2*%pi*cumsum(TgX)*df.').'). //limita a energia de altas frequencias disp('Calculando filtro passa-baixas. for i = 3:Nt. disp(''). disp('Calculando o atraso de grupo.*10^((-6/20)*log2(f(Nlp:Nt)/f(Nlp))). //X = FFT sintetizada para o sinal de estimulo disp('Calculando a FFT da varredura. disp('Concluido!'). disp('').').5). //janelamento x = x(1:N/2).... disp('').. //x = IFFT de X disp('Sintetizando a varredura. //C = relacao entre duracao da varredura e energia total C = (TgEND-TgSTART)/sum(modX(1:Nt)^2).'). disp('Concluido!'). modX(2:Nhp) = modX(2:Nhp). //correcao da fase para obter fase 0 em fs/2 dphiXmax = phiX(Nt)-(int(phiX(Nt)/(2*%pi))*2*%pi). //construcao do espectro negativo por simetria X(Nt+1:N) = real(X(N/2:-1:2))-%i*imag(X(N/2:-1:2)). if int(j)>k then k = int(j)..'). disp('Concluido!'). '+string(k)+' %'). //fade-in x(1:Nin) = x(1:Nin).. end end disp('Concluido!'). disp(''). modX(1) = 0. X = modX(1:Nt). //ajuste de amplitude x = 10^(dBFS/20)*x/max(abs(x)). disp('Concluido!').

.x. XdB = modulo de X [Xphi.XTg. disp('do ruido (em oitavas)'). disp(''). xset("window".fs.out) disp('Programa que analisa o espectro do ruido'). plot2d(fw(Nlf:Nhf).out). disp('Valor Padrao:[res = 1 Hz]').logflag="ln". Xphi = Xphi*%pi/180. disp('').rect=[20. //definicoes de inicializacao //res = resolucao desejada para a analise do ruido (em Hz) disp('Informe a resolucao desejada para a analise'). disp('(Informe 0 para desligar a suavizacao)'). xset("window".0. //plota o atraso de grupo do sinal gerado xbasc(1). wavwrite(x.'Amplitude'). //corrige a descontinuidade da representacao do atraso de grupo for i=1:Nhf-Nlf. xtitle('Sinal gerado no dominio do tempo'. plot2d(t.'Frequencia (Hz)'. endfunction //////////////////////////////////////////////////////////////////////////////// function nanalyze(in.style=5).20000. //XTg = atraso de grupo XTg = diff(Xphi)/(2*%pi*dfw).'c').'Modulo (dB)'). xgrid(9).0).bit. //factor = fator de suavizacao do espectro (em oitavas) disp('Informe o fator de suavizacao do espectro'). xgrid(9).logflag="ln". if XTg(i) < 0 then XTg(i)=T+XTg(i).rect=[20. //grava o arquivo out com a varredura disp('Gravando o arquivo '+out+'. disp('do ruido (em Hz)').'Tempo (s)'. end end disp('Concluido!'). xgrid(9). disp('')..0]). . disp('Para aceitar o valor padrao tecle <ENTER>'). disp('1 Hz'). //plota o sinal gerado no dominio da frequencia xbasc(0). plot2d(fw(Nlf:Nhf-1).'Tempo (s)').20000. disp('').T]).2). end disp('').style=5. XdB] = phasemag(X(Nlf:Nhf)'. xtitle('Modulo do sinal'.62 X = fft(x). //normalizacao X = X/max(abs(X(Nlf:Nhf))). res = input('res = '). //Xphi = fase de X (de -inf a 360o). xset("window". disp('Concluido!'). if res == [] then res = 1. //plota o sinal gerado no dominio do tempo xbasc(2).style=5.'Frequencia (Hz)'.'). disp('Valor Padrao:[factor = 3 oitavas]'). disp('(Informe 0 para desligar o janelamento e as medias)'). xtitle('Atraso de grupo'.1).-dynamic.XdB.

disp('Concluido!'). h = y((i-1)*N+1:i*N)..'). for i=1:M.'). em plataformas //compativeis MSDOS ou UNIX disp('Gravando o arquivo '+out+'. //Fhf = frequencia de exibicao superior limite Fhf = 20000. disp(''). //N = numero de pontos de cada amostra do ruido if res == 0 then N = 2^floor(log2(length(y))).. disp('3 oitavas'). if factor == [] then factor = 3. end //HdB = espectro da resposta do microfone (em dB) disp('Calculando o espectro em dB. end disp(''). caso exista.. //calculo do espectro de potencia medio disp('Calculando o espectro de potencia medio. //apaga o arquivo de saida.').. //H2 = espectro de potencia H2(Nt. disp('Concluido!'). H = fft(h). disp('Concluido!'). end //Nt = posicao correspondente a frequencia de Nyquist Nt = N/2+1. else N = 2^ceil(log2(fs/res)).. disp(''). //definicoes de variaveis acessorias disp('Definindo variaveis de ambiente.. //Nhf = posicao correspondente ao limite desejado para //frequencia superior Nhf = round(Fhf/df)+1.fs. //df = resolucao do vetor de frequencia df = fs/N. //Nlf = posicao correspondente ao limite desejado para //frequencia inferior Nlf = round(Flf/df)+1. //Flf = frequencia de exibicao inferior limite Flf = 20. disp('').63 disp('Para aceitar o valor padrao tecle <ENTER>'). disp(''). //suavizacao do espectro if factor <> 0 then H = smoothing(H. [y.').fs. //le o arquivo WAVE do ruido capturado (in) disp('Lendo o arquivo '+in+'. HdB = 20*log10(H/max(H(Nlf:Nhf))). end H = sqrt(H2/M)..factor). disp(''). if MSDOS then . //M = numero de amostras de ruido M = int(length(y)/N).')..bit] = wavread(in). disp('Concluido!'). H2 = abs(H(1:Nt))^2 + H2.1) = 0.. //f = vetor de frequencia f = (0:df:fs/2)'.. factor = input('factor = ').

//definicoes de inicializacao //res = resolucao desejada (em Hz) disp('Informe a resolucao desejada (em Hz)'). xset("window". endfunction //////////////////////////////////////////////////////////////////////////////// function analysis(stim.'Modulo (dB)'). . disp('Valor Padrao:[res = 1 Hz]').1)]). disp('1 Hz').resp. disp('Valor Padrao:[factor = 0 oitava]').style=5).logflag="ln". xtitle('Analise Espectral do Ruido '. //Flf = frequencia de exibicao inferior limite disp('Informe o limite de exibicao para frequencia').impresp. //factor = fator de suavizacao do espectro (em oitavas) disp('Informe o fator de suavizacao do espectro (em oitavas)'). if res == [] then res = 1. if PB == [] then PB = 10. disp('Concluido!'). if factor == [] then factor = fp.HdB(Nlf:Nhf).64 unix('del '+out'). //plota o espectro do ruido xbasc(0). disp('(Informe 0 para desligar o janelamento)'). end disp(''). disp('banda de passagem (em dB)'). disp('Valor Padrao:[factor = 1/3 oitava]'). disp(''). 0).'Frequencia (Hz)'. disp('10 dB'). xgrid(9). else fp = 0. disp('Para aceitar o valor padrao tecle <ENTER>'). disp('').sys. end disp(''). if ac==%t then fp = 1/3. else unix('rm -f '+out). disp('Para aceitar o valor padrao tecle <ENTER>'). disp(''). disp('Valor Padrao:[PB = 10 dB]').freqresp. PB = input('PB = '). factor = input('factor = '). disp('(Informe 0 para desligar a suavizacao)'). end disp('Para aceitar o valor padrao tecle <ENTER>'). //PB = faixa dinamica para avaliacao da faixa de passagem disp('Informe a faixa dinamica para avaliacao da'). disp(''). end //grava o espectro do ruido no arquivo de saida write(out. res = input('res = ').H zeros(Nt. end disp('').[fs 0. disp(string(round(fp*100)/100)+' oitava').ac) disp('Programa que analisa a resposta de um sistema'). plot2d(f(Nlf:Nhf). disp('').

disp('100 dB').. disp('Para aceitar o valor padrao tecle <ENTER>'). //definicoes de variaveis acessorias disp('Definindo variaveis de ambiente. Flf = input('Flf = '). disp('Valor Padrao:[dynamic2 = 100 dB]'). if Flf == [] then Flf = 20. disp(''). disp(''). y = wavread(resp). [x. disp('').. disp('Para aceitar o valor padrao tecle <ENTER>'). //Ny = numero de amostras da resposta do sistema Ny = length(y). Fhf = input('Fhf = ').').fs.65 disp('inferior (em Hz)').. //Nx = numero de amostras do sinal de teste Nx = length(x). disp('20 Hz'). end disp('').'). end disp(''). disp('Valor Padrao:[dynamic1 = 50 dB]'). dynamic1 = input('dynamic1 = '). disp(''). disp('Valor Padrao:[Flf = 20 Hz]'). disp(''). //Nw = numero de pontos do janelamento if res == 0 then . if Fhf == [] then Fhf = 20000.. disp('50 dB'). //Fhf = frequencia de exibicao superior limite disp('Informe o limite de exibicao para frequencia'). end disp(''). //le a resposta do sistema disp('Lendo o arquivo '+resp+'.. disp('superior (em Hz)'). if dynamic2 == [] then dynamic2 = 100. end disp('').. disp('Valor Padrao:[Fhf = 20000 Hz]'). disp('Concluido!').').bit] = wavread(stim). //le o sinal de teste utilizado disp('Lendo o arquivo '+stim+'. disp('da resposta ao impulso (em dB)'). //dynamic2 = faixa dinamica para representacao da resposta ao //impulso disp('Informe a faixa dinamica desejada para representacao'). //N = numero de pontos da primeira analise N = 2^ceil(log2(Nx+Ny)). disp(''). disp('20000 Hz'). //dynamic1 = faixa dinamica para representacao da resposta em //frequencia disp('Informe a faixa dinamica desejada para representacao'). dynamic2 = input('dynamic2 = '). disp('Para aceitar o valor padrao tecle <ENTER>'). if dynamic1 == [] then dynamic1 = 50. disp('da resposta em frequencia (em dB)'). disp('Para aceitar o valor padrao tecle <ENTER>'). disp('Concluido!').

'). disp('Concluido!').. .1.. disp('Concluido!'). H = Y. y(Ny+1:N)=0.'). disp('Calculando o nivel de pressao sonora maximo. disp('Concluido!').')... dBFS = 10*log10(sum(y(maxyi-0. Y = fft(y).66 Nw = N/2./X.4*fs)).'). h = real(ifft(H))...N/2).1). disp(''). x(Nx+1:N)=0.. disp('Concluido!'). gain = read('gain. disp('Concluido!'). end. X = fft(x)....1*fs:maxyi+0.').dat'.'). //calcula a resposta ao impulso disp('Calculando a resposta ao impulso.. //carrega a sensibilidade do microfone disp('Lendo o arquivo MIC.98. disp(''). disp('').1)... disp(''). disp('Concluido!').DAT. disp('Calculando a FFT do sinal de resposta.. //Nlf = posicao correspondente ao limite desejado para //frequencia inferior Nlf = round(Flf/df)+1.DAT. //calcula a potencia maxima do sinal de resposta //(janela de 200 ms) [maxy maxyi] = max(y). //t = vetor de tempo (em segundos) t = (0:dt:(N/2-1)*dt)'. //calcula a resposta em frequencia disp('Calculando a resposta em frequencia. disp(''). //calcula a FFT do sinal de teste e da resposta disp('Calculando a FFT do sinal de teste.2.dat'. disp('Concluido!'). //calcula o nivel de pressao sonora dBspl = dBFS-gain(1)-sensitivity+93. else Nw = min(2^ceil(log2(fs/res)). if ac==%t then //carrega o ganho do sistema disp('Lendo o arquivo GAIN. disp('Concluido!'). disp('').'). disp('Concluido!'). //df = resolucao do vetor de frequencias (em Hz) df = fs/Nw.'). disp(''). //f = vetor de frequencias (em Hz) f = (0:df:fs/2)'. disp(''). end //Ajusta o tamanho dos sinais para analise disp('Ajustando o tamanho dos sinais para analise. //dt = resolucao do vetor de tempo (em segundos) dt = 1/fs..1*fs)^2)/(0. sensitivity = read('mic.. //Nhf = posicao correspondente ao limite desejado para //frequencia superior Nhf = round(Fhf/df)+1.

RT60 = 60/(-mean(diff(RTdB(maxhi:win)))*fs). h2 = h2/max(h2). if win < Nw then noisew = noise1+noise2*(Nw-win)*0. latency = (maxhi-1)/fs.'). disp(''). //calcula a relacao sinal/ruido da janela de analise. . noise2 = sum(h(win+1:N/2)^2). end SNR = 10*log10(signal/noisew). disp('').maxhi] = max(abs(h(1:N/2))).(h(maxhi:N/2)^2)']. THD = 100*sqrt(sum(h(N/2+1:N)^2)/sum(h^2)). determina o limiar de //decaimento disp('Calculando a relacao sinal/ruido da janela de analise. if ac==%t then //calcula a distancia (em metros) disp('Calculando a distancia. RT(max(Nw.').. disp('Concluido!').DAT. distance = latency*340. disp('').1..1)-1)*(fs/5)+maxhi. else unix('rm -f latency. sn1 = sum(h(1:win)^2). win = (find(dh2>=-2^(-2*bit)... latency = latency-syslat.dat').. noise1 = noise2*win/(N/2-win). end end //calcula a distorcao harmonica (em %) disp('Calculando a distorcao harmonica. if MSDOS then unix('del latency. signal = sn1-noise1. disp('Concluido!').. end //grava a latencia do sistema no arquivo LATENCY.75/(N/2-win). disp('Concluido!'). syslat = read('latency. RTdB = 10*log10(RT/max(RT))..DAT write('latency.')..dat'. disp('Concluido!'). else noisew = noise2*Nw/(N/2-win).win):-1:1)^2)/fs. disp('').DAT. disp('').:)). h2 = smooth([(maxhi:N/2). //calcula a latencia disp('Calculando a latencia.DAT..fs/5). caso exista.67 disp(''). [maxh. else //carrega a latencia do sistema disp('Lendo o arquivo LATENCY.win):-1:1) = cumsum(h(max(Nw. dh2 = diff(h2(2. disp('Concluido!'). if sys==%t then //apaga o arquivo LATENCY.')..').'). disp('').').1)..dat'.. disp('Concluido!'). disp('')..dat').latency). em plataformas //compativeis MSDOS ou UNIX disp('Gravando o arquivo LATENCY. disp('Concluido!'). //calcula o tempo de reverberacao RT60 (s) disp('Calculando o tempo de reverberacao..

hdB. disp('Concluido!').')....').0).').h(1:max(win.. //plota a resposta ao impulso xbasc(0).*(0.. //fH = vetor de frequencia da medicao atual fH = (0:dfH:fs/2)'. //apaga o arquivo impresp.68 //janelamento da resposta ao impulso disp('Calculando janelamento da resposta ao impulso. disp(''). end end hdB = 10*log10(h2). xset("window".01.1]).h(1:maxhi-1)]. //corrige a resposta em frequencia if sys==%f then //dfH = resolucao do vetor de frequencia da medicao atual dfH = fs/Nw. disp('').style=5. Nend = Nw. end //grava a reposta ao impulso no arquivo impresp write(impresp. disp(''). xgrid(9)... disp(''). //carrega a resposta em frequencia do sistema . //solucao para o problema de singularidade for i=1:Nend.. disp('Concluido!'). disp('Concluido!'). end //define o espectro da resposta a partir do janelamento da //resposta ao impulso disp('Calculando a FFT da resposta ao impulso. h2 = h(1:Nend)^2/max(h(1:Nend)^2).-dynamic2-1. if h2(i)==0 then h2(i)=%eps. h = [h(maxhi:Nw).t(Nend)*1. H = fft(h). //corte da resposta ao impulso (janela de analise) h = h(1:Nw).Nw))]). caso exista. //fade-out if win < Nw then h(win:Nw) = h(win:Nw). end disp('Concluido!').'). else Nend = win. //calculo e normalizacao da resposta ao impulso em dB disp('Calculando a resposta ao impulso em dB.').5*cos((0:%pi/(Nw-win):%pi)')+0.. //correcao da latencia if maxhi <> 1 then disp('Corrigindo a latencia.'Tempo (s)'.rect=[-t(Nend)/100. H = H(1:Nw/2+1). em plataformas //compativeis MSDOS ou UNIX disp('Gravando o arquivo '+impresp+'. if MSDOS then unix('del '+impresp).[fs.. disp('Concluido!').5). xtitle ('Resposta ao Impulso'.RT60. disp('').'Amplitude (dB)'). else unix('rm -f '+impresp). plot2d (t(1:Nend).

fH. M = read('mic.1)+%i*M(2:NMt+1.2)..').69 disp('Lendo o arquivo SYSRESP. disp('Calculando variaveis auxiliares. //numero de pontos do espectro completo do microfone NM = 2*(size(M. disp('Concluido!'). S = read('sysresp.').. //dfM = resolucao do vetor de frequencia do microfone dfM = fs/NM. disp('Concluido!'). disp('Concluido!'). //posicao correpondente a fs/2 no espectro do sistema NSt = NS/2+1. //numero de pontos do espectro completo do sistema NS = 2*(size(S.1)-2)...').-1.S. //compensa a resposta do sistema disp('Compensando a resposta do sistema.'). disp('').2). //calcula a interpolacao do espectro do sistema para o //numero de pontos desejado disp('Calculando a interpolacao do espectro do sistema. disp(''). disp('Concluido!'). disp(''). //fH = vetor de frequencia do microfone fM = (0:dfM:fs/2)'. disp('').M.fH.. disp('').fft'.fft'. end end //suavizacao do espectro if factor <> 0 then H = smoothing(H.FFT./M.').'nearest').2).fs.2).... disp('')... disp('').. disp('Concluido!')... H = H. //calcula a interpolacao do espectro do microfone para o //numero de pontos desejado disp('Calculando a interpolacao do espectro do microfone.FFT. disp('Concluido!').1)-2).1)+%i*S(2:NSt+1. disp('Calculando variaveis auxiliares. disp('Concluido!'). //S = resposta em frequencia do sistema S = S(2:NSt+1.factor). //posicao correpondente a fs/2 no espectro do microfone NMt = NM/2+1..'). disp(''). S = interp1(fS.'nearest').-1. disp('Reconstruindo o espectro do microfone./S.. if ac==%t then //carrega a resposta em frequencia do microfone disp('Lendo o arquivo MIC.').. disp(''). end . disp('').. H = H. M = interp1(fM.'). disp('Concluido!'). //fS = vetor de frequencia do sistema fS = (0:dfS:fs/2)'.'). disp('Concluido!'). //dfS = resolucao do vetor de frequencia do sistema dfS = fs/NS. disp('Concluido!').. //compensa a resposta do microfone disp('Compensando a resposta do microfone. disp('Reconstruindo o espectro do sistema. //M = resposta em frequencia do microfone M = M(2:NMt+1.')...

'Tempo (s)'.1). //plota o modulo da resposta em frequencia do sistema xbasc(1).[fs 0. if MSDOS then unix('del '+freqresp).. disp('').'Modulo (dB)').rect=[Flf. disp('RT60 = '+string(round(10*RT60)/10)+' s').2). end disp('').real(H(1:Nw/2+1)) imag(H(1:Nw/2+1))]). xgrid(9).'Frequencia (Hz)'.logflag="ln". xset("window". caso exista.').rect=[Flf. //calculo e normalizacao da resposta em frequencia em dB.'Frequencia (Hz)'.Hphi(Nlf:Nhf). disp(''). else unix('rm -f '+freqresp). disp('dBspl(max) = '+string(round(10*dBspl)/10)).real(H)).5. end disp('THD = '+string(round(100*THD)/100)+' %'). xtitle('Modulo da Resposta em Frequencia'. plot2d(f(Nlf:Nhf). plot2d (t(1:length(RTdB)).-185. end //grava a reposta em frequencia no arquivo freqresp write(freqresp. //calculo da resposta em fase disp('Calculando a resposta em modulo e fase.Fhf.Fhf. fl = f(find(HdB>-PB..logflag="ln". if ac==%t then disp('Distancia = '+string(round(100*distance)/100)+' m'). if ac==%t then //plota a curva de decaimento de Schroeder xbasc(3). xgrid(9). xset("window".'Fase (graus)').. fh = f(Nw/2+2-find(HdB(Nw/2+1:-1:1)>-PB.'). //calculo da banda de passagem disp('Calculando a banda de passagem.1]). //plota a fase da resposta em frequencia do sistema xbasc(2).1)).3). xtitle('Fase da Resposta em Frequencia'. disp('SNR (da janela de analise) = '+string(round(10*SNR)/10)+' dB').185]).RTdB..'). plot2d(f(Nlf:Nhf)..'Decaimento (dB)'). disp('Concluido!'). endfunction //////////////////////////////////////////////////////////////////////////////// function microphone . HdB = 20*log10(abs(H)/max(abs(H(Nlf:Nhf)))). disp('Concluido!').HdB(Nlf:Nhf)..style=5).1)). disp('Concluido!'). disp('').-dynamic1-1. xset("window". xgrid(9). em plataformas //compativeis MSDOS ou UNIX disp('Gravando o arquivo '+freqresp+'. else disp('Latencia = '+string(round(100000*latency)/100)+' ms'). xtitle ('Curva de decaimento de Schroeder'. Hphi = (180/%pi)*atan(imag(H).5. disp('fl (@ -'+string(PB)+' dB) = '+string(round(fl))+' Hz').70 //apaga o arquivo freqresp. disp('fh (@ -'+string(PB)+' dB) = '+string(round(fh))+' Hz').

71
disp('Programa que armazena os parametros'); disp('do microfone de medicao'); disp('Valores pre-ajustados conforme especificacoes'); disp('do microfone MiniSPL'); disp(''); //definicoes de inicializacao //sensitivity = sensibilidade (em dBV/Pa) disp('Informe a sensibilidade (em dBV/Pa)'); disp('Valor Padrao:[sensitivity = -40 dBV/Pa]'); disp('Para aceitar o valor padrao tecle <ENTER>'); disp(''); sensitivity = input('sensitivity = '); if sensitivity == [] then sensitivity = -40; disp('-40 dBV/Pa'); end disp(''); //mic = arquivo que contem a respota em frequencia do microfone disp('Informe o arquivo que contem a resposta em frequencia'); disp('do microfone'); disp('Valor Padrao:[mic = MiniSPL.fft]'); disp('Para aceitar o valor padrao tecle <ENTER>'); disp(''); mic = input('mic = ',"string"); if length(mic) == 1 then mic = 'MiniSPL.fft'; disp('MiniSPL.fft'); end disp(''); //le o espectro do microfone a partir do arquivo disp('Lendo o arquivo '+mic+'...'); H = read(mic,-1,2); disp('Concluido!'); disp(''); //definicoes de variaveis acessorias disp('Definindo variaveis de ambiente...'); //fs = frequencia de amostragem fs = H(1,1); //H = resposta em frequencia do microfone H = H(2:size(H,1),1)+%i*H(2:size(H,1),2); //HdB = resposta em frequencia do microfone (em dB) HdB = 20*log10(abs(H)); //df = resolucao do vetor de frequencia df = fs/(2*(length(H)-1)); //f = vetor de frequencia f = (0:df:fs/2)'; //Flf = frequencia de exibicao inferior limite Flf = 20; //Fhf = frequencia de exibicao superior limite Fhf = 20000; //Nlf = posicao correspondente ao limite desejado para //frequencia inferior Nlf = round(Flf/df)+1; //Nhf = posicao correspondente ao limite desejado para //frequencia superior Nhf = round(Fhf/df)+1; disp('Concluido!'); disp(''); //apaga o arquivo MIC.DAT, caso exista, em plataformas //compativeis MSDOS ou UNIX disp('Gravando o arquivo MIC.DAT...'); if MSDOS then unix('del mic.dat'); else unix('rm -f mic.dat'); end

72
//grava as caracteristicas do microfone no arquivo MIC.DAT write('mic.dat',sensitivity); disp('Concluido!'); disp(''); //apaga o arquivo MIC.FFT, caso exista, em plataformas //compativeis MSDOS ou UNIX disp('Gravando o arquivo MIC.FFT...'); if MSDOS then unix('del mic.fft'); else unix('rm -f mic.fft'); end //grava o espectro da resposta do microfone no arquivo MIC.FFT write('mic.fft',[fs 0;real(H) imag(H)]); disp('Concluido!'); disp(''); //plota a resposta em frequencia do microfone xbasc(0); xset("window", 0); xtitle('Resposta em frequencia do microfone','Frequencia (Hz)','Modulo (dB)'); plot2d(f(Nlf:Nhf),HdB(Nlf:Nhf),logflag="ln",style=5); xgrid(9); endfunction //////////////////////////////////////////////////////////////////////////////// //Sintese da resposta do MiniSPL function MiniSPL disp('Programa que grava o espectro de resposta do'); disp('microfone MiniSPL'); disp(''); //definicoes de inicializacao //fs = frequencia de amostragem disp('Informe a frequencia de amostragem desejada (em Hz)'); disp('Valor Padrao:[fs = 44100 Hz]'); disp('Para aceitar o valor padrao tecle <ENTER>'); disp(''); fs = input('fs = '); if fs == [] then fs = 44100; disp('44100 Hz'); end disp(''); //res = resolucao desejada para o espectro (em Hz) disp('Informe a resolucao desejada para o espectro (em Hz)'); disp('Valor Padrao:[res = 1 Hz]'); disp('Para aceitar o valor padrao tecle <ENTER>'); disp(''); res = input('res = '); if res == [] then res = 1; disp('1 Hz'); end disp(''); //definicoes de variaveis acessorias disp('Definindo variaveis de ambiente...'); //N = numero de pontos do espectro N = 2^(ceil(log2(fs/res))-1)+1; //df = resolucao do vetor de frequencias (em Hz) df = fs/(2*(N-1)); //f = vetor de frequencias (em Hz) f = (0:df:fs/2)'; //Flf = frequencia inferior limite Flf = 20;

73
//Fhf = frequencia superior limite Fhf = 20000; //Nlf = posicao correspondente ao limite desejado para frequencia inferior Nlf = round(Flf/df)+1; //Nhf = posicao correspondente ao limite desejado para frequencia superior Nhf = round(Fhf/df)+1; //factor = factor de suavizacao (em oitavas) factor = 1/2; disp('Concluido!'); disp(''); //define a resposta em frequencia do microfone //HdB = resposta em frequencia do microfone (em dB) disp('Calculando o espectro da resposta do microfone (em dB)...'); //de 0 a 20 Hz n1 = round(20/df)+1; HdB(1:n1) = 0.4; //de 20 a 25 Hz n2 = round(25/df)+1; HdB(n1:n2) = 0.4+0.4*log(f(n1:n2)/f(n1))/log(f(n2)/f(n1)); //de 25 a 40 Hz n3 = round(40/df)+1; HdB(n2:n3) = 0.8-0.8*log(f(n2:n3)/f(n2))/log(f(n3)/f(n2)); //de 40 a 1 kHz n4 = round(1000/df)+1; HdB(n3:n4) = 0; //de 1kHz a 4 kHz n5 = round(4000/df)+1; HdB(n4:n5) = 1.6*log(f(n4:n5)/f(n4))/log(f(n5)/f(n4)); //de 4 kHz a 16 kHz n6 = round(16000/df)+1; HdB(n5:n6) = 1.6-5*log(f(n5:n6)/f(n5))/log(f(n6)/f(n5)); //de 16 kHz a fs/2 HdB(n6:N) = -3.4; disp('Concluido!'); disp(''); //calculo da resposta em frequencia (em escala linear) disp('Convertendo a resposta para escala linear...'); H = 10^(HdB/20); disp('Concluido!'); disp(''); //suavizacao do espectro if factor <> 0 then H = smoothing(H,fs,factor); end //calculo da resposta em frequencia (em dB) disp('Recalculando a resposta em dB...'); HdB = 20*log10(H); disp('Concluido!'); disp(''); //apaga o arquivo MiniSPL.fft, caso exista, em plataformas //compativeis MSDOS ou UNIX disp('Gravando o arquivo MiniSPL.fft...'); if MSDOS then unix('del MiniSPL.fft'); else unix('rm -f MiniSPL.fft'); end //grava as caracteristicas do microfone no arquivo mic.dat write('MiniSPL.fft',[fs 0;H zeros(N,1)]); disp('Concluido!'); disp(''); //plota a resposta em frequencia do microfone xbasc(0); xset("window", 0); xtitle('Resposta em frequencia','Frequencia (Hz)','Modulo (dB)'); plot2d(f(Nlf:Nhf),HdB(Nlf:Nhf),logflag="ln",style=5,rect=[20,-8,20000,8]);

74
xgrid(9); endfunction //////////////////////////////////////////////////////////////////////////////// function pink(out) disp('Programa que gera espectro rosa'); disp(''); //definicoes de inicializacao //fs = frequencia de amostragem disp('Informe a frequencia de amostragem desejada (em Hz)'); disp('Valor Padrao:[fs = 44100 Hz]'); disp('Para aceitar o valor padrao tecle <ENTER>'); disp(''); fs = input('fs = '); if fs == [] then fs = 44100; disp('44100 Hz'); end disp(''); //res = resolucao desejada para o espectro (em Hz) disp('Informe a resolucao desejada para o espectro (em Hz)'); disp('Valor Padrao:[res = 1 Hz]'); disp('Para aceitar o valor padrao tecle <ENTER>'); disp(''); res = input('res = '); if res == [] then res = 1; disp('1 Hz'); end disp(''); //Flf = frequencia inferior limite disp('Informe a frequencia inferior limite (em Hz)'); disp('Valor Padrao:[Flf = 0 Hz]'); disp('Para aceitar o valor padrao tecle <ENTER>'); disp(''); Flf = input('Flf = '); if Flf == [] then Flf = 0; disp('0 Hz'); end disp(''); //definicoes de variaveis acessorias disp('Definindo variaveis de ambiente...'); //N = numero de pontos do espectro completo N = 2^ceil(log2(fs/res)); //Nt = posicao correspondente a frequencia de Nyquist Nt = N/2+1; //df = resolucao do vetor de frequencia df = fs/N; //f = vetor de frequencia f = (0:df:fs/2)'; //Nlf = posicao correspondente ao limite desejado para //frequencia inferior Nlf = round(Flf/df)+1; disp('Concluido!'); disp(''); disp('Calculando o espectro desejado...'); //limita a energia de baixa frequencia H(1:Nlf) = 10^((-3/20)*log2(f(Nlf+1))); //espectro rosa H(Nlf+1:Nt) = 10^((-3/20)*log2(f(Nlf+1:Nt))); disp('Concluido!'); disp('');

disp(''). skip = input(''. disp('na pasta: '+pwd()).H zeros(Nt..[fs 0.wav')<>[]) then disp('Existe uma medicao do sistema. caso exista.').')."string").dat')<>[])&(fileinfo('sysresp.1)]). while syscal.'). smeas = %f. while smeas. em plataformas //compativeis MSDOS ou UNIX disp('Gravando o arquivo '+out+'. //Executa sequencia de medicao disp(''). disp(''). disp(''). disp('').75 //apaga o arquivo de saida. disp('Levantamento de Funcao de Transferencia'). disp('Deseja utiliza-la (S/N)?'). if MSDOS then unix('del '+out').wav')<>[])&(fileinfo('syssweep. //Protege as definicoes das funcoes predef('all').fft')<>[]) then disp('Existe um registro de calibragem do sistema. //Calibragem da resposta do sistema de medicao syscal = %t. endfunction //////////////////////////////////////////////////////////////////////////////// function measure //Assistente de medicao //Desliga o controle de paginacao lines(0). disp(''). disp('Para aceitar a resposta padrao tecle <ENTER>'). disp('Resposta Padrao:[S]'). else unix('rm -f '+out). disp(''). disp(''). //Verifica a existencia de medicao do sistema if (fileinfo('nsweep1. skip = input(''. if (skip<>'n')&(skip<>'N') then break end end smeas = %t. if (skip<>'n')&(skip<>'N') then break end . disp('Resposta Padrao:[S]'). disp('de sistemas de audio').. syscal = %f. disp('Concluido!'). disp('Para aceitar a resposta padrao tecle <ENTER>')."string"). disp('Deseja utiliza-lo (S/N)?'). //Verifica a existencia de registro da resposta do sistema if (fileinfo('latency. //Aviso: localizacao dos arquivos disp('Aviso: os arquivos das medicoes devem ser armazenados'). end //grava o espectro rosa no arquivo de saida write(out.

end nanalyze 'sysnoise. end input('Tecle <ENTER> quando estiver pronto.wav'.'). disp('Para aceitar a resposta padrao tecle <ENTER>'). end //Analiza a resposta do sistema disp('O arquivo de varredura gerado (NSWEEP1. disp('Para aceitar a resposta padrao tecle <ENTER>').fft' sweep 'sysnoise.wav' 'sysnoise.WAV.'). if (skip<>'n')&(skip<>'N') then break end end sysnoise = %t.fft' 'nsweep1. end analysis('nsweep1.wav' input('Tecle <ENTER> para continuar. Conecte o sistema em')... disp('Resposta Padrao:[S]').wav'. disp(''). disp(''). disp('').. if MSDOS then unix('audacity'). Grave a resposta do sistema') disp('em loop-back.'syssweep. //Verifica a existencia de medicao de ruido do sistema if fileinfo('sysnoise.. else unix('open -a audacity').. disp('Deseja utiliza-la (S/N)?').. nsweep1 = %f.').wav')<>[] then disp('Existe uma varredura otimizada pelo ruido do sistema. sysnoise = %f.wav')<>[] then disp('Existe uma medicao do ruido do sistema."string")..'). skip = input(''. disp(''). disp('Resposta Padrao:[S]'). skip = input(''.'sysresp. disp('loop-back e grave alguns segundos de silencio. if MSDOS then unix('nsweep1.wav')..').').. disp('Deseja utiliza-la (S/N)?').'). else unix('open -a audacity nsweep1. while sysnoise.%f) input('Tecle <ENTER> para continuar.'). disp(''). input('Tecle <ENTER> para continuar.WAV. disp('').'). while nsweep1. input('Tecle <ENTER> para continuar. disp('aberto pelo Audacity. disp('Exporte o arquivo como SYSNOISE.WAV) sera').. end input('Tecle <ENTER> quando estiver pronto. disp(''). Exporte o arquivo como SYSSWEEP."string").%t.76 end nsweep1 = %t.. disp('').').wav').').ift'. //Verifica a existencia de varredura otimizada pelo ruido do sistema if fileinfo('nsweep1. .. if (skip<>'n')&(skip<>'N') then break end end //Gera uma varredura com o espectro do ruido do sistema disp('O Audacity sera aberto. disp('').'sysresp. disp(''). disp('').fft'.

if (ae<>'e')&(ae<>'E') then //Calibragem de Ganho cal = %t.. disp('Para aceitar a resposta padrao tecle <ENTER>'). input('Tecle <ENTER> para continuar.'). end //Ajusta o ganho disp('O arquivo do tom de referencia gerado (REFTONE."string").').dat')<>[])&(fileinfo('reftone.WAV)'). Ajuste o nivel do ganho. while tone.. else unix('open -a audacity reftone. disp(''). disp('').'). if (skip<>'n')&(skip<>'N') then break end end //Gera um tom de referencia reftone input('Tecle <ENTER> para continuar.. disp(''). disp('')..'). disp('Acustica (a) ou Eletronica (e)?'). disp('').dat')<>[] then disp('Existe um registro de calibragem de ganho. disp('Resposta Padrao:[S]'). if MSDOS then unix('reftone."string"). disp('Para aceitar a resposta padrao tecle <ENTER>').wav')<>[]) then disp('Existe um tom de referencia. end //limpa a memoria clear.'). disp('Resposta Padrao:[S]'). //Medicao Acustica ou Eletronica disp('Informe o tipo de medicao que deseja realizar:'). disp('em loop-back. if (skip<>'n')&(skip<>'N') then break end end tone = %t. end input('Tecle <ENTER> quando estiver pronto.wav'). disp('mensure o nivel de saida e grave a resposta do sistema').."string"). skip = input(''. disp('Resposta padrao:[a]'). disp('Deseja utiliza-lo (S/N)?'). cal = %f. disp('Deseja utiliza-lo (S/N)?'). disp('sera aberto pelo Audacity. disp(''). setgain input('Tecle <ENTER> para continuar. //Verifica a existencia de tom de referencia if (fileinfo('reftone.')..WAV.77 disp(''). Exporte o arquivo como SYSTONE.wav'). skip = input(''. disp(''). disp('Para aceitar a resposta padrao tecle <ENTER>'). disp(''). while cal. ae = input(''. tone = %f..'). //Verifica a existencia de registro de calibragem de ganho if fileinfo('gain.. disp('').'). . disp(''). disp('').

disp('Resposta Padrao:[S]'). disp('Deseja utiliza-lo (S/N)?'). while rnoise.wav')<>[]) then disp('Existe uma medicao de sala ou equipamento. disp('Deseja utiliza-la (S/N)?'). disp('Para aceitar a resposta padrao tecle <ENTER>'). skip = input(''."string")."string"). while micr. while nsweep2. if (skip<>'n')&(skip<>'N') then break end end microphone input('Tecle <ENTER> para continuar. skip = input(''.dat')<>[])&(fileinfo('mic. //Verifica a existencia de medicao da sala ou equipamento if (fileinfo('nsweepa."string").').'). disp(''). while rmeas. disp(''). disp(''). //Verifica a existencia de registro de parametros de microfone if (fileinfo('mic. if (skip<>'n')&(skip<>'N') then break end end nsweep2 = %t. disp(''). if (skip<>'n')&(skip<>'N') then break end . disp('Resposta Padrao:[S]'). skip = input(''. disp('Para aceitar a resposta padrao tecle <ENTER>'). disp('Deseja utiliza-la (S/N)?'). disp('')."string").'). disp('Resposta Padrao:[S]'). disp('Deseja utiliza-la (S/N)?').. if (skip<>'n')&(skip<>'N') then break end end rnoise = %t. rnoise = %f.'). disp('Resposta Padrao:[S]'). skip = input(''. disp(''). rmeas = %f. disp('')..wav')<>[])&(fileinfo('rsweep. disp(''). micr = %f.wav')<>[] then disp('Existe uma varredura otimizada pelo ruido da sala ou equipamento. //Verifica a existencia de varredura otimizada pelo ruido ambiente if fileinfo('nsweep2. end end rmeas = %t. disp(''). nsweep2 = %f. disp('Para aceitar a resposta padrao tecle <ENTER>'). disp('Para aceitar a resposta padrao tecle <ENTER>').').fft')<>[]) then disp('Existe um registro de parametros de microfone.wav')<>[] then disp('Existe uma medicao do ruido da sala ou equipamento. //Verifica a existencia de medicao de ruido da sala ou equipamento if fileinfo('rnoise.78 end //Ajusta os parametros do microfone de medicao micr = %t.

').%t) else analysis('nsweep2.. disp('nenhuma superficie reflexiva. onde V e o volume').wav'). else unix('open -a audacity').'). if MSDOS then unix('nsweep2.ift'.79 end //Gera uma varredura com o espectro do ruido da sala ou equipamento disp('O Audacity sera novamente aberto. disp('Exporte o arquivo como RSWEEP. input('Tecle <ENTER> para continuar. disp('Exporte o arquivo como RNOISE. disp('Dica: para obter uma medida de tempo de reverberacao'). end //Analiza a resposta da sala ou equipamento disp('O arquivo de varredura gerado (NSWEEP2.'). disp('pelo Audacity. disp('').WAV. if (ae<>'e')&(ae<>'E') then disp('').. disp('').').. disp('').'rresp. end disp('')..wav'. disp('ou equipamento e grave alguns segundos de silencio. end nanalyze 'rnoise. disp(''). else unix('open -a audacity nsweep2.wav').'rresp..%f. disp('alto-falante de ser 2*sqrt(V/(340*T)).wav'.').'rsweep..wav' 'rnoise. end if (ae<>'e')&(ae<>'E') then analysis('nsweep2.fft'.fft' sweep 'rnoise.'rresp.'). a distancia minima do microfone para o'). disp(''). disp('da sala (em m^3) e T e o tempo de decaimento estimado.fft'.WAV. endfunction //////////////////////////////////////////////////////////////////////////////// //autorun measure .').').'). disp('consistente..wav'..'). input('Tecle <ENTER> para continuar. disp('').'rresp.')..wav'. Grave a resposta da sala ou equipamento.%f) end //limpa a memoria clear.wav' input('Tecle <ENTER> para continuar.ift'.%f.'rsweep.WAV) sera aberto')..fft' 'nsweep2. end input('Tecle <ENTER> quando estiver pronto. disp('O microfone tambem nao pode estar a menos de 1 m de'). if MSDOS then unix('audacity'). end input('Tecle <ENTER> quando estiver pronto. Conecte o microfone').

Digital Signal Processing.hut. [9] REVERBERATION TIME COMPUTATION BY USING THE REVERSE-TIME INTEGRATED IMPULSE RESPONSE <http://www. [8] PELTONEN.html> Acesso em: 25 jul. New York: McGraw Hill. . 2001. Simultaneous Measurement of Impulse Response and Distortion with a Swept-sine technique. 48. ANGELL. ed. New York. p. 44. 2005. p. [7] PEEBLES. 350. vol. Angelo. Response measurements: Overview and Practical Aspects. SCHAFER. San Diego: California Technical Publishing. David.430/download/Response_measurements. vol. The Scientist and Engineer's Guide to Digital Signal Processing.80 Referências Bibliográficas [1] BORISH. J. J. 31. Timo.com/appnote12.AES. 1174.AES. Design. [2] FARINA. 2001. ed. James B. [5] MÜLLER. 1975. 2005. Swen. An Efficient Algorithm for Measuring the Impulse Response Using Pseudorandom Noise.anselmgoertz. Frantisek.AES. 2.purebits. <http://www. New York. 1996. 1999. Peyton Z. 478. [10] SMITH. Transfer-Function Measurements with Sweeps. Preprint 5453.acoustics. <http://www. In: AES CONVENTION. 111. Steven W.pdf> Acesso em: 25 jul. 1983. New York.de/Page10383/Monkey_Forest_dt/Manual_dt/aes-swpenglish. Englewood Cliffs: Prentice-Hall. Random Variables and Random Signal Principles. Paulo. [3] GRIESINGER. Ronald W. MASSARANI. vol. Alan V. Probability. p. Generation and Analysis of Digital Test Signals. Jeffrey.. 2001. 4. New York.PDF> Acesso em: 25 jul. Beyond MLS – Occupied Hall Measurement with FFT Techniques. 2005. [6] OPPENHEIM.fi/teaching/S-89. J. New York. [4] KADLEK. 2000.