59
UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE SISTEMAS DE INFORMAÇÃO – BACHARELADO SISTEMA DE AUXÍLIO À REGULAGEM DOS CONTROLES DE GRAVES E AGUDOS GABRIEL BIDOIA PADIAL BLUMENAU 2005 2005/1-8

SISTEMA DE AUXÍLIO À REGULAGEM DOS CONTROLES DE …campeche.inf.furb.br/tccs/2005-I/TCC2005-1-08-VF-GABRIELBPADIAL.pdf · Essas emoções são diferentes em se tratando de pessoa

  • Upload
    buingoc

  • View
    216

  • Download
    0

Embed Size (px)

Citation preview

UNIVERSIDADE REGIONAL DE BLUMENAU

CENTRO DE CIÊNCIAS EXATAS E NATURAIS

CURSO DE SISTEMAS DE INFORMAÇÃO – BACHARELADO

SISTEMA DE AUXÍLIO À REGULAGEM DOS CONTROLES

DE GRAVES E AGUDOS

GABRIEL BIDOIA PADIAL

BLUMENAU 2005

2005/1-8

GABRIEL BIDOIA PADIAL

SISTEMA DE AUXÍLIO À REGULAGEM DOS CONTROLES

DE GRAVES E AGUDOS

Trabalho de Conclusão de Curso submetido à Universidade Regional de Blumenau para a obtenção dos créditos na disciplina Trabalho de Conclusão de Curso II do curso de Sistemas de Informação— Bacharelado.

Prof. Antônio Carlos Tavares – Orientador

BLUMENAU 2005

2005/1-8

SISTEMA DE AUXÍLIO À REGULAGEM DOS CONTROLES

DE GRAVES E AGUDOS

Por

GABRIEL BIDOIA PADIAL

Trabalho aprovado para obtenção dos créditos na disciplina de Trabalho de Conclusão de Curso II, pela banca examinadora formada por:

______________________________________________________ Presidente: Prof. Antônio Carlos Tavares – Orientador, FURB

______________________________________________________ Membro: Prof. Miguel Alexandre Wisintainer, FURB

______________________________________________________ Membro: Prof. Paulo César Rodacki Gomes, FURB

Blumenau, 26 de junho de 2005.

Dedico este trabalho a todos os amigos e especialmente a minha família que colaborou indiretamente para que os resultados obtidos fossem possíveis.

“Menor que meu sonho não posso ser.”

Lindolf Bell

AGRADECIMENTOS

À Deus, pelo seu imenso amor e graça.

À minha família, que sempre esteve me apoiando.

À minha namorada Sandra, que teve presença psicológica muito forte.

A meu amigo Pedro, que me ajudou a formular algumas idéias para a conclusão deste

trabalho.

Ao meu orientador, Sr. Antônio Carlos Tavares, por acreditar no sucesso deste trabalho

e me dar total apoio para a conclusão do mesmo.

RESUMO

O seguinte trabalho de conclusão de curso tem como objetivo principal a confecção de um sistema que realiza uma verificação da equalização de graves e agudos emitida pelas fontes sonoras, indicando se está ou não de acordo com a necessidade do usuário. O sistema foi desenvolvido na plataforma Delphi, utilizando como base o projeto “A Simple Osciloscope” de Darby (2003).

Palavras chaves: Transformada de Fourier; Áudio; Freqüência.

ABSTRACT

This monograph aims at describing the development of a program which verifies bass and treble signal equalization generated with front speakers, pointing out whether the sound is in accordance with the user’s needs. The program is developed in Delphi, using Darby's “A Simple Osciloscope” project as the main source.

Key-Words: Fast Fourier; Audio; Frequency.

LISTA DE ILUSTRAÇÕES

Figura 1 – Mesa de som. ........................................................................................................... 13 Figura 2 – Demonstração da propagação de som na cóclea. .................................................... 17 Figura 3 – Representação elétrica de um sinal sonoro ............................................................. 18 Figura 4 – Exemplo de uma amostra do conversor A/D. ......................................................... 19 Figura 5 – Visualização de um sinal digital ............................................................................. 19 Figura 6 – Visão geral do processo de digitalização ................................................................ 20 Figura 7 – Representação de uma onda analógica .................................................................... 20 Figura 8 – Tipos de onda .......................................................................................................... 23 Figura 9 – Transformada de uma função h(t) ........................................................................... 24 Figura 10 – Decomposição da FFT .......................................................................................... 25 Figura 11 – Síntese da FFT ...................................................................................................... 26 Figura 12 – Diagrama de fluxo da síntese da FFT ................................................................... 27 Figura 13 – Diagrama de fluxo da FFT .................................................................................... 28 Figura 14 – Esquema de montagem inicial .............................................................................. 30 Figura 15 – Diagrama de casos de uso. .................................................................................... 31 Figura 16 – Codificação da função Calcfreqs .......................................................................... 33 Figura 17 – Definição dos valores da freqüência e amplitude ................................................. 34 Figura 18 – Código para armazenar a freqüência com maior amplitude.................................. 35 Figura 19 – Captura dos valores base para graves e agudos .................................................... 35 Figura 20 – Código para a verificação da qualidade dos sinais graves e agudos ..................... 35 Figura 21 – Tela principal do sistema ...................................................................................... 37 Figura 22 – Lista de freqüências............................................................................................... 38 Figura 23 – Gráfico do espectro ............................................................................................... 38 Figura 24 – Equalização ........................................................................................................... 39 Figura 25 – Posicionamento do microfone ............................................................................... 40 Figura 26 – Menu ..................................................................................................................... 40 Figura 27 – Painel de configuração do usuário ........................................................................ 41 Figura 28 – Equalização captada de acordo com necessidades ................................................ 42 Figura 29 – Equalização captada não está de acordo com as necessidades ............................. 42 Figura 30 – Equalização final obtida ........................................................................................ 43

LISTA DE SIGLAS

API – Application Program Interface.

FFT – Fast Fourier Transform ou Transformada Rápida de Fourier.

TF – Transformada de Fourier.

UML – Unified Modeling Language ou Linguagem de Modelagem Unificada.

LISTA DE SÍMBOLOS

A/D – Analógico-digital

D/A – Digital-analógico

dB – Decibel

kHz – Kilo Hertz

Hz – Hertz.

LISTA DE QUADROS

Quadro 1 – Relação qualitativa da intensidade sonora. ............................................................ 23 Quadro 2 – Requisitos funcionais ............................................................................................. 29 Quadro 3 – Requisitos não-funcionais ..................................................................................... 29

SUMÁRIO

1 INTRODUÇÃO .................................................................................................................. 13

1.1 OBJETIVOS ...................................................................................................................... 14

1.2 ESTRUTURA DO TRABALHO ...................................................................................... 14

2 PERCEPÇÃO HUMANA DO SOM ................................................................................ 16

2.1 PERCEPÇÃO DA INTENSIDADE DE UM SOM .......................................................... 17

3 CONVERSÃO ANALÓGICO/DIGITAL ....................................................................... 18

3.1 ONDAS ANALÓGICAS .................................................................................................. 20

3.2 PROPRIEDADES DO SOM ............................................................................................. 21

3.2.1 Velocidade....................................................................................................................... 21

3.2.2 Altura............................................................................................................................... 21

3.2.3 Intensidade ...................................................................................................................... 22

3.2.4 Timbre ............................................................................................................................. 23

4 TRANSFORMADA DE FOURIER ................................................................................. 24

4.1 ENTENDENDO A TRANSFORMADA DE FOURIER.................................................. 24

4.2 FUNCIONAMENTO DA TRANSFORMADA RÁPIDA DE FOURIER ....................... 24

5 DESENVOLVIMENTO DO TRABALHO ..................................................................... 29

5.1 REQUISITOS PRINCIPAIS DO PROBLEMA A SER TRABALHADO ....................... 29

5.2 ESPECIFICAÇÃO ............................................................................................................ 30

5.2.1 DIAGRAMA DE CASOS DE USO ............................................................................... 30

5.3 IMPLEMENTAÇÃO ........................................................................................................ 32

5.3.1 TÉCNICAS E FERRAMENTAS UTILIZADAS ........................................................... 32

5.3.1.1 FFT ............................................................................................................................... 33

5.3.1.2 Cálculo da equalização de grave e de agudo ................................................................ 34

5.3.2 OPERACIONALIDADE DA IMPLEMENTAÇÃO ...................................................... 36

5.4 RESULTADOS E DISCUSSÃO ...................................................................................... 43

6 CONCLUSÕES .................................................................................................................. 46

6.1 LIMITAÇÕES ................................................................................................................... 46

6.2 DIFICULDADES ENCONTRADAS ............................................................................... 47

6.3 EXTENSÕES .................................................................................................................... 47

REFERÊNCIAS BIBLIOGRÁFICAS ................................................................................. 49

APÊNDICE A – Codificação da função RealFFT ................................................................... 50

APÊNDICE B – Codificação da função FFT ........................................................................... 53

13

1 INTRODUÇÃO

Segundo Moretti (2003), a música está presente no mundo inteiro, entre todas as

gerações e culturas distintas, e essa arte já existe desde os primórdios da existência humana,

sendo música a arte de combinar sons, de modo a produzirem sensações agradáveis ao ouvido

e despertarem na alma emoções especiais. Essas emoções são diferentes em se tratando de

pessoa para pessoa: umas acham determinada música péssima, outras estão adorando essa

mesma música. Porém, essas pessoas que estão adorando podem deixar de gostar pelo simples

