Você está na página 1de 81

UNIVERSIDADE SANTA RSULA CENTRO DE CINCIAS EXATAS E TECNOLOGIA CURSO DE ENGENHARIA ELTRICA

LEVANTAMENTO DE FUNO DE TRANSFERNCIA DE SISTEMAS DE UDIO

Luiz Fausto de Souza Brito

Rio de Janeiro Julho/2005

Levantamento de Funo de Transferncia de Sistemas de udio

Luiz Fausto de Souza Brito

Monografia

apresentada

ao

Curso

de

Engenharia Eltrica como requisito parcial para obteno do ttulo de Graduado em Engenharia Eltrica. Orientador: lvaro da Silva Ferreira

Rio de Janeiro Julho/2005

B862 2005

Brito, Luiz Fausto de Souza Levantamento de Funo de Transferncia de Sistemas de udio / Luiz Fausto de Souza Brito Rio de Janeiro, 2005 80 f. Monografia (Curso de Engenharia Eltrica) Universidade Santa rsula, 2005. Bibliografia: f. 80 1. Processamento Digital de Sinais. 2. udio 3. Funo de Transferncia. 4. Varredura Senoidal I. Titulo CCD 621.389

Levantamento de Funo de Transferncia de Sistemas de udio

Luiz Fausto de Souza Brito

Monografia

apresentada

ao

Curso

de

Engenharia Eltrica como requisito parcial para obteno do ttulo de Graduado em Engenharia Eltrica.

Aprovada em 28 de julho de 2005

BANCA EXAMINADORA ____________________________________________________ Prof. Ms. lvaro da Silva Ferreira Universidade Santa rsula ____________________________________________________ Prof. Dr. Stphane L. G. Quebaud Universidade Santa rsula ____________________________________________________ Prof. Ms. Jos Ricardo Potier de Oliveira Universidade Santa rsula ____________________________________________________ Eng. Guilherme Machado Goehringer SKY Brasil Servios Ltda

Ao meu pai, pelo esprito investigativo. minha me, pela serenidade. Ao meu Deus, pela perseverana.

AGRADECIMENTOS

Delart Estdios Cinematogrficos Ltda, por prover os recursos necessrios elaborao desse trabalho. Ao Professor Stphane Quebaud, pelo acolhimento e orientao. Ao Professor lvaro Ferreira, pela dedicao e por acreditar no projeto. A Swen Mller, por me apresentar tecnologia de medio que utilizei, e cujo desenvolvimento deve muito a ele. Aos bons profissionais do udio no Brasil, que me inspiraram. A todos que me apoiaram de alguma forma, meus sinceros agradecimentos.

"Se algum tem ouvidos para ouvir, que oua" (Mc 4,23)

RESUMO
Muitas tcnicas de medio de funo de transferncia de sistemas de udio tm sido propostas nos ltimos anos. Entretanto, sob condies adversas (principalmente rudo e distoro) a maioria no capaz de obter resultados satisfatrios. Uma tcnica recente, utilizando varredura senoidal com nfase arbitrria, pode obter resultados timos mesmo sob as condies adversas supracitadas. O presente trabalho visa apresentar um mtodo de medio de parmetros de sistemas de udio, tanto eletrnicos quanto acsticos, baseado em varredura senoidal. Utiliza-se como nfase a estimativa do espectro do rudo de fundo do sistema sob teste. As vantagens e desvantagens desse mtodo sero discutidas em comparao com outros. Ser apresentada uma implementao em software do algoritmo de medio proposto. Sero exibidos alguns resultados com a finalidade de demonstrar a funcionalidade do mtodo, comparar medidas com e sem nfase no espectro de rudo, e confrontar os resultados obtidos com um software de medio comercial. Por fim, algumas possveis aplicaes da tcnica de medio proposta so citadas.

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

SUMRIO
1. INTRODUO .................................................................................................................. 14 1.1 Motivao ............................................................................................................ 14 1.2 Plano de Trabalho ................................................................................................ 15 2. ALGUNS MTODOS DE MEDIO EXISTENTES ..................................................... 16 2.1 Gravador de Nvel (Level Recorder) ................................................................... 16 2.2 Time Delay Spectrometry (TDS) ......................................................................... 17 2.3 Varredura Senoidal Discreta ................................................................................ 19 2.4 Impulsos ............................................................................................................... 19 2.5 Maximum Length Sequence (MLS) .................................................................... 20 2.6 Anlise com FFT de dois canais .......................................................................... 21 2.7 Anlise com FFT de um canal ............................................................................. 22 3. MTODO PROPOSTO ...................................................................................................... 24 4. IMPLEMENTAO .......................................................................................................... 28 4.1 Anlise Espectral do Rudo .................................................................................. 29 4.1.1 Gerao de Espectro Rosa ..................................................................... 30 4.2 Gerao da varredura ........................................................................................... 30 4.3 Anlise da Resposta ............................................................................................. 31 4.3.1 Determinao da Resposta ao Impulso ................................................. 31 4.3.2 Determinao da Resposta em Freqncia ........................................... 32 4.3.3 Determinao dos Parmetros Secundrios .......................................... 32 4.3.3.1 Presso Sonora Mxima ......................................................... 32 4.3.3.2 Latncia e Distncia da Fonte Sonora .................................... 33 4.3.3.3 Distoro Harmnica Total (THD) ........................................ 33 4.3.3.4 Relao Sinal/Rudo (SNR) da Janela de Anlise ................. 33 4.3.3.5 Tempo de Reverberao (RT60) e Curva de Decaimento de Schroeder ..................................... 34 4.3.3.6 Banda de Passagem ................................................................ 34

4.4 Registro das Caractersticas do Microfone de Medio ...................................... 34 4.4.1 Sntese da Resposta em Freqncia do microfone ............................... 34 4.5 Calibragem do Ganho do Equipamento de Medio ........................................... 35 4.5.1 Gerao de Tom de Referncia ............................................................. 35 4.5.2 Medio do Nvel de Referncia ........................................................... 35 4.6 Suavizao ........................................................................................................... 35 4.7 Assistente de Medio ......................................................................................... 36 5. RESULTADOS EXPERIMENTAIS .................................................................................. 37 5.1 Medidas Acsticas ............................................................................................... 37 5.1.1 Medidas utilizando o programa desenvolvido ...................................... 40 5.1.1.1 Auto-Referncia ..................................................................... 40 5.1.1.2 Resposta em Freqncia do Microfone .................................. 42 5.1.1.3 Medida da Caixa de Som ........................................................ 43 5.1.2 Medidas utilizando o EASERA ............................................................. 46 5.1.2.1 Medida da Caixa de Som ........................................................ 46 5.1.2.2 Medida em loop-back ............................................................. 46 5.2 Medidas Eletrnicas ............................................................................................. 47 5.2.1 Medidas do Equalizador utilizando varredura com nfase .................... 50 5.2.2 Medidas do Equalizador utilizando varredura logartmica ................... 52 6. CONCLUSES .................................................................................................................. 53 6.1 Aplicaes e Trabalhos Futuros ........................................................................... 54 Anexo - CDIGO FONTE (SCRIPT SCILAB) .................................................................. 55 Referncias Bibliogrficas ...................................................................................................... 80

