Processamento de Áudio Digital Créditos • Acetatos do livro de Mrinal Mandal Chapter 10:Digital Audio Processing, Multimedia Signals and Systems © Kluwer A. Publishers Aplicações Com o aumento dos sistemas multimédia e do WWW, as técnicas de processamento de áudio tornaram-se populares. Filtragem Equalização Supressão de ruído Compressão Adição de efeitos sonoros Síntese Filtragem Áudio Espectro de sinal áudio Sinal áudio “bell.wav” Espectro de Frequência Código MatLab : Exemplo 10.1-I • • • • • • • • • • • • • • • • • Reading the input audio data infile = 'F:\data\audio\bell.wav' ; % Name of the Input file [x, Fs, bits]=wavread(infile); % %Plotting the input signal plot([1:length(x)]/1000,128*x) ; title ('original speech signal') xlabel('Samples (x1000)'); ylabel('Sample Values'); print -dtiff plot.tiff % %Calculating Power spectral density hann_wind = round(2048*0.8) ; [Px,F] = psd(x,2048,Fs,[],hann_wind); % power spectral density of the input signal plot(F/1000,10*log10(Px)) xlabel('Frequency (in KHz)'); ylabel('Power Spectral Density (in dB)'); print -dtiff plot.tiff Filtro Passa Baixo (Exemplo 10.1) Filter Order Cut-off Frequency (in Hz) Folding Frequency (in Hz) filt_low = fir1(64, 4000/11025) ; % filt_low is a 64-tap filter with a normalized cut-off frequency 0.3628 %that corresponds to 4000 Hz for a sampling frequency of 22.05 kHz. %The same filter would have a cut-off frequency of 8 kHz if the % sampling frequency is 44.1 kHz x_lpf = filter(filt_low,1,x) ; % x_lpf is the lowpass filtered audio signal Ganho do Filtro e Saída Características de Ganho de Frequência do Filtro Passa Baixo Espectro do sinal filtrado Código MatLab : Exemplo 10.1-II • • • • • • • • • • • • • • • • • • • • • • • • • %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Lowpass Filtering %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% lcutoff = 4000 ; % cutoff frequency in Hz wp = lcutoff/(Fs/2) ; % Normalized cutoff filt_low = fir1(64,wp) ; %Plotting the LPF frequency characteristics [L, w] = freqz(filt_low,1,512); LdB = 20*log10(abs(L)) ; plot((w/pi)*(Fs/2000), LdB), grid xlabel('Frequency (in KHz)') ylabel('Lowpass Filter Gain (in dB)'); print -dtiff plot.tiff %Lowpass filtering the audio signal x_lpf = filter(filt_low,1,x) ; x_lpf=x_lpf./max(0.1,max(abs(x_lpf))) ; % scale up the output wavwrite(x_lpf,Fs,8,'f:\bell1_lpf.wav'); % Write the output signal as a wav file % %Calculating Power spectral density hann_wind = round(1024*0.8) ; [Px_lpf,F] = psd(x_lpf,1024,Fs,[],hann_wind); % power spectral density of the lowpass output plot(F/1000,10*log10(Px_lpf)) xlabel('Frequency (in KHz)'); ylabel('PSD (in dB)'); print -dtiff plot.tiff % Filtro Passa Banda Lower Cut-off Frequency (in Hz) Ordem do filtro Upper Cut-off Frequency (in Hz) filt_bp = fir1(64,[4000 6000]/11025) ; %Bandpass filtering the audio signal x_bpf = filter(filt_bp,1,x) ; Ganho do Filtro e Saída Características de Ganho de Frequência do Filtro Passa Banda Espectro do sinal filtrado Código MatLab : Exemplo 10.1-III • • • • • • • • • • • • • • • • • • • • • • • • • • • • • %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Bandpass Filtering %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% cutoff1 = 4000 ; % Low cutoff frequency cutoff2 = 7000 ; % Low cutoff frequency wp =[cutoff1 cutoff2]/(Fs/2) ; % Normalized cutoff filt_bp = fir1(64,wp) ; %Plotting the BPF frequency characteristics [B, w] = freqz(filt_bp,1,512); BdB = 20*log10(abs(B)) ; plot((w/pi)*(Fs/2000), BdB), grid xlabel('Frequency (in KHz)') ylabel('Bandpass Filter Gain (in dB)'); print -dtiff plot.tiff %Bandpass filtering the audio signal x_bpf = filter(filt_bp,1,x) ; % scale up the output x_bpf=x_bpf./max(0.1,max(abs(x_bpf))) ; % Write the output signal as a wav file wavwrite(x_bpf,Fs,8,'f:\bell1_bpf.wav'); % %Calculating Power spectral density hann_wind = round(1024*0.8) ; %power specttral density of the lowpass output [Px_bpf,F] = psd(x_bpf,1024,Fs,[],hann_wind); plot(F/1000,10*log10(Px_bpf)) xlabel('Frequency (in KHz)'); ylabel('PSD (in dB)'); print -dtiff plot.tiff Filtro Passa Alto Filter Order Cut-off Frequency (in Hz) filt_high = fir1(64,4000/11025,’high’) ; %Highpass filtering the audio signal x_hpf = filter(filt_high,1,x) ; Ganho do Filtro e Saída Características de Ganho de Frequência do filtro Passa Alto Espectro do sinal de saída Código MatLab : Exemplo 10.1-IV • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Highpass Filtering %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% hcutoff = 4000 ; % cutoff frequency in Hz wp = hcutoff/(Fs/2) ; % Normalized cutoff filt_high = fir1(64,wp,'high') ; %Plotting the LPF frequency characteristics [H, w] = freqz(filt_high,1,512); HdB = 20*log10(abs(H)) ; plot((w/pi)*(Fs/2000), HdB), grid xlabel('Frequency (in KHz)') ylabel('Filter Gain (in dB)'); print -dtiff plot.tiff %Highpass filtering the audio signal x_hpf = filter(filt_high,1,x) ; % scale up the output x_hpf=x_hpf./max(0.1,max(abs(x_hpf))) ; % Write the output signal as a wav file wavwrite(x_hpf,Fs,8,'f:\bell1_hpf.wav'); % %Calculating Power spectral density hann_wind = round(1024*0.8) ; %power specttral density of the lowpass output [Px_hpf,F] = psd(x_hpf,1024,Fs,[],hann_wind); plot(F/1000,10*log10(Px_hpf)) xlabel('Frequency (in KHz)'); ylabel('PSD (in dB)'); print -dtiff plot.tiff % Comparação dos sons • • • • Som original Saída de Filtro Passa Baixo Saída de Filtro Passa Banda Saida de Filtro Passa Alto Equalização de Áudio Controlo de Tom O método do controlo de tom disponibiliza uma maneira simples e rápida de ajustar o som ao gosto dos ouvintes Os aparelhos de áudio tem normalmente dois botões de controlo designados como baixo e agudos (treble). Cada um desses botões controla um tipo especial de filtro designado como shelving filter. O botão de baixo controla um filtro de shelving passa baixo enquanto o botão de treble controla um filtro de shelving passa alto. Filtros Shelving Passa Alto Treble Gain (in dB) Gain (in dB) Passa Baixo Baixo Filtro Peaking •Muitos sistemas de áudio têm um controlo médio (mid), para além do •baixo e dos agudos •Este controlo usa basicamente usa um filtro passa banda que aumenta ou Gain (in dB) corta na gama média de frequência Center frequency Frequency Equalizadores Gráficos Os equalizadores gráficos são mais sofisticados que os de controlo de tom O sinal de entrada é passado tipicamente através de um banco de 57 filtros passa-banda A saída dos filtros é ponderada pelos factores de ganho correspondentes e adicionados para reconstruir o sinal. Os filtros são caracterizados pelas frequências de corte normalizadas. Por este facto, os mesmos filtros funcionam com frequências de amostragem diferentes. Diagrama de um sistema equalizador Equalizer Gains BP Filter-1 BP Filter-2 Digital Audio G-1 G-2 BP Filter-N G-N Equalized Audio Output Exemplo de Equalização (Ex-10.2) Considere um sinal áudio test44k cuja forma de onda é mostrada abaixo. Sinal de áudio “test44k” Espectro de frequência Frequências de corte dos Filtros Passa Banda A frequência de amostragem do sinal de áudio é 44.1 KHz. Um equalizador de 5 bandas concebido com base num banco de filtros As frequências de corte dos 5 filtros passa-banda estão abaixos Filter# 1 2 3 4 5 Cut-off frequency (in Hz) Lower Upper 20 1200 1200 2500 2500 5000 5000 10000 10000 20000 Normalized cutoff frequency Lower Upper 0.0009 0.0544 0.0544 0.1134 0.1134 0.2268 0.2268 0.4535 0.4535 0.9070 Ganho de resposta dos Filtros Passa Banda Os filtros passa-banda podem ser facilmente concebidos com comandos MatLab Por exemplo o terceiro filtro pode ser concretizado com o comando bpf(3,:) = fir1(32, [0.1134 0.2268]); Energia Média nas diferentes bandas Para o sinal original Time (in sec) 0-3 3-6 6-9 9-12 12-15 15-18 Band-1 37.4610 36.1113 37.2630 34.7644 36.5304 37.3523 Band Energy (in dB) Band-2 Band-3 Band-4 30.8688 15.7790 10.4556 29.4799 15.7305 11.6237 30.1553 13.9430 9.2472 29.2201 16.6713 15.1690 30.2963 14.8195 9.1849 30.5949 14.2061 8.9226 Band-5 2.1273 6.9943 3.7286 5.3465 2.1991 1.8897 VARIAÇÃO DO GANHO NAS DIFERENTES BANDAS Para o sinal equalizado Time (in sec) 0-3 3-6 6-9 9-12 12-15 15-18 Band Energy (in dB) Band- Band- Band- Band- Band1 2 3 4 5 10 0 0 0 0 0 10 0 0 0 0 0 15 0 0 0 0 0 20 0 0 0 0 0 20 10 0 0 0 0 Áudio Filtrado Sinal original Sinal equalizado MELHORAMENTO DO ÁUDIO Porquê o Melhoramento? A qualidade do sinal pode ser degradado devido a várias razões Um sistema de produção de voz de baixa qualidade produz áudio de baixa qualidade. A presença de interferência de fundo pode causar a degradação da qualidade do áudio. O ruído de quantização introduzido durante a compressão é outra fonte de degradação. Os algoritmos de melhoramento de áudio podem ser usados para reduzir o ruído contido no sinal e melhorar a qualidade do sinal. Diferentes técnicas Subtração Espectral : esta téncica suprime o ruído subtraindo um ruído estimado durante os períodos de silêncio. Filtro Wiener: minimiza o erro médio quadrático no processo de filtragem inversa e alisamento do ruído. Requer o conhecimento prévio das estatísticas de ruido e da voz. Cancelamento adaptativo de ruído: este método utiliza um filtro adaptativo que actua num sinal de referência para produzir uma estimativa do ruído. O ruído é então subtraído do sinal de entrada. É usado tipicamente o algoritmo LMS no processo de adaptação. Os pesos do filtro são ajustados para minimizar o quadrado da energia média da saída global. Supressão de Ruído por Filtragem Digital Se a componente de ruído tem um espectro estreito uma filtragem digital simples pode ser usada para eleminar os componentes de ruído. Noise spike Filtragem do sinal de áudio Ganho de Resposta do Filtro Espectro do sinal filtrado Filtragem-2 Ganho de Resposta do Filtro Espectro do sinal de saída Método de Subtração Espectral (SSM) Se o ruído tem uma distribuição espetral estreita, a filtragem digital pode ser facilmente aplicada para suprimir esta componente de ruído. Contudo, se a componente de ruído tem um banda espectral grande, uma simples filtragem de supressão de banda pode não ser apropriada. O Método de subtracção espectral (SSM) é uma abordagem simples e eficaz para suprimir ruído de fundo estacionário. Este método é baseado no conceito que o espectro na frequência do sinal é espresso como a soma do espectro de voz e espectro do ruído. O processamento é feito inteiramente no domínio da frequência. Princípios do SSM Considere um sinal de fala com ruído f(k). O sinal com ruído pode ser assumido com sendo um sinal sem ruído y(k) e um sinal de ruído n(k). Por outras palavras, f(k) = y(k) + n(k) Ou seja : y(k) = f(k) - n(k) Calculando a transformada de Fourier de ambos os lados, obtemos Y F N Estimação do Sinal Se o espectro de ruído (tanto amplitude como fase) é conhecido com precisão, então o sinal livre de ruído pode ser obtido simplesmente subtraindo-o do sinal com ruído. Contudo, na prática, apenas se dispõe duma estimativa da amplitude espectro de ruído. No SSM, o espectro do sinal com ruído reduzido é estimado com: Y F | F | | N | F 1 | N | F g | F | | F | Onde g é um parâmetro para expressar a quantidade de ruído noise 0 1 g 0 noise signal Na prática assume-se que g , [0.01,0.1] Diagrama do SSM Input FFT Subtraction Inverse FFT Enhanced Audio Noise Estimation Figure 1: Spectral Subtraction Block Diagram Passos do SSM 3 passos principais: O espectro de ruído é estimado quando o orador está em silêncio. -- Assuma que o espectro de ruído não mude rapidamente. O espectro de ruído é então subtraído do espectro de amplitude do sinal de entrada com ruído. Usando este novo espectro de amplitude, e espectro de fase do sinal com ruído original, o sinal de áudio no domínio de tempo é calculado usando a transformada inversa de Fourier. Exemplo SSM (#10.4) Sinal de áudio “noisy_audio2 ” Espectro do sinal • Duração no tempo = 2.7 segundos • A frequência de amostragem é 22,050 Hz. • Há buracos na forma de onda da fala, que indica periodos de silêncio em que o ruído pode ser ouvido. • O ruído é representada por uma gama larga de componentes de frequência. Princípios da Estimação de Ruído Os buracos no sinal de voz são usados para estimar espectro do sinal de ruído. Segmentar o sinal em pequenos quadros para obter pequenos segmentos do sinal em que não haja fala. Calcular o espectro de cada quadro São calculados os valores minimos dos componentes espectrais por cada bin de frequência nos quadros. O valor mínimo é usado para estimar o ruído A estimação acima pode ser considerada uma sub-aproximação do ruído. Portanto é multiplicado por um factor de escala para obter o espectro de ruído que é usado pelo SSM. Neste exemplo, podemos usar um factor de escala de 20. Detalhes de Implementação do SSM O código MATLAB para o processamento SSM está incluído no CD. O tamanho de quadro áudio é escolhido como 512. Há uma sobreposição de 50% entre dois blocos de áudio consecutivos. O valor de λ é colocado a 0.025. A função de janela é derivada da janela de Hamming. O Sinal melhorado com o SSM O sinal melhorado tem reduzido de forma significativa os componentes de alta frequência na gama 2-5 kHz. EDIÇÃO DE FICHEIROS MIDI Edição de Áudio e MIDI Ao contrário do áudio digital, o MIDI é genericamente livre de ruído uma vez que é sintetizado. Portanto as técnicas de filtragem de ruído não são aplicáveis a ficheiros MIDI. Nesta secção, apresentamos alguns exemplos para ilustrar a criação e edição de ficheiros MIDI. Exemplo de ediçao de MIDI (# 10.5) Foi criado no exemplo 2.2 um pequeno ficheiro MIDI 4D 54 68 64 00 00 00 06 00 01 00 01 00 78 4D 54 72 6B 00 00 00 14 01 C3 02 01 93 43 64 78 4A 64 00 43 00 00 4A 00 00 FF 2F 00 O ficheiro MIDI gera a nota G3 tocada num piano eléctrico grande, com velocidade (que se relaciona com o volume) 100. Neste exemplo será criado um ficheiro MIDI que gera a nota E1 tocada num Piano Rhodes com a velocidade 68. Edição do Ficheiro O terceiro byte na segunda linha (0x02) corresponde ao Electric Grand Piano (ver Tabela 2.9). -- No sentido de criar uma nota para o Rhodes Piano, o número de instrumento tem que ser mudado para 0x04. O sexto byte 0x43 gera a nota G3. -- No sentido de criar a nota E6, este byte deve ser mudado para 0x64 (ver a Tabel 10.4 para os equivalentes decimais para o número de notas para piano). A velocidade 100 é devida aos 7º e 10º bytes (0x64 cada ) na segunda linha -- Para criar o volume de 68, o 7º e o 10º bytes devem ser mudados para 0x44 em vez de 0x64. Números para notas de Piano As entradas estão expressas no formato decimal. Octave -2 -1 0 1 2 3 4 5 6 7 8 C 00 12 24 36 48 60 72 84 96 108 120 C# 01 13 25 37 49 61 73 85 97 109 121 D 02 14 26 38 50 62 74 86 98 110 122 D# 03 15 27 39 51 63 75 87 99 111 123 E 04 16 28 40 52 64 76 88 100 112 124 F 05 17 29 41 53 65 77 89 101 113 125 F# 06 18 30 42 54 66 78 90 102 114 126 G 07 19 31 43 55 67 79 91 103 115 127 G# 08 20 32 44 56 68 80 92 104 116 A 09 21 33 45 57 69 81 93 105 117 A# 10 22 34 46 58 70 82 94 106 118 B 11 23 35 47 59 71 83 95 107 119 O ficheiro MIDI editado O novo ficheiro pode ser representado no formato hexadecimal da seguinte forma: 4D 54 68 64 00 00 00 06 00 01 00 01 00 78 4D 54 72 6B 00 00 00 14 01 C3 04 01 93 64 44 78 4A 44 00 43 00 00 4A 00 00 FF 2F 00 O ficheiro MIDI pode ser criado usando o seguinte código MATLAB: data=hex2dbytes('4D546864000000060001000100784D54726B000000 1401C30401936444784A44004300004A0000FF2F00'); fid=fopen('F:\ex10_5.mid','wb'); fwrite(fid,data); fclose('all'); Como adicionar uma segunda pista? Pode ser útil sintetizar pistas com diferentes assinaturas de tempo e a tocar diferentes instrumentos simultaneamente: O código seguinte adiciona uma segunda pista ao código do exemplo anterior (Header chunk) 4D 54 68 64 00 00 00 06 00 02 00 02 00 78 (Track 1) 4D 54 72 6B 00 00 00 14 01 C3 02 01 93 25 64 78 32 64 00 25 00 00 32 00 00 FF 2F 00 (Track 2) 4D 54 72 6B 00 00 00 14 01 C3 03 01 93 43 64 78 18 64 00 43 00 00 18 00 00 FF 2F 00 Explicação do código Quando a segunda pista é adicionada ao ficheiro, o formato é mudado para 0x02 (10o byte na primeira linha ) de forma que cada pista representa uma sequência independente. O número de pistas é também mudado para 02 (12º byte na primeira linha ). Foram mudados uns poucos tempos delta e notas para ilustrar sons diferentes. O Electric Grand Piano é tocado na primeira pista (0x02 na linha-3) e o Honky-Tonk Piano é tocado na segunda pista (0x03 na linha -5). Essas duas pistas podem ser tocadas simulatenamente se se mudar o tipo de formato para 0x01. Ferramentas áudio seleccionadas Nome do software Glame Sistema Operativo Linux Funcionalidades Powerful, fast, stable and easily extensible sound editor. Freely available from WWW. Digital Audio Linux Processor Freely available from Reasonably powerful Cool Edit Very powerful, easy to use. Capable of mixing up to 128 high-quality stereo tracks with any sound card. Win95/98/ME NT/2000/XP the WWW. Sound Forge Microsoft Sound Forge XP Studio provides an XP Studio 5.0 Windows 98SE, intuitive, easy-to-use interface and is Me, or 2000 designed for the everyday user. gAlan Windows 98/XP/2000 gAlan allows you to build synthesizers, effects chains, mixers, sequencers, drum machines and more. Ferramentas de Edição MIDI Ferramentas Cakewalk MIDI Maestro Music MasterWorks 3.62 DWS_Midi_S ong_Manager 1.0 Funcionalidades It supports general MIDI, and provides several editing views (staff, piano roll, event list) and virtual piano. It can insert WAV files and Windows MCI commands (animation and video) into tracks. A powerful, full-featured music software designed for use by amateur and professional music directors. Dynamic, intuitive performance control and powerful sequencing and editing capabilities. It is a MIDI music composing program. Includes voice to note / wave to midi converter, staff / piano roll notation editor, sheet music printing, chord creation, keeping notes within a key, transpose, quantize, play/record with external MIDI devices, configurable keys, audio, and the ability to ignore the complexities of tracks and channels An efficient program with which one can administer MIDI songs together with appropriate texts. One can input titles and interpreter, music direction, lauflaenge of the music pieces, song text, text path and MIDI path.