fato de estar com uma má qualidade sonora. Um dos parâmetros é a equalização dos graves,

outra é a equalização dos agudos. Este trabalho enfoca justamente no que diz respeito à

equalização de áudio, para que esse possa ser ouvido com melhor perfeição para os ouvintes.

Foi observando o ajuste dos aparelhos em bares e boates que o trabalho teve sua

motivação, pois esses ajustes eram demorados e não mensurados. Aqui se tem o problema, ou

seja, a dificuldade para o ajuste dos controles da mesa de som (responsável por distribuir o

sinal de todos os instrumentos para as fontes sonoras).

Fonte: BEHRINGER (2005).

Figura 1 – Mesa de som.

Procurando facilitar e precisar esta regulagem, teve-se a idéia de desenvolver um

sistema capaz de identificar a variação de graves ou agudos, proporcionando ao profissional

responsável pela equalização, sinais visuais indicando se o som está ou não de acordo com o

que se deseja.

O resultado final deste trabalho pode ser utilizado para a análise da qualidade do áudio

em qualquer ambiente em que se faça necessária a equalização de sinais graves e agudos de

uma fonte sonora.

14

Para o desenvolvimento do trabalho, foram abordados assuntos como a percepção

humana do som; ondas analógicas, para se compreender como as ondas sonoras são formadas;

propriedades do som, apresentando uma visão de algumas propriedades como intensidade,

freqüência, velocidade e timbre; e o algoritmo da FFT, utilizado para transformar o sinal

captado em espectros de freqüência.

Como trabalho correlato, foi analisado o de Moretti (2003), com o título “Protótipo de

um software para o reconhecimento de notas musicais”, onde seu principal objetivo é o

reconhecimento de notas tocadas a partir de um acordeom.

1.1 OBJETIVOS

O objetivo deste trabalho é desenvolver um software que seja capaz de captar as ondas

através de um microfone e indicar visualmente ao usuário se o som se enquadra com o que se

deseja. Para tal, têm-se os seguintes objetivos secundários:

a) Captar o som emitido por fontes sonoras no ambiente;

b) Indicar visualmente detalhes do som que se está sendo captado, dentre eles um

espectro, um osciloscópio e uma lista com freqüências e suas amplitudes captadas.

c) Indicar se a definição sonora se enquadra com o que se deseja, ou seja, se a

variação sonora, em pontos percentuais, foi ajustada de acordo com o que o

usuário parametrizou.

1.2 ESTRUTURA DO TRABALHO

A seguir são apresentados os principais tópicos do trabalho.

O primeiro capítulo, abordado anteriormente, trata de passar uma introdução do

trabalho, bem como os motivos e justificativas do mesmo.

No segundo capítulo é informada uma revisão bibliográfica a respeito de percepção

humana do som, explicando basicamente o funcionamento do nosso ouvido.

O terceiro capítulo trata de explicar como é feita a conversão analógico-digital de

áudio, bem como ondas analógicas.

15

No quarto, é explanado sobre as propriedades gerais das ondas sonoras que são,

basicamente, velocidade, altura, intensidade e timbre.

No quinto capítulo é explicado o funcionamento da transformada de Fourier, contendo

o seu fluxo de execução bem como o porquê de seu nome.

O sexto capítulo apresenta alguns trabalhos correlatos que dizem respeito ao

desenvolvimento deste.

O sétimo capítulo explica o desenvolvimento do trabalho, contendo as técnicas e

ferramentas utilizadas, bem como a operacionalidade da implementação e os testes realizados.

O último capítulo refere-se à conclusão obtida com a execução desse trabalho, bem

como algumas extensões que podem ser tomadas a partir deste.

O apêndice A contém a função RealFFT utilizada no cálculo da FFT.

O apêndice B contém a função FFT, responsável pelo cálculo da FFT.

16

2 PERCEPÇÃO HUMANA DO SOM

Segundo Vilela (2002?), um fenômeno chamado ressonância ocorre na cóclea (parte

anterior do labirinto, situada no ouvido interno, que serve à audição) para permitir que cada

freqüência sonora faça vibrar uma seção diferente da membrana basilar (responsável pelo

processo de percepção do som, perfazendo uma análise das freqüências componentes de um

som). Tais vibrações são semelhantes àquelas que ocorrem em instrumentos musicais de

corda. Quando a corda de um violino, por exemplo, é puxada para um lado, fica um pouco

mais esticada do que o normal, fazendo com que se mova de volta na direção oposta, o que

faz com que a corda se torne esticada mais uma vez, mas agora na direção oposta, voltando

então à primeira posição. Esse ciclo repete-se várias vezes, razão pela qual uma vez que a

corda começa a vibrar, assim permanece por algum tempo.

Quando sons de alta freqüência penetram na janela oval (responsável por perceber

vibrações transmitidas através do ouvido médio), sua propagação faz-se apenas num pequeno

trecho da membrana basilar, antes que um ponto de ressonância seja alcançado. Como

resultado, a membrana move-se forçosamente nesse ponto, enquanto o movimento de

vibração é mínimo por toda a membrana. Quando uma freqüência média sonora penetra na

janela oval, a onda propaga-se numa maior extensão ao longo da membrana basilar antes da

área de ressonância ser atingida. Finalmente, uma baixa freqüência sonora propaga-se ao

longo de quase toda a membrana antes de atingir seu ponto de ressonância. Dessa forma,

quando as células ciliares próximas à base da cóclea são estimuladas, o cérebro interpreta o

som como sendo de alta freqüência (agudo), quando as células da porção média da cóclea são

estimuladas, o cérebro interpreta o som como de altura intermediária, e a estimulação da

porção superior da cóclea é interpretada como som grave.

Em termos matemáticos, os seres humanos podem ouvir sinais sonoros que variam

entre os limites de 22Hz até 22KHz. Abaixo de 22Hz temos o que se chama de infra-som e,

acima de 22KHz, o que se chama de ultra-som.

A figura 2 demonstra como é feita a propagação do som na cóclea do ouvido humano.

O item A demonstra a percepção de altas freqüências; o item B demonstra a percepção de

freqüências médias; o item C demonstra a percepção de freqüências baixas.

17

Fonte: VILELA (2002?)

Figura 2 – Demonstração da propagação de som na cóclea.

2.1 PERCEPÇÃO DA INTENSIDADE DE UM SOM

Segundo Vilela (2002?), a intensidade de um som é determinada pela freqüência de

movimento das fibras basilares. Quanto maior o deslocamento para frente e para trás, mais

intensamente as células ciliares sensitivas são estimuladas e maior é o número de estímulos

transmitidos ao cérebro para indicar o grau de intensidade. Por exemplo, se uma única célula

ciliar próxima da base da cóclea transmitir um único estímulo por segundo, a altura do som

será interpretada como sendo de um som agudo, porém de intensidade quase zero. Se essa

mesma célula ciliar é estimulada 1.000 vezes por segundo, a altura do som permanecerá a

mesma (continuará agudo), mas a sua intensidade será muito maior (deve-se à intensidade de

movimento das fibras basilares).

18

3 CONVERSÃO ANALÓGICO/DIGITAL

O som que se costuma ouvir deve ser convertido em sinais elétricos para que uma

máquina possa processá-lo. Essa é a função que se atribui ao microfone, que faz a

transformação de ondas sonoras em corrente elétrica, podendo assumir amplitudes mais altas

e mais baixas e com variações mais rápidas ou mais lentas.

Abaixo, na figura 3, está uma representação gráfica de um sinal elétrico captado por

um microfone.

Fonte: SALVADOR (2000).

Figura 3 – Representação elétrica de um sinal sonoro

Mas como o microfone capta tal sinal e o transforma em pulsos elétricos? “Um

microfone tem uma membrana que acompanha as vibrações do ar e um circuito que gera uma

corrente elétrica. A tensão ou voltagem dessa corrente varia, oscilando junto com as vibrações

da membrana” (IZECKSOHN, 2001).

Segundo este mesmo autor, após a captação dos sinais elétricos pelo microfone, em um

sistema digital, é iniciado o processo de conversão em informações numéricas (digitalização).

A placa de som do computador possui um conversor analógico/digital (A/D) além de um

conversor digital/analógico (D/A), localizados na entrada e na saída do da placa,

respectivamente. O conversor A/D retira amostras do estágio de oscilação do sinal sonoro e

lhe atribui um valor numérico. Abaixo, na figura 4, pode ser visto um exemplo de uma

amostra de oscilação que o conversor A/D faz.

19

Fonte: IZECKSOHN (2001) Figura 4 – Exemplo de uma amostra do conversor A/D.

Os pontos marcados na amostra são exatamente os pontos onde o conversor irá

marcar, criando um plano cartesiano com os mesmos.

baixo, na figura 5, pode ser observado um exemplo de como a onda apresentada na

figura 3 fica representada após a conversão A/D.

Fonte: adaptado de IZECKSOHN (2001)

Figura 5 – Visualização de um sinal digital

Cada amostra digital é um ponto que marca a posição da oscilação sonora num certo

instante. Freqüentemente, o conversor A/D marca com um valor numérico uma variação na

amplitude da onda, indicando se a voltagem subiu ou desceu. Segundo IZECKSOHN (2001),

o computador utiliza a marcação binária, indicando com 1 se o sinal aumentou e com 0 se

desceu. O telefone consegue diferenciar 256 variações na amplitude (8 bits), o que pode ser

considerada uma qualidade um tanto quanto precária aos nossos ouvidos. A qualidade do CD