LISTA DE FIGURAS
Fig. 2.1.1 Diagrama de medio utilizando o Gravador de Nvel ....................................... 16 Fig. 2.2.1 Diagrama de medio utilizando TDS ................................................................ 17 Fig. 2.5.1 Diagrama de medio utilizando MLS ................................................................ 20 Fig. 2.6.1 Diagrama de medio utilizando FFT de dois canais ......................................... 21 Fig. 2.7.1 Diagrama de medio utilizando FFT de um canal ............................................. 22 Fig. 2.7.2 Sntese de sinais a partir do domnio da freqncia ............................................ 23 Fig. 3.1 Diagrama de medio utilizando o Mtodo Proposto ............................................ 24 Fig. 3.2 Descarte da distoro harmnica na anlise com varreduras ................................. 26 Fig. 3.3 Gerao de varredura com nfase arbitrria ........................................................... 26 Fig. 4.7.1 Fluxograma (simplificado) do funcionamento do Assistente de Medio .......... 36 Fig. 5.1.1 Esquema das ligaes realizadas para as Medidas Acsticas ............................. 38 Fig. 5.1.2 Esquema das ligaes realizadas para a Auto-Referncia e loop-back ............... 39 Fig. 5.1.1.1.1 Mdulo da Resposta em Freqncia do Equipamento de Medio .............. 40 Fig. 5.1.1.1.2 Fase da Resposta em Freqncia do Equipamento de Medio .................... 41 Fig. 5.1.1.1.3 Parmetros Secundrios do Equipamento de Medio ................................. 42 Fig. 5.1.1.2.1 Mdulo da Resposta em Freqncia do Microfone de Medio .................. 42 Fig. 5.1.1.2.2 Resposta em Freqncia sintetizada para o Microfone de Medio ............. 43 Fig. 5.1.1.3.1 Resposta ao Impulso (aps janelamento) do sistema acstico medido ......... 43 Fig. 5.1.1.3.2 Curva de Decaimento de Schroeder do sistema acstico medido ................. 44 Fig. 5.1.1.3.3 Parmetros Secundrios do sistema acstico medido ................................... 44 Fig. 5.1.1.3.4 Mdulo da Resposta em Freqncia do sistema acstico (programa) .......... 45 Fig. 5.1.2.1.1 Mdulo da Resposta em Frequncia do sistema acstico (EASERA) .......... 46 Fig. 5.1.2.2.1 Mdulo da Resposta em loop-back (EASERA, sem suavizao) ................. 46 Fig. 5.1.2.2.2 Mdulo da Resposta em loop-back (EASERA, suavizao de 1/48 oitava) . 47 Fig. 5.2.1 Esquema das ligaes realizadas para as Medidas Eletrnicas ........................... 49 Fig. 5.2.1.1 Espectro do Rudo do Equalizador (com suavizao de 3 oitavas) .................. 50 Fig. 5.2.1.2 Mdulo da Resposta em Freqncia do Equalizador ....................................... 50 Fig. 5.2.1.3 Fase da Resposta em Freqncia do Equalizador ............................................ 51

Fig. 5.2.1.4 Parmetros Secundrios da medida do equalizador (varredura com nfase) ... 51 Fig. 5.2.2.1 Parmetros Secundrios da medida do equalizador (varredura logartmica) ... 52

LISTA DE TABELAS
Tabela 5.2.1 Ganhos ajustados no equalizador para o teste ................................................ 35

14

Captulo 1
INTRODUO
1.1 Motivao
O presente trabalho visa apresentar um mtodo de medio de parmetros de sistemas de udio, tanto eletrnicos quanto acsticos. A importncia desse tipo de medio est no fato desses parmetros alterarem a qualidade percebida de um sistema de som. Essas medies tambm se justificam pelas suas diversas aplicaes, que vo desde simplesmente estabelecer critrios de avaliao de qualidade e de comparao entre dispositivos; passam pelo estabelecimento de aes corretivas, quando algum parmetro no est de acordo com o desejado (por exemplo, para obter uma reproduo sonora de alta-fidelidade) e vo at a simulao ou implementao virtual dos sistemas medidos. Embora existam diversos mtodos disponveis para realizar o levantamento da funo de transferncia de sistemas de udio, muitas vezes eles apresentam erros causados pelas noidealidades dos sistemas sob teste. Isso porque, normalmente, se assume que o sistema linear e se despreza o rudo de fundo. Assumindo-se que todo sistema de udio apresenta algum grau de no-linearidade, e que est sujeito a rudo, desejar-se-ia estimar esses efeitos e, se possvel, isol-los, ou pelo menos minimiz-los, no levantamento da resposta linear do sistema (funo de transferncia e/ou resposta ao impulso). Para alcanar estes objetivos, apresentada a tcnica da varredura senoidal com nfase no espectro do rudo. Essa tcnica capaz de otimizar a relao sinal/rudo de uma medio, alm de separar a distoro harmnica. O mtodo proposto se baseia no artigo Transfer-Function Measurement with Sweeps [5], de Swen Mller e Paulo Massarani.

15

1.2 Plano de Trabalho


No captulo 1, realizamos uma breve introduo sobre o problema em questo. No captulo 2, apresentaremos alguns dos mtodos existentes para o levantamento de funo de transferncia de sistemas de udio. Suas vantagens e desvantagens sero brevemente discutidas. No captulo 3, apresentaremos o mtodo da varredura senoidal com nfase no espectro de rudo. No captulo 4 ser apresentada a implementao realizada para o mtodo proposto, utilizando um software de computao cientfica (Scilab) e um software de edio e gravao de udio (Audacity). No captulo 5 sero apresentados alguns resultados experimentais obtidos, com a finalidade de demonstrar a funcionalidade do mtodo, comparar medidas com e sem nfase no espectro de rudo, e confrontar os resultados obtidos com um software de medio comercial. No captulo 6 sero apresentadas as concluses e apontadas algumas aplicaes especficas que podem derivar das medies realizadas, alm de possveis caminhos para a continuidade desse trabalho.

16

Captulo 2
ALGUNS MTODOS DE MEDIO EXISTENTES
Todos os mtodos de medio disponveis aplicam um sinal de estmulo que contenha todas as freqncias de interesse no dispositivo sob teste e comparam o espectro da resposta com o espectro do estmulo. As diferenas esto em qual sinal de estmulo empregado e como se processa a anlise da resposta. A seguir ser realizada uma breve descrio de alguns mtodos existentes. Explicaes e referncias mais detalhadas sobre os mtodos podem ser encontradas em [5].

2.1 Gravador de Nvel (Level Recorder)

DUT

+ -

Atuador (motor)
Sensor (potencimetro)

Fig. 2.1.1 Diagrama de medio utilizando o Gravador de Nvel (adaptado de [5])

17 O Gravador de Nvel um dos mtodos mais antigos disponvel. Um gerador analgico de varredura senoidal logartmica usado como excitao para o dispositivo sob teste (DUT). A sada do dispositivo ligada a um retificador seguido de um filtro passabaixas, que alimenta uma das entradas de um amplificador diferencial, cuja outra entrada alimentada por um divisor de tenso que utiliza um potencimetro de preciso controlado pela posio de uma caneta. A sada desse amplificador controla a posio da mesma caneta. Esta se desloca sobre um papel que se move com velocidade constante. O resultado desenhado no papel o mdulo da resposta em freqncia do dispositivo. A suavizao da representao da resposta pode ser controlada atravs da velocidade da caneta. Esse mtodo no mede a fase da resposta em freqncia. Possui preciso horizontal limitada pela oscilao da velocidade do papel e resoluo vertical discretizada pelo potencimetro de preciso. Alm do mais, o resultado est armazenado apenas em papel, no podendo ser realizado nenhum ps-processamento.

2.2 Time Delay Spectrometry (TDS)

Fig. 2.2.1 Diagrama de medio utilizando TDS (extrado de [5])

