Trabalho Audio Processamento de Sinais
Por: gleriano • 6/11/2018 • Trabalho acadêmico • 7.552 Palavras (31 Páginas) • 277 Visualizações
Aluno: Fernando Henrique GLERIANO
Lista de Exercícios 2 – Entrega na data da prova 2
Centro Universitário do Norte Paulista – UNORP
Engenharia Elétrica
Processamento de Sinais
5°Ano - Fevereiro de 2015
1- (1,00) Explique detalhadamente o funcionamento dos arquivos no formato WAVE de áudio.
Um arquivo no formato WAVE é composto pelos dados brutos mais cabeçalho.
- bytes 0 a 3: string RIFF (Rich Information File Format);
- bytes 4 a 7: comprimento do chunk;
- bytes 8 a 11: string Wave;
- bytes 12 a 15: string FMT;
- bytes 16 a 19: comprimento do chunk após FMT;
- bytes 20 a 21: 0 para mono e 1 para estéreo;
- bytes 22 a 23: 1 para mono e 2 para estéreo;
- bytes 24 a 27: taxa de amostragem em amostras por segundo;
- bytes 28 a 31: quantidade de bytes por segundo;
- bytes 32 a 33: 1 para 8 bits mono; 3 para 16 bits mono;
2 para 8 bytes estéreo; 4 para 16 bits estéreo;
- bytes 34 a 35: bits por amostra.
- bytes 36 a 39: string DATA.
- bytes 40 a 43: comprimento do restante do arquivo.
- bytes 44 em diante: Dados Brutos.
[pic 1]
2- (2,00) Demonstre o funcionamento da Transformada Discreta de Fourier.
Trata-se de uma transformada baseada em senos e cossenos cujo objetivo é levar um sinal que está no domínio do tempo para o domínio da frequência. Dessa forma é possível verificar as frequências presentes neste sinal.
Definição:
F[u] = * ( f[t] * )onde: [pic 2][pic 3][pic 4]
j → corresponde ao numero complexo ;[pic 5]
f[t] → é o sinal no domínio do tempo;
f[u] →é o domínio da frequência ;
t →é o índice no domínio do tempo;
u → é o índice no domínio da frequência;
π → é uma constante;
N → é a quantidade de amostras.
O termo discreto significa que não são usados todos os infinitos valores da função no domínio do tempo para obter a representação no domínio da frequência. Ao invés disso, o sinal é primeiramente discretizado, para que posteriormente, seja obtido o sinal correspondente no domínio da frequência.
[pic 6]3- (1,00) O que é frequência fundamental de um sinal de áudio (F0). E frequências formantes (F1, F2, F3 e F4)?
Frequência fundamental é a que inicia uma séria harmônica, a principal frequência, ou seja o primeiro grau de uma escala e em todas as sua frequências múltiplas inteira 2F,3F,4F,5F,6F, etc.
As frequências formantes são múltiplas da frequência fundamental.
4- (2,00) Explique o funcionamento da Fast Fourier Transform (FFT) e suas vantagens em relação a Discrete Fourier Transform (DFT).
Fast Fourier Transform é um algoritmo para calcular a transformada de Fourier discreta (DFT) e o seu inverso. A transformada de Fourier converte tempo (ou espaço) em frequência e vice-versa; A FFT foi criada por J.W. Cooley (IBM) em colaboração com J.W. Tukey (Bell Labs) conseguiram uma revolução maior no tratamento digital de sinais em 1965 com a publicação da transformada rápida de Fourier, a FFT. Trata-se de um método engenhoso e altamente eficiente de reagrupar os cálculos dos coeficientes de uma DFT. Em diversos softwares ao invés do cálculo da DFT diretamente pela definição, faz-se uso de um algoritmo conhecido como a FFT (Transformada Rápida de Fourier) que permite avaliar a DFT com menor esforço computacional. Mas a FFT não é um tipo diferente de transformada e sim uma técnica que possibilita avaliar DFT de forma mais rápida e econômica.
5- (1,00) Construa um programa em linguagem C/C++ que tenha como entrada um arquivo de áudio de uma pessoa pronunciando a vogal /a/ sustentada. Em seguida calcule a DFT e o seu Espectro.
#include
#include
#include
#include
#include
using namespace std;
main()
{
short converte2de8para1de16(unsigned char,unsigned char);
void converte1de16para2de8(short, unsigned char *,unsigned char *);
void getFundamentalFrequency(double*, int, int);
FILE* fr;
FILE* fw;
char arquivo_wav_resultante[200];
arquivo_wav_resultante[0] = '\0';
//strcat(&arquivo_wav_resultante[0],n[1]);
strcat(&arquivo_wav_resultante[0], "modificado.wav");
cout<<"\nDigite o caminho e o nome do arquivo: ";
char n[101];
cin>>n;
if(((fr = fopen(n,"rb")) != NULL)&&(((fw = fopen("arquivowavealterado.wav","wb")) != NULL)))
{
struct
{
unsigned char riff[4];
unsigned long len;
}riff_header;
fread(&riff_header,sizeof(riff_header),1,fr);
fwrite(&riff_header,sizeof(riff_header),1,fw);
cout<<"\nArquivo do tipo: "<
cout<<"\nTamanho do chunk: "<
unsigned char wave[4];
fread(&wave,sizeof(wave),1,fr);
fwrite(&wave,sizeof(wave),1,fw);
cout<<"\nSubtipo: "<
struct
{
unsigned char id[4];
unsigned long len;
}riff_chunk;
...