utiliza 16 bits, sendo possível alcançar 65.536 variações de amplitude diferentes. Já o DVD,

utiliza 24 bits, podendo alcançar até 16.777.216, o que já faz com que o ser humano perceba

uma qualidade muito superior ao de CD. Abaixo, na figura 6, pode-se ter uma visão geral do

processo de digitalização. O microfone envia sinais elétricos à placa de som do computador

que os converte em uma seqüência de bits, e envia à memória para ser utilizado.

20

Fonte: adaptado de SALVADOR (2000)

Figura 6 – Visão geral do processo de digitalização

3.1 ONDAS ANALÓGICAS

Segundo Izecksohn (2001), as ondas sonoras são as oscilações do ar, que vão variando

ao longo do tempo de acordo com as características sonoras. Através de uma membrana, o

microfone as reconhece, criando uma corrente elétrica que varia de forma análoga

(semelhante) a elas. Essa corrente é o sinal elétrico, analógico, do áudio.

Fonte: adaptado de KANG (2001)

Figura 7 – Representação de uma onda analógica

Acima, na figura 7, pode ser vista a representação de uma onda analógica, onde:

• Freqüência: é o período de repetição da onda sonora. Período é o inverso da

freqüência, ou seja, f =1/p. O período é a duração de um ciclo.

• Amplitude: é a altura do sinal de áudio;

• Crista: é o ponto mais alto de uma amplitude;

• Calha: é o pondo mais baixo de uma amplitude.

21

3.2 PROPRIEDADES DO SOM

As ondas sonoras são longitudinais, apresentando as propriedades de velocidade,

altura, intensidade e timbre, que serão vistas a seguir.

3.2.1 Velocidade

Segundo Lütz (2003), o som se propaga com velocidades diferentes em meios

diferentes, ou seja, varia de acordo com o meio em que se propaga. No ar, o som se propaga,

em média, a cerca de 340 m/s. Esta velocidade finita e relativamente baixa (em comparação

com a velocidade da luz) permite a formação do eco.

“O ouvido humano consegue distinguir sons que estejam separados no tempo em pelo menos 0,1s. Durante este intervalo de tempo, o som percorre cerca de 30 m. Assim, se uma pessoa emite um som que é refletido em uma parede a mais de 17 m de distância (34 m para o som ir e voltar), ele demorará mais de 0,1 s para voltar, de maneira que a pessoa ouvirá o eco do som produzido” (LÜTZ, 2003).

Além da reflexão, o som também pode sofrer reforço, ou interferência construtiva;

reverberação, onde o som é refletido em algum obstáculo, voltando antes de 0,1s causando

um prolongamento da sensação sonora; refração, que é a mudança de meio com mudança de

velocidade; batimento, resultante da interferência de ondas sonoras de freqüências

ligeiramente diferentes; ressonância, quando a freqüência de uma vibração externa

corresponde a uma das freqüências naturais de um objeto, ele absorve energia mais

facilmente, vibrando de maneira especialmente intensa.

3.2.2 Altura

De acordo com Lütz (2003), pode se dizer que a altura do som é a qualidade que nos

permite dizer se o som é grave ou agudo. Corresponde à freqüência do som. Como visto no

capítulo 2, o ouvido humano geralmente capta freqüências entre 22Hz e 22kHz (pessoas que

costumam ouvir músicas altas ou se expõem a sons muito intensos, normalmente, ouvem

sinais sonoros de, no máximo, 15kHz ou 18kHz).

Segundo o mesmo autor, as freqüências mais baixas correspondem a sons graves, já as

mais altas, correspondem a sons agudos. As notas musicais correspondem a freqüências

específicas. Por exemplo, a freqüência de 440Hz corresponde à nota lá. A nota lá mais

próxima e mais grave do que esta possui freqüência de 220Hz (metade), e a nota lá da oitava

22

seguinte corresponde à freqüência de 880Hz. A nota correspondente da oitava seguinte possui

freqüência igual a 1760Hz.

Ocorre o mesmo para as demais notas. Para obter a nota correspondente da oitava

seguinte ou anterior, basta multiplicar ou dividir por 2 a freqüência.

Como, para cada oitava (seqüência de notas de dó até si, por exemplo) corresponde as

notas com o dobro da freqüência da oitava anterior, é percebido que as notas se organizam

como umas progressões geométricas, embora são como uma progressão aritmética para o

ouvido humano.

Isto significa que o que o ouvido percebe é o logaritmo da freqüência, pois o logaritmo

de uma progressão geométrica é uma progressão aritmética.

3.2.3 Intensidade

A intensidade de um som é o que dá a sensação de som forte ou fraco. É determinada

pela amplitude da onda sonora. Pode se dizer que quanto maior for a amplitude, maior será a

intensidade do som.

Conforme Lütz (2003), a potência da onda sonora é proporcional ao quadrado da

amplitude, isto é, caso a amplitude for duplicada, estar-se-á quadruplicando a potência

(energia por unidade de tempo) da onda sonora. O que os ouvidos humanos captam,

entretanto, corresponde ao logaritmo da potência que chega até o ouvido. Por esta razão, faz

sentido medir a intensidade do som com sendo o logaritmo da potência (ou da potência por

unidade de área).

A unidade de medida mais utilizada para a medição da intensidade é o decibel,

simbolizado pela sigla dB. Para se ter uma idéia intuitiva do valor do decibel, pode-se

estabelecer a seguinte relação qualitativa, conforme quadro 1.

23

Fonte: LÜTZ, 2003

Quadro 1 – Relação qualitativa da intensidade sonora.

3.2.4 Timbre

Diz-se timbre, ou harmônicas, o formato da onda sonora, que nos permite, por

exemplo, identificar o instrumento musical que produz determinada nota ou reconhecer uma

pessoa pela voz. Existe uma unidade de formatos possíveis. As ondas podem ser senoidais,

quadradas, triangular etc. Na figura 8 podem ser vistos alguns formatos de ondas.

Figura 8 – Tipos de onda

MEDIDA SOM (SENSAÇÃO) 20 dB Suave 40 dB Moderado 60 dB Intenso 80 dB Muito intenso 100 dB Ensurdecedor 120 dB Doloroso 140 dB Dano físico

24

4 TRANSFORMADA DE FOURIER

Segundo Smith (1999), a análise de Fourier foi nomeada após a morte de Jean

Baptiste Joseph Fourier (1768–1830), um matemático e físico francês. Fourier foi

condecorado pelas suas descobertas matemáticas e por ter se aprofundado na utilidade prática

das técnicas. Fourier estava pesquisando a propagação do calor e apresentou um artigo, em

1807, para o Institut de France contendo o uso de senóides para representar distribuições de

temperatura. O artigo continha uma reivindicação controversa dizendo que qualquer sinal

periódico contínuo podia ser representado como a soma de ondas senóides propriamente

escolhidas.

4.1 ENTENDENDO A TRANSFORMADA DE FOURIER

Segundo Moretti (2003), a Transformada de Fourier (TF) de uma função h(t) dá-se

através de:

dth(t)e

(h(t))(f)hft2

∫∞+∞−

−=ℑ=

π)

Fonte: MORETTI (2003) Figura 9 – Transformada de uma função h(t)

A integral na figura 9 pode ser vista como uma média ponderada infinita de h(t)

usando a função moduladora como fator de ponderação. O operador de Fourier

transforma qualquer função h(t) definida no domínio do tempo ou do espaço para uma função

representada por H(f) ou do domínio da freqüência f.

A função inversa da TF é dada pela função 1 i2 ftˆ ˆh(t) (h(f)) h(f)e dfπ+∞−−∞

= ℑ = ∫)

.A função 2 2ˆ ˆ ˆ| h(f ) | Re(h(f )) Im(h(f ))= + define a amplitude ou espectro de Fourier.

No próximo item é descrita uma das variações da TF, denominada de Fast Fourier

Transform (FFT) ou, simplesmente, Transformada Rápida de Fourier.

4.2 FUNCIONAMENTO DA TRANSFORMADA RÁPIDA DE FOURIER

A FFT simplesmente se diferencia das demais pelo fato de ser mais rápida em termos

computacionais. Possui uma série de algoritmos que agilizam o processo da FT. Abaixo é

apresentado rapidamente o funcionamento da FFT.

25

Na notação complexa, os domínios de tempo e freqüência possuem cada um, um sinal

elaborado por N pontos complexos. Cada um destes pontos é composto por dois números, a

parte real e a parte imaginária.

De acordo com Smith (1999), a FFT começa decompondo um sinal de N pontos no

domínio do tempo para N sinais no domínio do tempo de acordo com a figura 10. O passo

seguinte é calcular os N espectros de freqüência correspondentes a esses N sinais no domínio

do tempo. Finalmente, os N espectros são sintetizados em um único espectro de freqüência.

A figura 10 indica um exemplo da decomposição de um sinal domínio de tempo

usando a FFT. No exemplo, um sinal de 16 pontos é decomposto em 16 sinais de um ponto,

passando por 4 estágios.

Fonte: SMITH (1999)

Figura 10 – Decomposição da FFT

O primeiro estágio divide o sinal em dois, ambos consistindo de 8 pontos. No segundo

estágio, os dados são decompostos em 4 sinais com 4 pontos em cada. Este processo continua

até que se obtenha N sinais compostos por 1 ponto. Uma decomposição entrelaçada é

realizada toda vez em que um sinal é dividido em dois, ou seja, o sinal é separado em