18 Um mtodo interessante o TDS (Time Delay Spectrometry). Seu diagrama de operao apresentado na Figura 2.2.1. Ele utiliza um gerador analgico de varreduras senoidal e cossenoidal lineares (sincronizadas). A sada senoidal ligada ao dispositivo sob teste, cuja resposta multiplicada pelas sadas do gerador atrasadas (para compensar a latncia do dispositivo sob teste), passando finalmente por filtros passa-baixas. O multiplicador produz termos com a soma e a diferena das freqncias de suas entradas. Como os sinais possuem praticamente a mesma freqncia instantnea, o termo da diferena estar praticamente em 0 Hz, enquanto o termo da soma ser rejeitado pelo filtro passabaixas. Ento, da multiplicao com o seno teremos a parte real da resposta em freqncia e da multiplicao com o cosseno teremos a parte imaginria. Como s so computados na resposta os termos da sada com a mesma freqncia instantnea da entrada (e como essa freqncia est aumentando progressivamente), os termos da resposta atrasados por reflexes (no caso de medidas acsticas) e os produtos de distoro so quase completamente rejeitados, permitindo, por exemplo, realizar uma medio com um alto-falante em uma sala e obter praticamente a mesma resposta de uma medio em campo aberto (ou em condies anecicas). Tambm o rudo de banda larga praticamente rejeitado (exceto claro pelas componentes praticamente coincidentes com a freqncia instantnea da varredura). Sua maior desvantagem utilizar varredura linear1 (com espectro branco), enquanto o rudo de fundo presente em praticamente todas as medies possui mais energia em baixas freqncias (com espectro aproximadamente rosa ou vermelho). Isso leva a uma baixa relao sinal/rudo em baixas freqncias porque, de fato, a varredura dura menos tempo nas oitavas inferiores. A preciso tambm menor em baixas freqncias por causa do passa-baixas, levando a oscilaes (ripple) na resposta.

De fato, para utilizar uma varredura no linear (logartmica, por exemplo) seria preciso que os filtros passabaixas tivessem freqncia de corte varivel.

19

2.3 Varredura Senoidal Discreta


A varredura senoidal discreta o mtodo mais demorado e que resulta na menor resoluo. Por outro lado, resulta na melhor relao sinal/rudo possvel. Analisa freqncia por freqncia utilizando tons senoidais puros. A resposta do sistema pode ser retificada e filtrada ou pode ser feita a FFT armazenando somente a informao relativa freqncia em teste2. A segunda alternativa gera resultados melhores, pois filtra somente a informao da freqncia em teste (passa-banda perfeito). Tambm pode ser usado para medir apenas os harmnicos e calcular a distoro harmnica. Em medies acsticas, para descartar as reflexes necessrio que a janela de FFT seja menor que o retardo da reflexo (o que reduz a resoluo da resposta).

2.4 Impulsos
Obviamente, a forma mais simples de se obter uma resposta ao impulso de um dispositivo aplicando um impulso na entrada. A resposta em freqncia pode ser obtida, ento, por FFT. Contudo, resulta na pior relao sinal/rudo. Impulsos gerados de forma analgica (bater palmas, disparo de arma de fogo, exploso de balo) no possuem espectro plano, mas um espectro que possui um alto grau de imprevisibilidade, portanto que no pode ser compensado. O prefervel seria utilizar um impulso digital atravs de um conversor D/A, em que se pudesse medir e compensar a resposta do prprio sistema de medio. Para elevar a relao sinal rudo, pode-se realizar a mdia de respostas a impulsos peridicos. Contudo deve-se observar que o perodo de repetio do impulso deve ser maior que a durao3 da resposta ao impulso do dispositivo, para que no haja superposio das respostas.

2 3

Desde que o sinal seja exatamente peridico dentro da janela de FFT. Na prtica, a durao da resposta ao impulso medida at que este decaia at o limiar de rudo.

20

2.5 Maximum Length Sequence (MLS)

CLOCK

SHIFT REG ZOH XOR


Fig. 2.5.1 Diagrama de medio utilizando MLS (adaptado de [5])

DUT

FHT

MLS (Maximum Length Sequence) uma seqncia binria que pode ser gerada de forma simples com um registrador de deslocamento e uma porta XOR, conectados de forma que todos os estados (valores) possveis (menos o zero) ocorram seqencialmente no registrador medida que se aplicam pulsos de clock. A seqncia gerada peridica, com perodo 2N-1, onde N o nmero de estgios do registrador de deslocamento. Pode-se demonstrar que essa seqncia possui espectro praticamente branco [1]. Para maximizar a energia entregue ao dispositivo analgico (ou acstico) a ser testado, o valor do sinal mantido constante entre cada duas amostras. Por possuir espectro branco pode-se utilizar a correlao cruzada entre o sinal de estmulo e a resposta do dispositivo para obter a resposta ao impulso. Normalmente a correlao cruzada calculada de forma mais eficiente no domnio da freqncia. Entretanto, para o MLS, a Transformada Rpida de Hadamard (FHT) calcula a correlao cruzada no domnio do tempo de forma muito eficiente (apenas utilizando somas e subtraes). Isso foi uma grande vantagem desse mtodo quando foi desenvolvido, na dcada de 80, principalmente quando o que se desejava era apenas a reposta ao impulso (no a resposta em freqncia), como em algumas anlises acsticas. Hoje, entretanto, o poder de processamento disponvel (mesmo a baixo custo) permite realizar a FFT de forma muito rpida. As desvantagens do MLS so sua grande vulnerabilidade distoro e varincia no tempo e, principalmente, seu espectro branco. Pode ser utilizada pr-nfase, porm com uso de FFT na cadeia de anlise.

21

2.6 Anlise com FFT de dois canais

Fig. 2.6.1 Diagrama de medio utilizando FFT de dois canais (extrado de [5])

A anlise com FFT de dois canais possui um princpio de funcionamento bem simples: para qualquer sinal de excitao, a resposta em freqncia obtida dividindo o espectro da sada pelo espectro do sinal da entrada. Com isso, qualquer sinal de estmulo pode ser utilizado. Contudo, a confiabilidade do resultado depende de se ter um sinal com energia suficiente em todas as faixas de freqncia para garantir uma boa relao sinal/rudo. Com sinais aleatrios, geralmente muitas mdias so necessrias para se obter um bom resultado. Para isso, o sinal precisa ser dividido em diversas janelas temporais para a anlise. O tamanho das janelas limita a resoluo da anlise.4

A resoluo de uma anlise por FFT de fs/N, onde fs a freqncia de amostragem e N o nmero

de pontos da janela utilizada. As janelas de FFT devem possuir um nmero de pontos que seja potncia de 2.

22

2.7 Anlise com FFT de um canal


A anlise com FFT de um canal semelhante anlise com dois canais, descrita na seo 2.6, porm substitumos o sinal de excitao, que poderia ser um sinal qualquer, por um sinal determinstico peridico com comprimento 2N. Seu espectro de referncia5 pode ser previamente armazenado6, permitindo a anlise com FFT de apenas um canal. Contudo ainda se faz a mesma restrio de que o sinal de estmulo tenha energia suficiente em todas as faixas de freqncia de interesse para se alcanar uma boa relao sinal/rudo. Como o sinal peridico, no so necessrias vrias mdias para se obter resultados consistentes (embora esse recurso possa ser utilizado para aumentar ainda mais a relao sinal/rudo). preciso apenas medir a resposta do sistema em regime permanente, ou seja, necessrio reproduzir o sinal pelo menos duas vezes (para estabelecer o regime permanente) para gravar na segunda. Se for desejvel rejeitar as reflexes, no caso de uma medio acstica, pode-se realizar a IFFT da resposta em freqncia, aplicar uma janela que exclua as reflexes e calcular novamente a FFT, obtendo-se ento a resposta em condies praticamente anecicas.

Fig. 2.7.1 Diagrama de medio utilizando FFT de um canal (extrado de [5])

5 6

O espectro de referncia o inverso do espectro do sinal de estmulo aplicado (obtido pela FFT desse sinal). Note-se que no necessrio armazenar o espectro completo, mas apenas meio espectro, ou seja, at a freqncia de Nyquist (fs/2). Os pontos restantes (que corresponderiam s freqncias negativas) podem ser recuperados utilizando a propriedade de que o espectro de sinais reais possui simetria real e anti-simetria imaginria.

23 A condio de energia suficiente em todas as bandas pode ser garantida caso o sinal de estmulo seja sintetizado a partir do espectro desejado (nfase). Supondo espectros de banda larga, basicamente, sinais de trs categorias podem ser gerados com um mesmo mdulo no domnio da freqncia, mas com diferentes relaes de fase: com fase nula obteremos um impulso; com fase aleatria obteremos um rudo; e com atraso de grupo crescente7 obteremos uma varredura.

Fig. 2.7.2 Sntese de sinais a partir do domnio da freqncia (extrado de [5])