amostras pares e ímpares. A quantidade de estágios necessários para a decomposição é dada

pela fórmula Log2N, onde N é o número de pontos. O exemplo da figura 5 requer 4 estágios,

ou seja, Log216 = X � 2X = 16 � 2X = 24 � X = 4.

O próximo passo, então, é descobrir o espectro de freqüência do sinal de 1 ponto no

domínio de tempo. Esse passo pode ser evitado, pois o resultado será ele mesmo.

26

O último passo da FFT é combinar os N espectros de freqüência na exata ordem

reversa do resultado da decomposição do domínio de tempo utilizando um algoritmo de

inversão de bits. Como este não é aplicável, deve-se voltar a operação realizada pela

decomposição do domínio de tempo um estágio por vez até que se obtenha 1 sinal com N

pontos no domínio da freqüência. Por exemplo: 8 sinais de 1 ponto � 4 sinais de 2 pontos �

2 sinais de 4 pontos � 1 sinal de 8 pontos.

A figura 11 mostra como dois espectros de freqüência, cada um composto por 4

pontos, são combinados em um único espectro de freqüência de 8 pontos. Esta síntese precisa

voltar a decomposição entrelaçada feita no domínio de tempo. Em outras palavras, a operação

do domínio de freqüência precisa corresponder com o procedimento de combinar dois sinais

de 4 pontos por entrelaçamento do domínio de tempo. Os conjuntos abcd e efgh são

considerados dois sinais no domínio de tempo. Um sinal de 8 pontos no domínio de tempo

pode ser formado em dois passos: é diluído cada sinal de 4 pontos com zeros para fazer que se

tornem sinais de 8 pontos e, então, são adicionados juntos. Assim tem-se abcd como

a0b0c0d0 e efgh como 0e0f0g0h. Obtêm-se aebfcgdh como o resultado da soma dos dois

sinais.

Fonte: SMITH (1999)

Figura 11 – Síntese da FFT

27

Como o visto na figura 11, diluir o domínio de tempo com zeros corresponde na

duplicação do espectro de freqüência. Conseqüentemente, os espectros de freqüência são

combinados na FFT pela duplicação dos mesmos, depois os somando.

Fonte: SMITH (1999)

Figura 12 – Diagrama de fluxo da síntese da FFT

Para que sejam compatíveis quando somados, os dois sinais no domínio de tempo são

diluídos com zeros de uma maneira um pouco diferente. Em um sinal, os pontos ímpares são

zero, enquanto no outro sinal, os pares são zero. Resumindo, um dos sinais no domínio de

tempo (0e0f0g0h) é deslocado uma amostra para a direita. Esta mudança corresponde à

multiplicação do espectro por uma senozóide (espectro de uma função de variação de

deslocamento). A figura 12 mostra o método usado para combinar 2 espectros de freqüência

de 4 pontos em um único espectro de 8 pontos. A operação xS significa que o sinal é

multiplicado por uma senozóide com uma freqüência apropriada.

Esse método é o chamado de borboleta ou butterfly devido à sua aparência. Este

método é o elemento computacional básico da FFT, transformando 2 pontos complexos em

outros 2 pontos complexos.

A figura 13 apresenta o diagrama de fluxo da FFT.

28

Fonte: adaptado de SMITH (1999)

Figura 13 – Diagrama de fluxo da FFT

Resumindo, o fluxo da FFT é baseado em três passos:

1. Decompõe um sinal de N pontos no domínio do tempo em N sinais, cada um

contendo um único ponto;

2. Encontra o espectro de cada um dos sinais de N pontos;

3. Sintetiza os N espectros de freqüência em um único espectro.

29

5 DESENVOLVIMENTO DO TRABALHO

Neste capítulo são abordados os requisitos do problema, bem como a especificação, a

operacionalidade, a implementação e, por fim, os testes realizados.

Com base nos objetivos descritos na seção 1.1, desenvolveu-se um sistema capaz de

verificar a qualidade sonora dos graves e agudos do sinal de áudio captado por um microfone

ligado à placa de som do computador.

5.1 REQUISITOS PRINCIPAIS DO PROBLEMA A SER TRABALHADO

O quadro 2 demonstra os principais requisitos funcionais do aplicativo.

Requisitos funcionais RF01: O usuário deverá ser capaz de informar uma equalização desejada ao sistema.

RF02: O sistema demonstrará no vídeo a qualidade do som captado através de um espectro de

freqüência e um osciloscópio integrado.

RF03: O áudio deverá ser captado por um microfone ligado à placa de som do computador.

RF04: O sistema indicará se o som captado está de acordo com o que o usuário deseja.

RF05: O sistema apresentará os valores das amplitudes obtidas para cada faixa de freqüência

em uma lista.

Quadro 2 – Requisitos funcionais

O quadro 3 demonstra os principais requisitos não-funcionais do aplicativo.

Requisitos não-funcionais RNF01: A placa de som deverá ser capaz de processar sinais com amostragem de 22KHz.

RNF02: O microfone deverá ser capaz de captar sinais de áudio na faixa compreendida entre

22Hz à 22KHz.

RNF03: O sistema operacional poderá ser Windows 98, Windows Me, Windows 2000 ou

Windows NT, todos da empresa Microsoft.

RNF04: Deverão ser utilizadas fontes sonoras como, por exemplo, caixas amplificadas, para a

emissão dos sinais de áudio.

Quadro 3 – Requisitos não-funcionais

30

5.2 ESPECIFICAÇÃO

Inicialmente, uma visão geral do sistema é apresentada na figura 14 indicando o

esquema de montagem inicial.

Figura 14 – Esquema de montagem inicial

Em resumo, devem-se ter fontes sonoras ligadas a uma mesa de som com um controle

para a configuração de graves e outro para agudos. Estes controles devem estar configurados

inicialmente no centro, ou seja, na metade da faixa compreendida entre o menor valor e o

maior valor para o controle. O computador deverá estar ligado em uma entrada da mesa de

som para que se possam emitir o sinal grave e o agudo para os testes de qualidade sonora. Por

fim, um microfone deverá estar conectado à placa de áudio do computador para que esse

possa captar os sinais de áudio e enviá-los ao computador.

A seguir serão vistas informações pertinentes à especificação do sistema na notação

UML.

5.2.1 DIAGRAMA DE CASOS DE USO

Segundo Medeiros (2004), o diagrama de Caso de Uso é a parte mais importante da

construção de um software utilizando a UML, sendo uma macroatividade que encerra diversas

tarefas ou atividades que, por sua vez, visam à consecução desse macroatividade.

31

A figura 15 mostra o diagrama de Caso de Uso para entendimento geral do sistema,

indicando as funcionalidades básicas do sistema, dentre elas estão: Informa equalização

desejada, Análise dos sinais de áudio, Capturar sinais de áudio e Armazenar em buffer

(memória), apresentar osciloscópio, gerar espectro, executar a FFT e a indicação da

equalização obtida.

Figura 15 – Diagrama de casos de uso.

Abaixo é destacada cada etapa desse diagrama.

a) Informa a equalização desejada: nesta parte o usuário indica qual será a

equalização de graves e agudos que se deseja obter no ambiente. O valor

informado será dado em percentual. Esse percentual é a variação do valor obtido

pelos valores base;

b) Análise dos sinais de áudio: aqui o sistema inicia o processo da análise do sinal

captado. Para esse processo, deverá ser estipulada a equalização base para os

graves e para os agudos sendo que um microfone deverá ser posicionado na

posição desejada e os controles grave e agudo, da mesa de som, deverão estar

ajustados no meio;

c) Capturar sinais de áudio e armazenar em buffer: é capturado o sinal de áudio e

armazenado em buffer;

32

d) Apresentar osciloscópio: apresenta um osciloscópio para a visualização dos sinais

que estão sendo captados pelo microfone em tempo real;

e) Gerar espectro: processa o sinal de áudio e visualiza o espectro de um

determinado estado do sinal capturado no buffer bem como a amplitude de cada

freqüência presente no sinal capturado;

f) Executar a FFT: inicia a transformada rápida de Fourier, convertendo a amostra de

valores do tipo inteiro para o tipo real, ou de ponto flutuante. Como retorno, tem-

se a mesma amostra de valores convertidos representando valores de amplitude,

em módulo, sobre os números complexos;

g) Indicação da equalização obtida: apresenta para o usuário se a equalização do

ambiente se encontra como o desejado. Caso não se encontre, o valor é

apresentado na cor vermelha, indicando que determinado controle da mesa de som

deve ser ajustado para obter o desejado.

5.3 IMPLEMENTAÇÃO

A seguir serão vistas as técnicas e ferramentas que foram utilizadas para a elaboração,

bem como a operacionalidade do sistema proposto.

5.3.1 TÉCNICAS E FERRAMENTAS UTILIZADAS

Inicialmente, um levantamento com as possibilidades de plataformas para

desenvolvimento foi elaborado para que se encontrasse uma que fosse mais fácil e completa

para a implementação. Dentre várias pesquisadas, a plataforma escolhida foi a Delphi, pois,

além de ser uma ferramenta vista pelo curso de Sistemas de Informação, é uma ferramenta

poderosa para a utilização de funções da API do Microsoft Windows e a que o autor

apresentava maior domínio. As outras também pesquisadas foram Visual Basic, Java e C.

Como base para o desenvolvimento da aplicação, foi utilizado o projeto “A Simple

Osciloscope”, Darby (2004). O projeto, feito em Delphi, conta com a utilização da API