O atraso de grupo tambm pode ser decrescente, gerando uma varredura invertida das altas para as baixas freqncias mas precisa ser uma funo montona. Se uma determinada relao for mantida entre o mdulo e o atraso de grupo, conforme ser visto no captulo 3, obteremos uma varredura senoidal com envelope constante

24

Captulo 3
MTODO PROPOSTO
O mtodo proposto baseia-se na anlise com FFT de um canal, utilizando como sinal de estmulo uma varredura senoidal construda a partir do espectro do rudo de fundo do dispositivo sob teste. Um diagrama simplificado do mtodo proposto pode ser observado na Figura 3.1.

DUT / IFFT FFT

FFT

Fig. 3.1 Diagrama de medio utilizando o Mtodo Proposto (adaptado de [5])

25 O levantamento da funo de transferncia de sistemas de udio pode ser obtido de forma eficiente atravs de varreduras senoidais. A anlise pode ser realizada de forma semelhante ao mtodo com FFT de um canal, descrito na seo 2.7. Porm, com varreduras senoidais, a repetio do sinal no necessria, pois o resultado da anlise de apenas uma reproduo do sinal praticamente idntico ao da mdia de vrias repeties. Varreduras senoidais tambm possuem maior potncia para uma mesma amplitude mxima do que os rudos (e mesmo que o MLS depois dos conversores D/A), pois possuem menor fator de crista8 (3dB, supondo a sntese com envelope constante). Podem possuir espectro arbitrrio, podendo ser utilizado o espectro do rudo do sistema a ser medido, garantindo uma relao sinal/rudo independente da freqncia. Outra caracterstica importante das medies com varredura a sua capacidade de separar os produtos de distoro da resposta linear do sistema. Isso ocorre porque, durante a convoluo do sinal de resposta com o espectro de referncia, cada componente freqencial da resposta deslocado de acordo com o seu atraso de grupo correspondente no espectro de referncia. Os produtos de distoro aparecem muito antes do tempo correspondente s suas freqncias na varredura (supondo que a varredura sintetizada das baixas para as altas freqncias). Quando seus atrasos forem subtrados dos atrasos correspondentes no espectro de referncia, resultaro em tempo negativo. Como a FFT e a IFFT so peridicas, os componentes de distoro aparecero no final da resposta ao impulso medida. Portanto, para que sejam separveis da resposta linear do sistema preciso que o tamanho da janela de anlise (nmero de pontos considerados para o clculo da FFT) comporte pelo menos duas vezes a durao do sinal de resposta9, ou pelo menos duas vezes a durao da resposta ao impulso do sistema a ser medido. No caso particular da anlise com varreduras logartmicas, a posio na resposta ao impulso dos produtos de distoro no depende da freqncia, mas somente da ordem do harmnico, produzindo respostas ao impulso individuais para cada harmnico que permitiriam sua anlise em separado [2]. Em todo caso, a separao da distoro ocorre para varreduras com qualquer nfase, de forma que a distoro harmnica total (THD) do sistema pode ser medida da mesma maneira em todos os casos, comparando a energia do tempo negativo da resposta ao impulso com a energia total da resposta ao impulso. A resposta linear pode, ento, ser obtida pelo janelamento da resposta ao impulso total.
8 9

Define-se fator de crista como a relao entre a amplitude mxima (pico) de um sinal e o seu valor RMS. Isso corresponde exigncia de que a convoluo entre o sinal de resposta e o de referncia seja linear e no circular.

26

Fig. 3.2 Descarte da distoro harmnica na anlise com varreduras (extrado de [5])

Para que se possa controlar de forma arbitrria o espectro da varredura, preciso sintetiz-la no domnio da freqncia. Dado um espectro qualquer (H), para se obter uma varredura senoidal com o mesmo mdulo e envelope constante, o atraso de grupo (g) deve ser calculado, para cada ponto da FFT, de acordo com a seguinte relao: (Eq. 3.1) (Eq. 3.2)

Fig. 3.3 Gerao de varredura com nfase arbitrria (extrado de [5])

27 O que a sntese do atraso de grupo procura fazer garantir que a varredura demore mais tempo nas freqncias onde se deseja mais nfase. Utiliza-se como nfase (mdulo desejado para o espectro da varredura) a estimativa do espectro do rudo de fundo do sistema sob teste, calculado a partir da raiz quadrada do espectro de potncia10 mdio do mesmo. A partir do atraso de grupo calcula-se a fase11, e a partir da o espectro complexo. O sinal no domnio do tempo obtido por IFFT. Note-se que a sntese da varredura atravs do domnio da freqncia produz alguns problemas no domnio do tempo, a saber, a durao da varredura no fica confinada aos valores de atraso de grupo inicial e final estabelecidos, mas ocorre um espalhamento no tempo em ambas as direes. Para que esse espalhamento no se sobreponha12 ao sinal desejado, necessrio utilizar uma janela de FFT maior do que o sinal desejado. No presente caso, foi utilizada uma janela com o dobro da durao da varredura. O sinal recuperado pela IFFT ento limitado utilizando uma janela de meio cosseno (half-cosine). Em alguns casos, principalmente quando o espectro desejado possui uma excessiva concentrao de energia em baixas freqncias, ainda pode haver sobreposio. Nesse caso pode-se resolver o problema utilizando um filtro passa-altas. Maiores detalhes sobre o mtodo sero fornecidos no Captulo 4 (Implementao).

10 11

Define-se espectro de potncia como o quadrado do mdulo do espectro. O atraso de grupo o negativo da derivada da fase em relao freqncia angular. 12 O sinal no domnio do tempo apresentar componentes de baixa freqncia antes do instante de incio desejado e componentes de alta freqncia aps o instante de fim desejado. Como a IFFT peridica, os componentes de baixa freqncia podem se sobrepor ao final da varredura e os componentes de alta freqncia podem se sobrepor ao incio da varredura.

28

Captulo 4
IMPLEMENTAO
Foi implementado um algoritmo de medio de sistemas de udio utilizando um software de computao cientfica (Scilab v. 3.1.1) um software de gravao e edio de som (Audacity v. 1.2.3), ambos gratuitos, com cdigo fonte aberto.13 O procedimento implementado pode ser dividido em duas etapas: Auto-Referncia Medio do Sistema (Eletrnico ou Acstico)

A Auto-Referncia visa levantar a resposta em freqncia do prprio equipamento de medio, a fim de compens-la na anlise dos demais sistemas, para obteno de resultados confiveis. Este procedimento comum a praticamente todas as implementaes de sistemas de medio [8]. A Medio do Sistema visa levantar as caractersticas do sistema eletrnico ou acstico sob teste. Esta a prpria medida que se objetiva realizar. Ser chamada medio de sistema eletrnico toda aquela que no inclui nenhum elo acstico, a saber, o levantamento da funo de transferncia de um equipamento eletrnico. A medio acstica, por sua vez, inclui um elo acstico (com a utilizao de um microfone), mesmo que o que se deseja medir no seja a acstica da sala, mas somente a resposta de um alto-falante, por exemplo. As etapas de Auto-Referncia e Medio do Sistema so praticamente idnticas, diferindo apenas nas conexes realizadas. Na Auto-Referncia faz-se a ligao do equipamento de medio em loop-back (ligando diretamente a sada na entrada). Essas etapas so compostas pelas seguintes sub-etapas:
13

Anlise Espectral do Rudo Gerao da Varredura Anlise da Resposta

A presente implementao multi-plataforma, tendo sido testada em Windows XP (sp2) e MacOS X v10.3.9.

29 No caso particular de medidas acsticas, duas sub-etapas so acrescentadas: Registro das Caractersticas do Microfone de Medio Calibragem do Ganho do Equipamento de Medio

Por fim, foi tambm desenvolvida uma funo Assistente de Medio para automatizar a seqncia de procedimentos de uma medio normal. Cada uma das sub-etapas acima citadas foi implementada como uma (ou, eventualmente, mais de uma) funo separada em Scilab e ser detalhada melhor nas sees seguintes, juntamente com algumas outras subrotinas de interesse.

4.1 Anlise Espectral do Rudo


A Anlise Espectral do Rudo compreende a captao do rudo de fundo do sistema sob teste, e a estimao do seu espectro atravs de mdias e FFT. A partir do rudo captado, define-se, primeiramente, o tamanho da janela de anlise, de acordo com a resoluo desejada. Divide-se o sinal em quantas janelas forem possveis (os pontos restantes so descartados) e calculada a mdia dos seus espectros de potncia. O espectro do rudo de fundo ento recuperado como sendo a raiz quadrada do espectro de potncia mdio14. Finalmente, realizada a suavizao do espectro conforme o fator de suavizao escolhido (conforme explicado na seo 4.6). importante notar que, para que a sntese da varredura apresente resultados aceitveis, o espectro informado a ela deve ser suficientemente suavizado (conforme explicado na seo 4.2), o que pode tornar difcil obter resultados utilizveis. Rudos de banda larga resultaro, atravs do procedimento acima descrito em um espectro suficientemente suavizado. Entretanto, rudos de banda estreita e elevada autocorrelao, gerados, por exemplo, pela interferncia da rede eltrica (humming), geralmente se apresentam como picos acentuados no espectro, que podem no ser satisfatoriamente suavizados pelo procedimento descrito. Pode ser necessrio repetir algumas vezes a anlise, alterando o tamanho da janela e o fator de suavizao at se alcanar um resultado satisfatrio.

14

Note-se que, como o rudo possui, por definio, fase aleatria, na anlise espectral de rudo obtemos apenas o mdulo do espectro. Convenientemente, necessitamos apenas da informao de mdulo para utilizar como nfase durante a gerao da varredura senoidal.

30 Para o caso de no ser possvel a obteno de um espectro de rudo suficientemente suavizado e consistente15, foi implementada tambm uma sntese de espectro rosa (conforme a sesso seguinte) para substituir o espectro do rudo.

4.1.1 Gerao de Espectro Rosa


A gerao de um espectro rosa bastante simples. Basta calcular o espectro ponto a ponto com decaimento logartmico de 3 dB por oitava. Adicionalmente foi includa a opo de gerar um patamar plano no espectro, abaixo de uma determinada freqncia inferior limite, para limitar a energia subsnica do sinal a ser gerado.

4.2 Gerao da varredura


Inicialmente o espectro de nfase desejado (gerado pela anlise do rudo ou pela funo de gerao de espectro rosa, conforme seo 4.1) carregado e interpolado para o nmero de pontos desejado (determinado pela durao desejada para a varredura). Caso o espectro informado apresente picos acentuados, pode ocorrer que a durao da varredura seja quase que totalmente ocupada pela freqncia do pico, prejudicando a relao sinal/rudo das demais freqncias, a menos que se gere uma varredura extremamente longa, o que aumenta tambm o tempo necessrio anlise. Tambm vale lembrar que o espectro da varredura ter sua resoluo em freqncia limitada pela resoluo do espectro da nfase. Como regra prtica, para que essa limitao no afete o espectro da varredura de forma significativa, a resoluo do espectro da nfase deve estar pelo menos uma dcada abaixo da menor freqncia de interesse, ou deve ser igual resoluo do espectro da varredura a ser gerada. Em seguida, o atraso de grupo calculado de acordo com a Eq. 3.1. Opcionalmente, so implementados filtros passa-altas e passa-baixas de 6 dB/oitava (que como so implementados depois do clculo do atraso de grupo produzem uma modulao na amplitude da varredura, e podem servir para proteo de equipamentos, como alto-falantes, e para reduzir o espalhamento do sinal gerado no domnio do tempo para alm dos limites de tempo desejados, conforme explicado no captulo 3).
15

Aumentar indefinidamente o fator de suavizao pode conduzir obteno de um espectro branco, prejudicando a relao sinal rudo da anlise, caso este seja muito diferente do espectro real do rudo.

31 A fase calculada atravs da integral do atraso de grupo e em seguida corrigida para se obter fase nula na freqncia zero e na freqncia de Nyquist (fs/2, onde fs a freqncia de amostragem)16. O espectro da varredura ento calculado pelo mdulo e fase determinados. Finalmente, o sinal da varredura no tempo obtido pela IFFT.

4.3 Anlise da Resposta


A Anlise da Resposta compreende a aplicao da varredura ao sistema sob teste, a captao simultnea de sua resposta, e a determinao dos parmetros desejados. A determinao dos parmetros do sistema pode ser resumida nas seguintes etapas: Determinao da Resposta ao Impulso Determinao da Resposta em Freqncia Determinao dos Parmetros Secundrios

Cada uma das etapas acima citadas ser explicada a seguir.

4.3.1 Determinao da Resposta ao Impulso


A partir do sinal de resposta do sistema e do sinal de estmulo aplicado, o tamanho da janela de anlise ajustado para a primeira potncia de 2 maior que a soma da durao dos dois sinais (para garantir convoluo linear [10])17. Calcula-se a resposta ao impulso pela IFFT da razo entre suas respectivas FFTs. Em seguida efetuado o janelamento da resposta ao impulso. Este depende da resoluo desejada para a anlise (define o tamanho da janela) e do clculo do limiar de decaimento (conforme definido na seo 4.3.3.4). Caso a janela de anlise seja menor que o limiar de decaimento, feito um janelamento retangular. Caso contrrio, feito um janelamento de meio-cosseno (half-cosine [5]), com o incio do meio cosseno definido pelo limiar de decaimento e o final pela janela de anlise). Por fim, a latncia absoluta (calculada conforme explicado na sesso 4.3.3.2) da resposta ao impulso corrigida atravs de deslocamento circular [5].

16 17

Condio normal para sinais reais [5]. Para ajustar o tamanho da janela de anlise, as seqncias correspondentes aos sinais de estmulo e resposta so completadas com a quantidade necessria de zeros [10].

32

4.3.2 Determinao da Resposta em Freqncia


A resposta em freqncia obtida pela FFT da resposta ao impulso aps o janelamento e deslocamento circular. Em seguida, caso no se trate de uma anlise de Auto-Referncia, a resposta corrigida (por deconvoluo) pela resposta do prprio equipamento de medio. Caso se trate de medio acstica, a resposta tambm corrigida pela resposta em freqncia do microfone de medio (obtida conforme seo 4.4). O espectro resultante , ento, suavizado (conforme seo 4.6) de acordo com o fator de suavizao escolhido. Se a anlise for de Auto-Referncia o espectro resultante armazenado para possibilitar a compensao das demais medies.

4.3.3 Determinao dos Parmetros Secundrios


Todos os demais parmetros medidos em sistemas de udio so calculados a partir da Resposta em Freqncia ou da Resposta ao Impulso, ou diretamente a partir do prprio sinal de sada (resposta) do sistema. Quais parmetros medir depende do objetivo que se tenha com a anlise. Foram escolhidos alguns parmetros considerados importantes, a saber: Presso Sonora Mxima Latncia e Distncia da Fonte Sonora Distoro Harmnica Total (THD) Relao Sinal/Rudo (SNR) da Janela de Anlise Tempo de Reverberao (RT60) e Curva de Decaimento de Schroeder Banda de Passagem

As medies desses parmetros foram implementadas conforme descrito a seguir. 4.3.3.1 Presso Sonora Mxima No caso de medidas acsticas, calcula-se a presso sonora mxima a partir da energia mdia durante um intervalo centrado no ponto de mxima energia instantnea (com a durao do intervalo arbitrada em 200ms)18 e subtraindo a sensibilidade do microfone (conforme seo 4.4) e ganho de entrada do equipamento de medio (conforme seo 4.5).

18

Para um resultado consistente, o intervalo deve ter durao mnima maior que o perodo da menor freqncia de interesse.