WaveIn para apresentar a entrada de sinais de áudio no monitor além da utilização da FFT

para apresentar o espectro desses sinais. A unit utilizada no sistema, que trata da API WaveIn,

é nomeada de UWavein, também contida nesse projeto.

33

Em uma visão geral, a unit executa os seguintes passos:

1. Aloca memória para a estrutura do formato de onda (função AllocWaveFormatEx);

2. Encontra um dispositivo compatível com as características de onda informadas no

primeiro passo (função waveInGetNumDevs);

3. Aloca a memória para o cabeçalho da onda (função AllocWaveHeaders);

4. Aloca a memória do buffer de dados da onda (função AllocPCMBuffers).

5.3.1.1 FFT

No sistema, a FFT foi utilizada a partir da unit U_FFT, que é integrante do Turbo

Pascal Numerical Methods Toolbox, disponibilizado pela Borland International Inc. O

método empregado é o de Cooley-Tukey e foi utilizado para converter uma matriz no domínio

de tempo para o domínio da freqüência. Com o resultado foi possível realizar o cálculo do

aumento de amplitude para a equalização de grave e de agudo que será visto a seguir.

A figura 16 indica a codificação do método Calcfreqs, que inicia a FFT.

Figura 16 – Codificação da função Calcfreqs

34

O método RealFFT realiza a FFT, convertendo sinais com N pontos no domínio do

tempo para N sinais de 1 ponto no domínio da freqüência. Os vetores XRealPtr e XImagPtr

correspondem aos cosenos e senos da onda, respectivamente. Após isso, o método Results

apresenta os valores de XRealPtr e XImagPtr nos seguintes lugares:

• Carrega a lista de freqüências com as amplitudes encontradas para cada uma;

• Preenche o gráfico de espectro;

• Realiza a armazenagem do valor base para graves e agudos, bem como calcula a

variação da equalização.

A freqüência e a amplitude são definidas no método Results conforme a figura 17.

Figura 17 – Definição dos valores da freqüência e amplitude

O método RealFFT pode ser visualizado com maiores detalhes no apêndice A.

O método FFT, responsável pelo cálculo do FFT, pode ser visualizado com maiores

detalhes no apêndice B.

5.3.1.2 Cálculo da equalização de grave e de agudo

Para o cálculo de ajuste de grave e de agudo, foi utilizado um método simples, que

capta a freqüência com o maior valor de amplitude durante a apresentação dos resultados. A

figura 18 apresenta esse funcionamento.

35

Figura 18 – Código para armazenar a freqüência com maior amplitude

Nessa mesma figura, numpoints é o número de freqüências para o eixo X do espectro,

amplitude é a amplitude da freqüência atual, locValorMaximo é um type que contém os

valores de amplitude, freqüência e o índice da matriz (no intervalo de 0 a numpoints) em que

o maior valor de amplitude foi encontrado. Em resumo, a freqüência com maior amplitude é

indicada em locValorMaximo. Esse código é utilizado tanto para o cálculo das bases quanto

para o de graves e agudos.

O código responsável por armazenar as amplitudes para a base dos sinais graves e

agudos é o demonstrado na figura 19.

Figura 19 – Captura dos valores base para graves e agudos

Nesse procedimento ele grava o valor de amplitude captado para o que se pede. Caso

seja escolhida a opção Valor base graves, a variável ValorInicialGraves é alimentada. No

contrário, a variável ValorInicialAgudos é alimentada.

A figura 20 apresenta o código utilizado para a verificação dos sinais graves e agudos.

Figura 20 – Código para a verificação da qualidade dos sinais graves e agudos

36

Nesse código, ValorGraves e ValorAgudos contém o percentual de variação obtido

entre o valor da amplitude atual e o valor da amplitude da base.

Caso o valor da variação seja 5% maior ou menor do que o valor parametrizado, a

caixa de visualização dos valores obtidos ficará vermelha, caso contrário, branca. Esse

funcionamento prático poderá ser visualizado no tópico 7.3.2.

Em resumo, a análise dos sinais graves ou agudos é feita da seguinte forma:

• Encontra-se o percentual de variação em relação ao valor base;

• Posiciona os indicadores visuais (em Equalização Captada) de acordo com

a variação.

5.3.2 OPERACIONALIDADE DA IMPLEMENTAÇÃO

Neste capítulo é abordado o modo de utilização do sistema a partir de um exemplo

prático.

Tem-se o seguinte problema como exemplo: é necessário ajustar os controles de ganho

de grave e de agudo do canal de uma guitarra elétrica, em uma casa noturna, a fim de que a

amplitude do sinal grave seja 80% mais baixo e do agudo 25% mais alto em referência ao

valor base estando no centro do ambiente. Quanto à mesa de som, os controles de ganho de

grave ajustam freqüências entre 20Hz e 1kHz, enquanto os controles de ganho de agudo

ajustam freqüências entre 1,1kHz e 22kHz.

Abaixo está uma imagem apresentando a tela principal do sistema.

37

Figura 21 – Tela principal do sistema

Onde:

1. Osciloscópio;

2. Menu principal, contendo:

• Inicia Display: inicia o osciloscópio;

• Para Display: para a apresentação do osciloscópio;

• Captura Estado: captura o sinal atual que está sendo apresentado;

• Calcula: realiza o cálculo da variação do sinal capturado, indicando um

espectro e uma lista de freqüências com suas amplitudes.

3. Guias: percorre as guias do sistema, sendo elas:

• Lista de freqüências: contem uma lista com as freqüências e suas respectivas

amplitudes.

38

Figura 22 – Lista de freqüências

• Gráfico do espectro: contém o gráfico do espectro para o sinal capturado.

Figura 23 – Gráfico do espectro

• Equalização: aqui é feita a configuração do usuário, bem como é apresentada a

variação da equalização captada.

39

Figura 24 – Equalização

A guia Equalização contém:

• Opções: opção que será realizada durante o cálculo;

• Reiniciar: reinicia o cálculo da equalização;

• Configuração do Usuário: parametrização do usuário, onde é informado o

percentual que se deseja sobre o valor base;

• Equalização Captada: apresenta a variação da equalização, em pontos

percentuais, sobre o valor base.

Agora que o sistema já foi apresentado, dar-se-á início à resolução do problema

proposto. Inicialmente, devem-se captar os valores base para graves e agudos com o

microfone posicionado ao centro do ambiente. A figura 25 indica o posicionamento do

microfone.

40

Figura 25 – Posicionamento do microfone

Para captar, então, os valores das bases, deve-se selecionar a opção Valor base graves

ou Valor base agudos. Como exemplo, inicialmente será captado o valor da base para graves.

Sendo assim, será selecionada a opção Valor base graves.

Feito isso, deve-se clicar em Inicia Display junto ao Menu do sistema.

Figura 26 – Menu

Após clicar no botão, o osciloscópio deverá entrar em funcionamento. Nesse momento,

deverão ser inicializados todos os controles da mesa de som pertinentes ao canal da guitarra.

Isto inclui posicionar os controles de graves e agudos do centro e o controle de volume deverá

ser ajustado de acordo com o que se achar conveniente. Deve-se, então, enviar um sinal

sonoro que esteja enquadrado no domínio do controle de ganho dos graves da mesa de som

(22Hz a 1kHz).

Após o sinal ser enviado, deverá ser pressionado o botão Captura Estado, disponível

no menu do sistema. Isso fará com que o sistema armazene o estado atual do buffer para o

cálculo da equalização. Feito isso, deve-se pressionar o botão Calcula, disponível no menu do

sistema. O botão gera a lista de freqüências com suas amplitudes, o espectro obtido através do

41

cálculo de FFT e armazena o valor da amplitude máxima adquirida para os graves. Após isso

é liberada a opção Graves, em Opções.

Depois de obter a base de graves, deve-se obter agora a base de agudos. Para isso, os

passos feitos para obter a base de graves devem ser repetidos com algumas alterações: o sinal

sonoro enviado deve estar enquadrado no domínio do controle de ganho dos agudos (1,1kHz a

22kHz). Após esse processo, a opção Agudos, em Opções, é liberada.

A seguir, deverá ser feita a parametrização desejada pelo usuário. O valor para esta

parametrização é configurado em Configuração do Usuário. Na figura 27 é possível

visualizar como fica essa parametrização para sanar o problema proposto.

Figura 27 – Painel de configuração do usuário

Como pode ser visto, foi configurado -80% para os Graves e 25% para os Agudos, ou

seja, o valor da amplitude do sinal grave deverá ser 80% mais baixo do que o valor obtido

para a base de graves, enquanto que o valor da amplitude do sinal agudo deverá ser 25% mais

alto do que o valor obtido para a base de agudos.

Possuindo o valor para as duas bases, devem-se, agora, reajustar os controles de grave

e agudo da mesa de som a fim de alcançar as necessidades do problema descrito.

Para avaliar se a equalização de graves se encontra conforme a necessidade, será

selecionada a opção Graves no menu do sistema e, logo após, deverá ser pressionado o botão

Inicia Display.

42

Feito isso, o mesmo sinal sonoro para o cálculo da base de graves deverá ser utilizado

para essa verificação. Enquanto este sinal é emitido, deve-se clicar em Captura Estado e, em

seguida, Calcula.

Figura 28 – Equalização captada de acordo com necessidades

A figura 28 apresenta o resultado obtido após o pressionamento do botão Calcula.

Nela, pode ser visto que a equalização para o sinal grave foi obtida aproximadamente