33 4.3.3.2 Latncia e Distncia da Fonte Sonora Para se calcular a latncia do sistema sob teste (latncia relativa), calcula-se a diferena entre a latncia absoluta (definida como o tempo correspondente ao pico de amplitude da resposta ao impulso) e a latncia de referncia (definida como a latncia absoluta obtida na Auto-Referncia). Em caso de medida acstica calcula-se a distncia da fonte sonora a partir da latncia relativa. A latncia relativa utilizada para exibio para o usurio, enquanto a latncia absoluta utilizada para correo da resposta ao impulso (conforme a seo 4.3.1). 4.3.3.3 Distoro Harmnica Total (THD) Calcula-se a distoro harmnica total (THD) como a raiz quadrada da razo entre a energia da distoro (energia do tempo negativo da resposta ao impulso conforme explicado no captulo 3) e a energia total da resposta ao impulso. 4.3.3.4 Relao Sinal/Rudo (SNR) da Janela de Anlise Para estimar a relao sinal/rudo da janela empregada na anlise (que serve como parmetro de confiabilidade da medio), busca-se inicialmente um limiar de decaimento. Define-se aqui como limiar de decaimento o instante de tempo em que a resposta ao impulso decaiu ao patamar de rudo (quando a energia pra de decrescer). Para estimar isso, calcula-se o primeiro instante em que a envoltria da resposta ao impulso ao quadrado possui derivada no-negativa (ou pelo menos negativa com mdulo menor que o nvel de quantizao determinado pelo nmero de bits). Essa posio armazenada como limiar de decaimento. Calcula-se, ento, a densidade de energia do rudo como a relao entre a energia aps o limiar de decaimento e sua durao correspondente. Calcula-se a energia do rudo contido na janela de anlise atravs da densidade de energia do rudo, suposta constante. Calcula-se a energia do sinal como sendo a energia contida dentro da janela de anlise subtraindo a energia de rudo. A relao sinal/rudo (SNR) estimada como a razo entre a energia calculada do sinal e a do rudo da janela de anlise.

34 4.3.3.5 Tempo de Reverberao (RT60) e Curva de Decaimento de Schroeder Para medidas acsticas, calcula-se o tempo de reverberao a partir da curva de decaimento de Schroeder [9]. Esta definida como a integral da resposta ao impulso ao quadrado invertida no tempo, expressa em dB. Esta curva deve expressar o decaimento do sistema ao longo do tempo. O tempo de reverberao (RT60), definido como o tempo necessrio para a reverberao decair 60 dB obtido atravs de uma interpolao linear (aqui calculada atravs da derivada mdia entre a latncia absoluta e o limiar de decaimento) da curva de decaimento de Schroeder. 4.3.3.6 Banda de Passagem A banda de passagem definida a partir de uma freqncia inferior, a primeira em que a resposta (normalizada) do sistema atinge um determinado nvel de limiar (definido pelo usurio) e uma freqncia superior, a ltima em que a resposta atinge esse mesmo nvel.

4.4 Registro das Caractersticas do Microfone de Medio


Em medidas acsticas, para permitir a compensao da resposta em freqncia do microfone e a aferio do nvel de presso sonora, deve-se informar qual o espectro (correspondente resposta em freqncia) a ser utilizado (que deve ter sido gerado anteriormente) e a sensibilidade (ganho de transduo) do microfone.

4.4.1 Sntese da Resposta em Freqncia do microfone


Foi implementada uma sntese do espectro do microfone NTI MiniSPL (esse foi o microfone utilizado nos testes realizados), a partir de aproximao da sua carta de calibragem, por segmentos de reta, posteriormente suavizados.

35

4.5 Calibragem do Ganho do Equipamento de Medio


Para permitir a aferio do nvel de presso sonora das medidas acsticas necessrio o conhecimento prvio do ganho de entrada do equipamento de medio. Para isso, gerado um tom de referncia, que deve ser reproduzido pelo equipamento de medio, e sua tenso medida externamente. Em seguida, mede-se o nvel da resposta do equipamento de medio ao mesmo tom de referncia gravado em loop-back. Dessa forma possvel determinar o ganho de sada e o ganho de entrada do equipamento de medio.

4.5.1 Gerao de Tom de Referncia


Foi implementada uma funo que simplesmente gera um tom senoidal com a freqncia, durao e amplitude especificadas pelo usurio.

4.5.2 Medio do Nvel de Referncia


Compara-se o nvel do sinal eltrico de sada (que deve ter ser medido externamente ao equipamento) e o nvel do arquivo de resposta da gravao do tom de referncia em loopback com o nvel do tom de referncia gerado para obter, respectivamente, o ganho de sada e o ganho de entrada do equipamento de medio.

4.6 Suavizao
A suavizao implementada no espectro de potncia, atravs de um filtro mdia mvel varivel, para manter a largura da banda de atuao (fator de suavizao razo logartmica) constante. O resultado de cada ponto obtido como a mdia calculada entre meio fator de suavizao para trs e meio fator de suavizao para frente. O espectro recuperado pela raiz quadrada do espectro de potncia suavizado. Note-se que essa operao pode consumir muito tempo se o espectro possuir muitos pontos e se for utilizado um fator de suavizao alto. O processo de suavizao diminui a resoluo (e conseqentemente a rugosidade) do espectro, e til tanto para a anlise espectral de rudo quanto para medies acsticas, por exemplo, para equalizao de alto-falantes [8].

36

4.7 Assistente de Medio


A funo Assistente de Medio foi implementada para guiar o usurio ao longo da seqncia de procedimentos necessrios para realizar a medio de sistemas de udio. Seu funcionamento pode ser visto, de forma resumida no fluxograma a seguir:

INCIO J POSSUI AUTOREFERNCIA? AUTO-REFERNCIA NO SIM ANLISE ESPECTRAL DO RUDO GERAO DA VARREDURA ANLISE DA RESPOSTA

TIPO DE MEDIO?

ACSTICA ELETRNICA

J POSSUI CALIBRAGEM?

SIM NO

CALIBRAGEM REGISTRO DO MICROFONE CALIBRAGEM DO GANHO

MEDIO DO SISTEMA ANLISE ESPECTRAL DO RUDO GERAO DA VARREDURA ANLISE DA RESPOSTA

FIM

Fig. 4.7.1 Fluxograma (simplificado) do funcionamento do Assistente de Medio

37

Captulo 5
RESULTADOS EXPERIMENTAIS
Os testes aqui apresentados so apenas ilustrativos, visando demonstrar a funcionalidade do programa gerado. So exibidos os resultados de uma medida acstica (seo 5.1), realizada com o programa desenvolvido e com um software de medio comercial, o EASERA (utilizado durante os 30 dias do perodo de avaliao gratuita). Tambm so exibidas medidas eletrnicas (seo 5.2) com e sem nfase no espectro de rudo.

5.1 Medidas Acsticas


As medidas acsticas se destinavam a levantar a resposta de uma caixa de som. Foram realizadas duas medidas nas mesmas condies (mesma caixa de som, mesmo microfone, mesmo posicionamento, mesmo ambiente) utilizando dois sistemas: um com o programa desenvolvido e outro com um software de medio comercial (EASERA). O programa desenvolvido foi testado utilizando o seguinte sistema: Computador Apple PowerMacintosh G3 (350 MHz, 576 MB RAM) Interface de udio integrada Sistema operacional MacOS 10.3.9 Scilab 3.1.1 Audacity 1.2.3

38 O EASERA foi testado utilizando o seguinte sistema: PC com processador AMD K6-2 (500 MHz), 188 MB RAM Placa de som C-Media CMI8738/C3DX PCI Sistema Operacional Windows XP Professional EASERA 1.0.30 Os testes foram realizados nas seguintes condies: Caixa de Som - Creative CS120 (a 1 m do cho e mais de 1 m de qualquer outra superfcie) Quarto - 3 (altura) x 3,2 (largura) x 3.15 (comprimento) (mobiliado) Microfone - NTI MiniSPL (a cerca de 30 cm da caixa de som) Sinal de Estmulo - Varredura Logartmica (durao de 6 segundos) Anlises com suavizao de 1/3 oitava Um esquema das ligaes realizadas pode ser observado na Figura 5.1.1.

(interface de udio) OUT IN

Fig. 5.1.1 Esquema das ligaes realizadas para as Medidas Acsticas

39 Utilizando o programa desenvolvido, inicialmente foi realizada a auto-referncia do equipamento de medio (conectando-o conforme a figura 5.1.2) e a sntese da resposta em freqncia do microfone de medio (a partir do certificado de calibragem do microfone), para finalmente realizar a medio desejada (j compensando as respostas do equipamento e do microfone). Utilizando o EASERA, foi realizada diretamente a medio desejada (sem correo da resposta em freqncia do equipamento de medio nem do microfone). Posteriormente foi realizado um levantamento da resposta do equipamento de medio conectado em loop-back (conforme a figura 5.1.2), para verificao da consistncia dos resultados obtidos na medio desejada.

(interface de udio) OUT IN

Fig. 5.1.2 Esquema das ligaes realizadas para a Auto-Referncia (programa desenvolvido) e medio em loop-back (EASERA)

Sero exibidos os seguintes resultados: Utilizando o programa desenvolvido Auto-Referncia o Mdulo da Resposta em Freqncia o Fase da Resposta em Freqncia o Parmetros Secundrios Resposta em Freqncia do Microfone o Resposta em freqncia do certificado de calibragem o Resposta em freqncia sintetizada

40 Medida da Caixa de Som o Resposta ao Impulso o Curva de Decaimento de Schroeder o Mdulo da Resposta em Freqncia Utilizando o EASERA Medida da Caixa de Som o Mdulo da Resposta em Freqncia Medida em loop-back o Mdulo da Resposta em Freqncia (sem suavizao) o Mdulo da Resposta em Freqncia (com suavizao)

5.1.1 Medidas utilizando o programa desenvolvido


5.1.1.1 Auto-Referncia

Fig. 5.1.1.1.1 Mdulo da Resposta em Freqncia do Equipamento de Medio

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, a menos de diferenas pequenas nos extremos. De qualquer forma, essas diferenas sero compensadas nas medies seguintes.

Fig. 5.1.1.1.2 Fase da Resposta em Freqncia do Equipamento de Medio

interessante observar que a interface utilizada com o programa desenvolvido possui fase invertida (praticamente igual a -180 em toda a faixa de udio). Embora na medida da resposta da caixa de som no estaremos interessados na fase da resposta em freqncia, no caso da medida eletrnica, isso certamente alteraria a fase da resposta medida caso no houvesse a compensao da auto-referncia.

19

Deve-se notar que a resposta da auto-referncia foi intencionalmente plotada em uma faixa de freqncias 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.

42

Fig. 5.1.1.1.3 Parmetros Secundrios do Equipamento de Medio

Pelos parmetros secundrios do equipamento de medio podem ser observados os limites alcanveis de qualidade nas medies com o programa desenvolvido utilizando esse equipamento. 5.1.1.2 Resposta em Freqncia do Microfone

Fig. 5.1.1.2.1 Mdulo da Resposta em Freqncia do Microfone de Medio (extrado do certificado de calibragem)

Pode-se notar pelo certificado de calibragem do microfone de medio utilizado que a no compensao da resposta em freqncia do microfone poderia acarretar um erro de mais de 3 dB na faixa de udio, embora dentro da faixa de resposta da caixa de som medida, o erro causado seria menor.

43

Fig. 5.1.1.2.2 Resposta em Freqncia sintetizada para o Microfone de Medio

Pode-se notar que a resposta em freqncia sintetizada para o microfone de medio acompanha bem de perto a curva do certificado de calibragem, com erro bem menor que 1 dB. 5.1.1.3 Medida da Caixa de Som

Fig. 5.1.1.3.1 Resposta ao Impulso (aps janelamento) do sistema acstico medido

A reposta ao impulso (aps o janelamento) aqui apresentada apenas ilustrativa. Embora se possa observar indiretamente dela a latncia, o tempo de decaimento e o nvel de rudo da medio, esses dados podem ser obtidos de forma mais conveniente atravs dos parmetros secundrios calculados.

44

Fig. 5.1.1.3.2 Curva de Decaimento de Schroeder do sistema acstico medido

A curva de decaimento de Schroeder exibe o comportamento do decaimento do sistema acstico medido, mas sobretudo, calculada para a obteno do tempo de reverberao. Note-se que o decaimento brusco no final da curva se deve ao janelamento, e no traduz o decaimento real do sistema acstico (que no decairia abaixo do nvel de rudo).

Fig. 5.1.1.3.3 Parmetros Secundrios do sistema acstico medido

45 Os parmetros secundrios obtidos so bastante consistentes com a medio realizada. O nvel de distoro relativamente alto se deve ao fato de ser uma caixa de som de pequenas dimenses excitada com um sinal razoavelmente alto (alm de no ser uma caixa de altafidelidade). O tempo de reverberao obtido muito baixo por ter-se realizado a medio com o microfone muito prximo da caixa de som.

Fig. 5.1.1.3.4 Mdulo da Resposta em Freqncia do sistema acstico medido (programa desenvolvido)

Na resposta da caixa de som aparece um pico em 60 Hz (embora atenuado pela suavizao). No se trata de um pico na resposta do alto-falante de fato, mas trata-se simplesmente de rudo causado pela interferncia da rede eltrica. Como a varredura utilizada era logartmica20 (e no sintetizada pelo espectro de rudo), no foi possvel (mesmo com a suavizao) retirar esse pico, que representa um erro no resultado, causado pela baixa relao sinal/rudo obtida nessa freqncia. Em todo caso, esse exemplo ilustra o problema mencionado nas sees 4.1 e 4.2, pois para remover esse pico seria necessrio gerar uma varredura com nfase no espectro de rudo com uma durao muito grande, aumentando proporcionalmente o tempo necessrio para todo o processo de anlise.

20

A razo principal de se ter utilizado uma varredura logartmica foi para permitir a comparao com o resultado do EASERA, que no dispunha de sntese de varredura a partir do espectro do rudo.

46

5.1.2 Medidas utilizando o EASERA


5.1.2.1 Medida da Caixa de Som

Fig. 5.1.2.1.1 Mdulo da Resposta em Freqncia do sistema acstico medido (EASERA)

Uma comparao entre a resposta obtida pelo EASERA e a resposta obtida anteriormente pelo programa desenvolvido aponta para uma diferena significativa nos dois extremos do espectro, embora nas freqncias mdias o resultado seja praticamente coincidente. Deve-se observar, porm, que no programa desenvolvido foi compensada a resposta do equipamento de medio e do microfone, enquanto no EASERA no. Se a placa de som utilizada no teste com o EASERA fosse de boa qualidade, provavelmente o erro seria pequeno, contudo a medio em loop-back realizada no equipamento de medio utilizado para o teste com o EASERA ir revelar as causas dessa diferena. 5.1.2.2 Medida em loop-back

Fig. 5.1.2.2.1 Mdulo da Resposta em loop-back (EASERA, sem suavizao)

47 A medida do equipamento de medio utilizado com o EASERA conectado em loopback apresentou resultados surpreendentemente ruins. Pode-se observar da anlise da resposta sem suavizao que o equipamento possui um nvel de rudo muito elevado, causando uma grande corrugao na resposta , tornando necessria a suavizao para facilitar a anlise.

Fig. 5.1.2.2.2 Mdulo da Resposta em loop-back (EASERA, suavizao de 1/48 oitava)

A resposta em freqncia do equipamento de medio utilizado no teste com o EASERA revelou-se muito distante de um espectro plano. A atenuao em baixas e altas freqncias est claramente afetando a resposta da medio da caixa de som realizada anteriormente, e justifica as diferenas observadas com relao medio realizada com o programa desenvolvido.

5.2 Medidas Eletrnicas