conforme a necessidade (-80%). O sistema não acusa problemas caso esteja com uma

variação de 5% da amplitude desejada. A figura 29 mostra a funcionalidade quando a

equalização obtida não se enquadra com o que se pede.

Figura 29 – Equalização captada não está de acordo com as necessidades

43

Em resumo, quando a equalização está em desacordo com a parametrização inicial, a

caixa do valor percentual é apresentada em vermelho, caso contrário, branca. No primeiro

caso, deve-se ajustar o controle do ganho de graves da mesa de som até que o valor se

enquadre ao que se deseja, senão deve-se prosseguir à verificação dos sinais agudos.

O mesmo procedimento tomado para a verificação dos sinais graves deve ser tomado

para a verificação dos sinais agudos, apenas alterando o sinal sonoro emitido para o mesmo

utilizado durante o processo de captura da base aguda. Nesse procedimento o controle de

ganho de grave da mesa não poderá ser alterado, pois tornará inválida a equalização obtida

anteriormente.

A figura 30 apresenta a equalização obtida ao final de todo o processo.

Figura 30 – Equalização final obtida

Aqui se diz que o canal da guitarra está ajustado conforme o solicitado no problema ao

início desse capítulo, porém, os valores finais obtidos estão apenas aproximados. Caso seja

necessário estar totalmente de acordo, repita o processo de verificação até alcançar a

amplitude desejada.

5.4 RESULTADOS E DISCUSSÃO

Como resultado, consegui-se transformar um sinal de áudio em informação para o

usuário a partir da hora em que esse dado corresponde a um valor significativo para o

entendimento e compreensão do usuário.

44

Quanto aos testes, foram realizados de várias maneiras, todos obtendo resultados

positivos. Os fatores variantes dos testes foram, basicamente: o microfone utilizado

(verificando ser o maior problema), fontes sonoras e o ambiente.

Abaixo segue um resumo com dois testes realizados em diferentes cenários.

Em um primeiro momento, foi testado o seguinte cenário:

• Ambiente: sala de 4 x 6 metros;

• Fontes sonoras: 2 caixas de 10 Watts RMS;

• Microfone: eletreto;

• Sinal grave emitido: 440Hz;

• Sinal agudo emitido: 6kHz.

Tendo em base esse cenário, posicionou-se o microfone a uma distância de,

aproximadamente, 2 metros da fonte sonora.

Os resultados aqui obtidos não foram totalmente válidos. Verificou-se que o microfone

de eletreto não possui as características necessárias para ser utilizado nos testes, pois este não

consegue captar corretamente sinais sonoros em certas distâncias.

Em outro momento, utilizou-se o seguinte cenário:

• Ambiente: sala de 4 x 6 metros;

• Fontes sonoras: 1 caixa amplificada de guitarra de 60 Watts RMS para a

emissão de sinais agudos e 1 caixa amplificada de 200 Watts RMS para a

emissão de sinais graves;

• Microfone: profissional (Seinnheiser Evolution e840);

• Sinal grave emitido: 220Hz;

• Sinal agudo emitido: 3kHz.

45

Tendo em base este cenário, o microfone foi posicionado a uma distância de cerca de 2

metros das fontes sonoras.

Os resultados aqui foram satisfatórios: o microfone conseguiu captar o som produzido

pelas fontes sonoras. O sistema identificou corretamente a variação das intensidades sonoras,

conseguindo informar ao usuário se a amplitude estava acima ou abaixo do esperado.

46

6 CONCLUSÕES

É possível dizer que a manipulação de elementos sonoros é hoje uma realidade prática

e extremamente funcional. Com o avanço da tecnologia, os sistemas computacionais foram

possuindo pouquíssimas limitações para tal manipulação. Esse trabalho provou justamente

este fato, visando ser possível a criação de um software capaz de realizar a interpretação de

ondas sonoras, transformando esses dados em informações para o usuário.

Partindo dos objetivos vistos na sessão 1.1, é possível dizer que todos foram atendidos

no trabalho. O sistema capta claramente o som emitido por fontes sonoras utilizando um

microfone de alta fidelidade ligado ao computador. O sinal captado é apresentado no

osciloscópio no domínio de tempo e decomposto pela FFT para ser apresentado em um

espectro de freqüência. Como indicativo visual, é feita a troca da coloração do display, que

indica o porcentual de variação do som captado, bem como barras indicativas.

Quanto ao ambiente de desenvolvimento, o Delphi foi escolhido por se tratar de uma

das ferramentas vistas nas disciplinas do curso de Sistemas de Informação, porém nada

impede que os mesmos conceitos vistos aqui nesse trabalho possam ser empregados em

qualquer outra ferramenta de desenvolvimento para a plataforma Windows 32bits.

A utilização dos procedimentos inclusos no projeto A Simple Oscilloscope, de Darby,

foi extremamente crucial para que esse trabalho pudesse ser concluído. Desta forma, ficou

claro que a utilização de códigos-fonte livre pode ser um aliado extremamente poderoso para

a criação de qualquer sistema em qualquer plataforma.

Como resultado final, foi obtido um sistema que auxilia na configuração de mesas de

som para o uso em ambientes fechados quanto abertos. O usuário pode saber, também, qual a

freqüência de maior presença que está sendo propagada no ambiente através do gráfico de

espectro.

6.1 LIMITAÇÕES

O sistema desenvolvido depende de um sinal limpo e contínuo para que seu

funcionamento não seja afetado, deixando claro que no momento não é possível fazer a

verificação com os próprios instrumentos ou qualquer outro tipo de gerador sonoro.

47

A verificação de apenas dois canais torna-se um empecilho quando se sabe que a

maioria das mesas de som são constituídas por mais de 2 controles de regulagem. O usuário é

capaz de enganar o sistema, apenas enviando um sinal de uma outra freqüência e

armazenando em uma das bases (graves ou agudos). Depois, é só verificar com a mesma

freqüência emitida se o som obteve a variação desejada. Porém, esse método torna-se inviável

quando se tratar de vários controles de equalização, pois acaba sendo um método

extremamente demorado.

Notou-se que um dos principais fatores que influenciam diretamente no sistema é a

qualidade do microfone. Quanto menor a fidelidade, pior será o resultado obtido, podendo

variar desde o valor das amplitudes quanto restringir à certas freqüências. O ideal é fazer o

uso de microfones bons com alta fidelidade. Esses microfones são mais caros que os

convencionais, porém apresentam melhores resultados, garantindo o bom funcionamento do

sistema.

6.2 DIFICULDADES ENCONTRADAS

A principal dificuldade foi descobrir um método para identificar a variação da

amplitude, principalmente porque os sinais dos instrumentos captados não são contínuos.

6.3 EXTENSÕES

Abaixo são apresentadas algumas idéias para serem implementadas no sistema a fim

de melhorar ou completar seu funcionamento:

• opção para gravação em arquivos de áudio (Wave ou MP3). Isto pode ser utilizado

para diversos fins, desde a possibilidade de se verificar a qualidade sonora obtida

em tal hora, quanto realizar comparações com outras amostras de som;

• cálculo em tempo real do espectro (FFT), fazendo com que o processo possa ser

observado no momento em que o microfone capta o som. Com isso, pode-se

utilizar como um medidor de intensidade sonora;

• possibilidade de serem calculadas mais faixas de freqüência para que outros tipos

de mesas de som possam ser utilizadas. Isto será útil para a utilização de mesas

com várias bandas de equalização;

48

• gravação da equalização do cliente, visando estar com os valores já ajustados em

caso de uma futura verificação;

• visualizar a amplitude máxima captada em tempo real, indicando se está de acordo

com as regras municipais. É fato que hoje em dia a fiscalização percorre casas

noturnas e as multam caso a amplitude esteja acima do que é permitido. Com essa

implementação, seria possível estar emitindo sinais visuais informando se o som

está com uma intensidade além da permitida;

• gerador de sinais analógicos para serem enviados à mesa de som, visando a

praticidade da utilização do software. Em outras palavras, esta implementação

faria com que o usuário pudesse emitir sinais de qualquer freqüência para as fontes

sonoras.

• implementar um método para que a verificação seja feita a partir dos instrumentos

ou gerador de sinais que forem realmente utilizados. Como pôde ser visualizado, o

sistema aqui informado serve apenas para a utilização com sinais limpos, ou seja,

com um pico de freqüência que sempre estará em destaque. Com essa

implementação, será possível utilizar instrumentos para o envio de sinais sonoros

às fontes.

• implementar um controle para regular automaticamente a mesa de som. Isso pode

ser utilizado para que, quando a equalização obtida não seja adequada, o sistema

irá fazer a alteração nos controles da mesa de som sem que o usuário necessite

fazer algum ajuste manual.

49

REFERÊNCIAS BIBLIOGRÁFICAS

BEHRINGER SPEZIELLE STUDIOTECHNIK GMBH. Eurorack MXB1002: 10 channel mixing monsole with optional battery operation. Alemanha, 2005. Disponível em: <http://www.behringer.com/MXB1002/index.cfm?lang=ENG>. Acesso em: 17 jul 2005.

BORLAND SOFTWARE CORPORATION. Borland. São Paulo, 2004. Disponível em: < http://www.borland.com.br/>. Acesso em: 11 dez 2004.

DARBY, Gary. A Simple Oscilloscope. Richmond, 2005. Disponível em: <http://www.delphiforfun.org/Programs/oscilloscope.htm>. Acesso em: 14 mar 2005.