As medidas eletrnicas se destinavam a levantar a reposta de um filtro implementado utilizando um equalizador grfico. Foram realizadas duas medidas nas mesmas condies (mesmo equalizador, mesmo ajuste, mesma durao do sinal de excitao) utilizando dois sinais de excitao distintos: uma varredura senoidal construda com uma nfase calculada a partir do espectro do rudo de fundo do dispositivo sob teste e uma varredura senoidal logartmica.

48 Foi utilizado o programa desenvolvido (nas duas medidas) com o seguinte sistema: Computador Apple PowerMacintosh G3 (350 MHz, 576 MB RAM) Interface de udio integrada Sistema operacional MacOS 10.3.9 Scilab 3.1.1 Audacity 1.2.3 Os testes foram realizados nas seguintes condies: Dispositivo sob teste - Equalizador Grfico de 7 bandas (Technics SH-GE70) Ajustes - conforme tabela 5.2.1 Sinal de Estmulo - Varredura Senoidal (durao de 1,5 segundo) Anlises sem suavizao 63 Hz 160 Hz 400 Hz 1 kHz 2.5 kHz 6.3 kHz 12.5 kHz - 12 dB - 12 dB - 12 dB + 12 dB + 12 dB + 12 dB + 12 dB

Tabela 5.2.1 Ganhos ajustados no equalizador para o teste

49 Um esquema das ligaes realizadas pode ser observado na Figura 5.2.1.

Equalizador Grfico IN OUT

(interface de udio) OUT IN

Fig. 5.2.1 Esquema das ligaes realizadas para as Medidas Eletrnicas

Sero exibidos os seguintes resultados: Medidas do Equalizador utilizando varredura com nfase o Anlise espectral do rudo (com suavizao de 3 oitavas) o Mdulo da Resposta em Freqncia o Fase da Resposta em Freqncia o Parmetros Secundrios Medidas do Equalizador utilizando varredura logartmica o Parmetros Secundrios

50

5.2.1 Medidas do Equalizador utilizando varredura com nfase

Fig. 5.2.1.1 Espectro do Rudo do Equalizador (com suavizao de 3 oitavas)

O espectro do rudo de fundo do equalizador apresenta uma caracterstica atpica, pois o espectro de rudo de fundo tpico que decai com a freqncia est sendo alterado pelo prprio filtro implementado (aproximadamente um passa-altas). Esse espectro ser utilizado como nfase na gerao da varredura a ser utilizada como sinal de estmulo.

Fig. 5.2.1.2 Mdulo da Resposta em Freqncia do Equalizador

51 Como se trata de um equalizador grfico podemos identificar cada uma das bandas atuando como sete filtros "independentes", embora no resultado final, o ganho de cada banda interfira no ganho das bandas adjacentes.

Fig. 5.2.1.3 Fase da Resposta em Freqncia do Equalizador

A resposta em fase revela que esse equalizador introduz uma pequena distoro de fase, mesmo sob a condio mais adversa de possuir duas bandas adjacentes com ganhos respectivamente mnimo e mximo.

Fig. 5.2.1.4 Parmetros Secundrios da medida do equalizador (varredura com nfase)

52 Na anlise dos parmetros secundrios, vale notar que o equalizador sob teste introduz pouca distoro harmnica e que no possui latncia21 (note-se que a latncia do equipamento de medio est sendo compensada e que o equalizador analgico).

5.2.2 Medidas do Equalizador utilizando varredura logartmica

Fig. 5.2.2.1 Parmetros Secundrios da medida do equalizador (varredura logartmica)

Na medida utilizando varredura logartmica s puderam ser observadas diferenas nos parmetros secundrios (por isso os demais resultados no foram reproduzidos, por serem praticamente idnticos aos obtidos na medida utilizando varredura com nfase). Nota-se que a utilizao do espectro de rudo para sntese da varredura produziu um ganho de apenas 2 dB na relao sinal/rudo em relao utilizao da varredura logartmica, porque o nvel de rudo do equipamento era baixo.

21

A latncia medida com preciso de 1 sample (1/44100 s).

53

Captulo 6
CONCLUSES
O mtodo proposto consegue realizar o levantamento da funo de transferncia de sistemas de udio, tanto acsticos como eletrnicos, mesmo em medies acsticas com elevado nvel de rudo ambiente, e elevada distoro no alto-falante. A sntese da varredura pelo espectro de rudo, embora seja capaz de melhorar muito a relao sinal/rudo em medies com nvel de rudo muito elevado, tambm aumenta consideravelmente o tempo necessrio para a sntese do sinal. Uma compensao adequada de picos no espectro de rudo pode exigir a gerao de varreduras muito longas, aumentando proporcionalmente o tempo de anlise. O resultado timo quando o espectro do rudo no apresenta picos acentuados. Em todo caso, para sistemas que apresentam baixo nvel de rudo de fundo, a vantagem pode ser pequena. Na implementao, foi observado que a sntese do atraso de grupo, as operaes de interpolao e a suavizao so os procedimentos que consomem mais tempo, limitando a performance. Isso porque esses clculos so realizados ponto a ponto, pois no h uma expresso matricial direta. Em todo caso, deve-se lembrar que o programa desenvolvido um script interpretado por outro programa, e no um executvel compilado. Isso facilitou o desenvolvimento, mas certamente prejudicou a performance. Embora se desejasse obter parmetros que permitissem automatizar de maneira tima uma medio, e que funcionassem para todos os casos, isso parece no ser possvel, ou pelo menos no com razovel complexidade (que implica em tempo) computacional que justificasse sua utilizao em todos os casos. Os melhores resultados ainda so obtidos com uma escolha apropriada de parmetros para cada caso.

54

6.1 Aplicaes e Trabalhos Futuros


As informaes obtidas pela presente anlise podem ser utilizadas para avaliar a qualidade de um sistema de udio e tambm para guiar aes corretivas, quando desejado (equalizao, por exemplo). Outra aplicao possvel (possivelmente objeto de trabalhos futuros) a utilizao dessas informaes para o processamento digital de sinais. Pode-se utilizar a resposta em freqncia para implementar convoluo com um sinal para simular a aplicao do sinal quele sistema ou pode-se realizar uma deconvoluo com um sinal a ser aplicado naquele sistema para corrigir sua resposta em freqncia (por exemplo, para equalizao de altofalantes). Tambm se pode utilizar a resposta ao impulso para o desenvolvimento de um reverberador baseado em convoluo rpida. Para melhorar a performance da medio, pretende-se portar o cdigo para alguma linguagem de programao para compil-lo, ao invs de execut-lo como script interpretado dentro de outro software. Tambm se pretende melhorar a interface com o usurio, oferecendo interface grfica. Outros sinais de estmulo e outros parmetros a serem analisados (resposta de cada harmnico, tempos de reverberao filtrados por banda, etc) tambm podem ser oferecidas.

55

Anexo
CDIGO FONTE (SCRIPT SCILAB)
mode(-1); //Projeto de Graduacao - USU - 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. Nao testado em Linux. //Em ambiente Windows e necessario definir o path do sistema //para incluir a pasta do Audacity e a pasta do Scilab (bin). //Tambem e necessario associar arquivos .wav com o Audacity. //Em ambas as plataformas e preciso ajustar uma preferencia do //Audacity que permite reproduzir uma pista enquanto grava outra. //////////////////////////////////////////////////////////////////////////////// //limpa e aloca a memoria clear; stacksize (40000000); //cria a pasta "measures" caso nao exista, para armazenamento das medicoes if fileinfo('measures')==[] then mkdir measures; end cd measures //////////////////////////////////////////////////////////////////////////////// function reftone disp('Programa que gera um tom senoidal de referencia.'); disp(''); //definicoes de inicializacao //fs = frequencia de amostragem do arquivo WAVE (em Hz) 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(''); //bit = resolucao (numero de bits por amostra) do arquivo WAVE disp('Informe a resolucao desejada (em bits).'); disp('Valor Padrao:[bit = 16]'); disp('Para aceitar o valor padrao tecle <ENTER>'); disp(''); bit = input('bit = '); if bit == [] then bit = 16; disp('16'); end

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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('');

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

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

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

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

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

80

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