IZECKSOHN, Sérgio. Som analógico e som digital, Rio de Janeiro, 2001. Disponível em: <http://www.homestudio.com.br/Artigos/Art051.htm>. Acesso em: 11 set 2004.

KANG, Jerry. Communications Law & Policy, Aspen, 2001. Disponível em: <http://www1.law.ucla.edu/~kang/commlaw/html/3__analog_wave.html>. Acesso em: 19 out. 2004.

LÜTZ, Eduardo. Lutz page, Porto Alegre, 2003. Disponível em: <http://edlutz.netfirms.com/medio/index.html>. Acesso em: 20 jun 2005.

MEDEIROS, Hernani. Desenvolvendo software com UML 2.0: definitivo. São Paulo: Pearson Makron Books, 2004.

MORETTI, Adriano Luiz. Protótipo de um software para o reconhecimento de notas musicais. 2003. - 66 f. Trabalho de Conclusão de Curso (Bacharelado em Ciências da Computação) – Centro de Ciências Exatas e Naturais, Universidade Regional de Blumenau, Blumenau.

SALVADOR, B. Sons digitalizados, São Paulo, 2000. Tutorial para cursos à distância. Disponível em: <http://virtual.epm.br/material/ead/som.htm>. Acesso em: 11 set. 2004.

SMITH, Steven W. The scientist and engineer's guide to digital signal processing. 2. ed. San Diego: California Technical Publishing, 1999.

VILELA, Ana Luisa Miranda. Sentidos: audição. Brasília, 2002?. Disponível em: <http://www.afh.bio.br/sentidos/Sentidos4.asp>. Acesso em: 2 mai 2005.

50

APÊNDICE A – Codificação da função RealFFT

A seguir é apresentada a codificação para o cálculo da transformada rápida de Fourier.

Este código é pertencente do Turbo Pascal Numerical Methods Toolbox, pertencente à

Borland International Inc.

************** RealFFT ****************} procedure RealFFT{(NumPoints : integer; Inverse : boolean; var XReal : TNvectorPtr; var XImag : TNvectorPtr; var Error : byte)}; var SinTable, CosTable : TNvectorPtr; { Tables of sine and cosine values } Sindata,CosData:TNVector; NumberOfBits : byte; { Number of bits necessary to } { represent the number of points } procedure MakeRealDataComplex(NumPoints : integer; var XReal : TNvectorPtr; var XImag : TNvectorPtr); {-----------------------------------------------------------} {- Input: NumPoints, XReal -} {- Output: XReal, XImag -} {- -} {- This procedure shuffles the real data. There are -} {- 2*NumPoints real data points in the vector XReal. The -} {- data is shuffled so that there are NumPoints complex -} {- data points. The real part of the complex data is -} {- made up of those points whose original array Index was -} {- even; the imaginary part of the complex data is made -} {- up of those points whose original array Index was odd. -} {-----------------------------------------------------------} var Index, NewIndex : integer; DummyReal, DummyImag : TNvectorPtr; Dummyr,DummyI:TNvector; begin Setlength(Dummyr,length(Xreal^)); Setlength(DummyI,length(XImag^)); Dummyreal:=@DummyR; DummyImag:=@DummyI; (* Getmem(Dummyreal,sizeof(Xreal));{ New(DummyReal);} getmem(DummyImag, sizeof(XImag)); {New(DummyImag);} *) for Index := 0 to NumPoints - 1 do begin NewIndex := Index shl 1; DummyReal^[Index] := XReal^[NewIndex]; DummyImag^[Index] := XReal^[NewIndex + 1]; end; XReal^ := DummyReal^; XImag^ := DummyImag^; (*

51

Freemem(Dummyreal); {Dispose(DummyReal);} freemem(DummyImag); {Dispose(DummyImag);} *) end; { procedure MakeRealDataComplex } procedure UnscrambleComplexOutput(NumPoints : integer; var SinTable : TNvectorPtr; var CosTable : TNvectorPtr; var XReal : TNvectorPtr; var XImag : TNvectorPtr); {----------------------------------------------------------} {- Input: NumPoints, SinTable, CosTable, XReal, XImag -} {- Output: XReal, XImag -} {- -} {- This procedure unshuffles the complex transform. -} {- The transform has NumPoints elements. This procedure -} {- unshuffles the transform so that it is 2*NumPoints -} {- elements long. The resulting vector is symmetric -} {- about the element NumPoints. -} {- Both the forward and inverse transforms are defined -} {- with a 1/Sqrt(NumPoints) factor. Since the real FFT -} {- algorithm operates on vectors of length NumPoints/2, -} {- the unscrambled vectors must be divided by Sqrt(2). -} {----------------------------------------------------------} var PiOverNumPoints : Float; Index : integer; indexSHR1 : integer; NumPointsMinusIndex : integer; SymmetricIndex : integer; Multiplier : Float; Factor : Float; CosFactor, SinFactor : Float; RealSum, ImagSum, RealDif, ImagDif : Float; RealDummy, ImagDummy : TNvectorPtr; NumPointsSHL1 : integer; begin New(RealDummy); New(ImagDummy); RealDummy^ := XReal^; ImagDummy^ := XImag^; PiOverNumPoints := Pi / NumPoints; NumPointsSHL1 := NumPoints shl 1; RealDummy^[0] := (XReal^[0] + XImag^[0]) / Sqrt(2); ImagDummy^[0] := 0; RealDummy^[NumPoints] := (XReal^[0] - XImag^[0]) / Sqrt(2); ImagDummy^[NumPoints] := 0; for Index := 1 to NumPoints - 1 do begin Multiplier := 0.5 / Sqrt(2); Factor := PiOverNumPoints * Index; NumPointsMinusIndex := NumPoints - Index; SymmetricIndex := NumPointsSHL1 - Index; if Odd(Index) then begin CosFactor := Cos(Factor); SinFactor := -Sin(Factor);

52

end else begin indexSHR1 := Index shr 1; CosFactor := CosTable^[indexSHR1]; SinFactor := SinTable^[indexSHR1]; end; RealSum := XReal^[Index] + XReal^[NumPointsMinusIndex]; ImagSum := XImag^[Index] + XImag^[NumPointsMinusIndex]; RealDif := XReal^[Index] - XReal^[NumPointsMinusIndex]; ImagDif := XImag^[Index] - XImag^[NumPointsMinusIndex]; RealDummy^[Index] := Multiplier * (RealSum + CosFactor * ImagSum + SinFactor * RealDif); ImagDummy^[Index] := Multiplier * (ImagDif + SinFactor * ImagSum - CosFactor * RealDif); RealDummy^[SymmetricIndex] := RealDummy^[Index]; ImagDummy^[SymmetricIndex] := -ImagDummy^[Index]; end; { for } XReal^ := RealDummy^; XImag^ := ImagDummy^; Dispose(RealDummy); Dispose(ImagDummy); end; { procedure UnscrambleComplexOutput } begin { procedure RealFFT } { The number of complex data points will } { be half the number of real data points } NumPoints := NumPoints shr 1;

TestInput(NumPoints, NumberOfBits, Error);

if Error = 0 then begin Setlength(SinData,numpoints); Setlength(CosData,numpoints); SinTable:=@SinData; CosTable:=@CosData;

MakeRealDataComplex(NumPoints, XReal, XImag); MakeSinCosTable(NumPoints, SinTable, CosTable);

FFT(NumberOfBits, NumPoints, Inverse, XReal, XImag, SinTable, CosTable); UnscrambleComplexOutput(NumPoints, SinTable, CosTable, XReal, XImag); NumPoints := NumPoints shl 1; { The number of complex points } { in the transform will be the } { same as the number of real } { points in input data. } end; end; { procedure RealFFT }

53

APÊNDICE B – Codificação da função FFT

A seguir é apresentada a codificação para o cálculo da transformada rápida de Fourier.

Este código é pertencente do Turbo Pascal Numerical Methods Toolbox, pertencente à

Borland International Inc.

{**************** FFT ******************} procedure FFT(NumberOfBits : byte; NumPoints : integer; Inverse : boolean; var XReal : TNvectorPtr; var XImag : TNvectorPtr; var SinTable : TNvectorPtr; var CosTable : TNvectorPtr); {-----------------------------------------------------} {- Input: NumberOfBits, NumPoints, Inverse, XReal, -} {- XImag, SinTable, CosTable -} {- Output: XReal, XImag -} {- -} {- This procedure implements the actual fast Fourier -} {- transform routine. The vector X, which must be -} {- entered in bit-inverted order, is transformed in -} {- place. The transformation uses the Cooley-Tukey -} {- algorithm. -} {-----------------------------------------------------} { Called by RealFFT and ComplexFFT to perform the guts of the

calculations} const RootTwoOverTwo = 0.707106781186548; var Term : byte; CellSeparation : integer; NumberOfCells : integer; NumElementsInCell : integer; NumElInCellLess1 : integer; NumElInCellSHR1 : integer; NumElInCellSHR2 : integer; RealRootOfUnity, ImagRootOfUnity : Float; Element : integer; CellElements : integer; ElementInNextCell : integer; Index : integer; RealDummy, ImagDummy : Float; procedure BitInvert(NumberOfBits : byte; NumPoints : integer; var XReal : TNvectorPtr; var XImag : TNvectorPtr); {-----------------------------------------------------------} {- Input: NumberOfBits, NumPoints -}

54

{- Output: XReal, XImag -} {- -} {- This procedure bit inverts the order of data in the -} {- vector X. Bit inversion reverses the order of the -} {- binary representation of the indices; thus 2 indices -} {- will be switched. For example, if there are 16 points, -} {- Index 7 (binary 0111) would be switched with Index 14 -} {- (binary 1110). It is necessary to bit invert the order -} {- of the data so that the transformation comes out in the -} {- correct order. -} {-----------------------------------------------------------} var Term : integer; Invert : integer; Hold : Float; NumPointsDiv2, K : integer; begin NumPointsDiv2 := NumPoints shr 1; Invert := 0; for Term := 0 to NumPoints - 2 do begin if Term < Invert then { Switch these two indices } begin Hold := XReal^[Invert]; XReal^[Invert] := XReal^[Term]; XReal^[Term] := Hold; Hold := XImag^[Invert]; XImag^[Invert] := XImag^[Term]; XImag^[Term] := Hold; end; K := NumPointsDiv2; while K <= Invert do begin Invert := Invert - K; K := K shr 1; end; Invert := Invert + K; end; end; { procedure BitInvert } begin { procedure FFT } { The data must be entered in bit inverted order } { for the transform to come out in proper order } BitInvert(NumberOfBits, NumPoints, XReal, XImag); if Inverse then { Conjugate the input } for Element := 0 to NumPoints - 1 do XImag^[Element] := -XImag^[Element]; NumberOfCells := NumPoints; CellSeparation := 1; for Term := 1 to NumberOfBits do begin { NumberOfCells halves; equals 2^(NumberOfBits - Term) } NumberOfCells := NumberOfCells shr 1;

55

{ NumElementsInCell doubles; equals 2^(Term-1) } NumElementsInCell := CellSeparation; { CellSeparation doubles; equals 2^Term } CellSeparation := CellSeparation SHL 1; NumElInCellLess1 := NumElementsInCell - 1; NumElInCellSHR1 := NumElementsInCell shr 1; NumElInCellSHR2 := NumElInCellSHR1 shr 1; { Special case: RootOfUnity = EXP(-i 0) } Element := 0; while Element < NumPoints do begin { Combine the X[Element] with the element in } { the identical location in the next cell } ElementInNextCell := Element + NumElementsInCell; RealDummy := XReal^[ElementInNextCell]; ImagDummy := XImag^[ElementInNextCell]; XReal^[ElementInNextCell] := XReal^[Element] - RealDummy; XImag^[ElementInNextCell] := XImag^[Element] - ImagDummy; XReal^[Element] := XReal^[Element] + RealDummy; XImag^[Element] := XImag^[Element] + ImagDummy; Element := Element + CellSeparation; end; for CellElements := 1 to NumElInCellSHR2 - 1 do begin Index := CellElements * NumberOfCells; RealRootOfUnity := CosTable^[Index]; ImagRootOfUnity := SinTable^[Index]; Element := CellElements; while Element < NumPoints do begin { Combine the X[Element] with the element in } { the identical location in the next cell } ElementInNextCell := Element + NumElementsInCell; RealDummy := XReal^[ElementInNextCell] * RealRootOfUnity - XImag^[ElementInNextCell] * ImagRootOfUnity; ImagDummy := XReal^[ElementInNextCell] * ImagRootOfUnity + XImag^[ElementInNextCell] * RealRootOfUnity; XReal^[ElementInNextCell] := XReal^[Element] - RealDummy; XImag^[ElementInNextCell] := XImag^[Element] - ImagDummy; XReal^[Element] := XReal^[Element] + RealDummy; XImag^[Element] := XImag^[Element] + ImagDummy; Element := Element + CellSeparation; end; end; { Special case: RootOfUnity = EXP(-i PI/4) } if Term > 2 then begin Element := NumElInCellSHR2; while Element < NumPoints do begin { Combine the X[Element] with the element in } { the identical location in the next cell } ElementInNextCell := Element + NumElementsInCell; RealDummy := RootTwoOverTwo * (XReal^[ElementInNextCell] + XImag^[ElementInNextCell]); ImagDummy := RootTwoOverTwo * (XImag^[ElementInNextCell] -

56

XReal^[ElementInNextCell]); XReal^[ElementInNextCell] := XReal^[Element] - RealDummy; XImag^[ElementInNextCell] := XImag^[Element] - ImagDummy; XReal^[Element] := XReal^[Element] + RealDummy; XImag^[Element] := XImag^[Element] + ImagDummy; Element := Element + CellSeparation; end; end; for CellElements := NumElInCellSHR2 + 1 to NumElInCellSHR1 - 1 do begin Index := CellElements * NumberOfCells; RealRootOfUnity := CosTable^[Index]; ImagRootOfUnity := SinTable^[Index]; Element := CellElements; while Element < NumPoints do begin { Combine the X[Element] with the element in } { the identical location in the next cell } ElementInNextCell := Element + NumElementsInCell; RealDummy := XReal^[ElementInNextCell] * RealRootOfUnity - XImag^[ElementInNextCell] * ImagRootOfUnity; ImagDummy := XReal^[ElementInNextCell] * ImagRootOfUnity + XImag^[ElementInNextCell] * RealRootOfUnity; XReal^[ElementInNextCell] := XReal^[Element] - RealDummy; XImag^[ElementInNextCell] := XImag^[Element] - ImagDummy; XReal^[Element] := XReal^[Element] + RealDummy; XImag^[Element] := XImag^[Element] + ImagDummy; Element := Element + CellSeparation; end; end; { Special case: RootOfUnity = EXP(-i PI/2) } if Term > 1 then begin Element := NumElInCellSHR1; while Element < NumPoints do begin { Combine the X[Element] with the element in } { the identical location in the next cell } ElementInNextCell := Element + NumElementsInCell; RealDummy := XImag^[ElementInNextCell]; ImagDummy := -XReal^[ElementInNextCell]; XReal^[ElementInNextCell] := XReal^[Element] - RealDummy; XImag^[ElementInNextCell] := XImag^[Element] - ImagDummy; XReal^[Element] := XReal^[Element] + RealDummy; XImag^[Element] := XImag^[Element] + ImagDummy; Element := Element + CellSeparation; end; end; for CellElements := NumElInCellSHR1 + 1 to NumElementsInCell - NumElInCellSHR2 - 1 do begin Index := CellElements * NumberOfCells; RealRootOfUnity := CosTable^[Index]; ImagRootOfUnity := SinTable^[Index]; Element := CellElements; while Element < NumPoints do begin

57

{ Combine the X[Element] with the element in } { the identical location in the next cell } ElementInNextCell := Element + NumElementsInCell; RealDummy := XReal^[ElementInNextCell] * RealRootOfUnity - XImag^[ElementInNextCell] * ImagRootOfUnity; ImagDummy := XReal^[ElementInNextCell] * ImagRootOfUnity + XImag^[ElementInNextCell] * RealRootOfUnity; XReal^[ElementInNextCell] := XReal^[Element] - RealDummy; XImag^[ElementInNextCell] := XImag^[Element] - ImagDummy; XReal^[Element] := XReal^[Element] + RealDummy; XImag^[Element] := XImag^[Element] + ImagDummy; Element := Element + CellSeparation; end; end; { Special case: RootOfUnity = EXP(-i 3PI/4) } if Term > 2 then begin Element := NumElementsInCell - NumElInCellSHR2; while Element < NumPoints do begin { Combine the X[Element] with the element in } { the identical location in the next cell } ElementInNextCell := Element + NumElementsInCell; RealDummy := -RootTwoOverTwo * (XReal^[ElementInNextCell] - XImag^[ElementInNextCell]); ImagDummy := -RootTwoOverTwo * (XReal^[ElementInNextCell] + XImag^[ElementInNextCell]); XReal^[ElementInNextCell] := XReal^[Element] - RealDummy; XImag^[ElementInNextCell] := XImag^[Element] - ImagDummy; XReal^[Element] := XReal^[Element] + RealDummy; XImag^[Element] := XImag^[Element] + ImagDummy; Element := Element + CellSeparation; end; end; for CellElements := NumElementsInCell - NumElInCellSHR2 + 1 to NumElInCellLess1 do begin Index := CellElements * NumberOfCells; RealRootOfUnity := CosTable^[Index]; ImagRootOfUnity := SinTable^[Index]; Element := CellElements; while Element < NumPoints do begin { Combine the X[Element] with the element in } { the identical location in the next cell } ElementInNextCell := Element + NumElementsInCell; RealDummy := XReal^[ElementInNextCell] * RealRootOfUnity - XImag^[ElementInNextCell] * ImagRootOfUnity; ImagDummy := XReal^[ElementInNextCell] * ImagRootOfUnity + XImag^[ElementInNextCell] * RealRootOfUnity; XReal^[ElementInNextCell] := XReal^[Element] - RealDummy; XImag^[ElementInNextCell] := XImag^[Element] - ImagDummy; XReal^[Element] := XReal^[Element] + RealDummy; XImag^[Element] := XImag^[Element] + ImagDummy; Element := Element + CellSeparation; end; end; end;

58

{----------------------------------------------------} {- Divide all the values of the transformation -} {- by the square root of NumPoints. If taking the -} {- inverse, conjugate the output. -} {----------------------------------------------------} if Inverse then ImagDummy := -1/Sqrt(NumPoints) else ImagDummy := 1/Sqrt(NumPoints); RealDummy := ABS(ImagDummy); for Element := 0 to NumPoints - 1 do begin XReal^[Element] := XReal^[Element] * RealDummy; XImag^[Element] := XImag^[Element] * ImagDummy; end; end; { procedure FFT }