Baixe o app para aproveitar ainda mais
Prévia do material em texto
FAINOR – FACULDADE INDEPENDENTE DO NORDESTE RODRIGO BORGES DE OLIVEIRA Relatório filtragem de sinais utilizando o Matlab VITÓRIA DA CONQUISTA 2015 Rodrigo Borges de Oliveira Relatório filtragem de sinais utilizando o Matlab Trabalho desenvolvido durante a disciplina de Processamento Digital de Sinais, como parte da avaliação referente à III unidade do 7º semestre de Engenharia da Computação da FAINOR. Professor: Charles Miranda Fróes VITÓRIA DA CONQUISTA 2015 Sumário 1 INTRODUÇÃO.......................................................................................................................3 2 OBJETIVO..............................................................................................................................3 3 DESENVOLVIMENTO DO PROJETO...................................................................................4 4 RESULTADOS.......................................................................................................................7 5 CONCLUSÃO........................................................................................................................8 REFERÊNCIA.............................................................................................................................9 APÊNDICE................................................................................................................................10 1 INTRODUÇÃO Estudos sobre sinais são geralmente feitos com base em sinais ideais, ou seja, sem interferências de outros sinais. Porém os sinais naturais, que são os encontrados e capturados na natureza, possuem diversos sinais de interferência, o que dificulta trabalhar com eles. Portanto, torna-se necessário o uso de filtros que são responsáveis por eliminar os sinais de interferência que são indesejados para o estudo daquele sinal em que deseja-se trabalhar. Existem dois tipos de filtros digitais para utilizar no tratamento destes sinais. São eles o Filtro de Reposta ao Impulso Finito (FIR) e o Filtro de Resposta ao Impulso Infinito (IIR). Estes filtros se baseiam nos filtros analógicos, que podem ser: • Filtro passa-baixa: deixa passar baixas e rejeita frequências altas. • Filtro passa-alta: deixa passar frequências altas e rejeita baixas frequências. • Filtro passa-faixa: deixa passar frequências dentro de uma faixa de frequências e atenua frequências fora desta faixa. • Filtro rejeita-faixa: deixa passar frequências fora de uma faixa e rejeita frequências dentro desta faixa. Os filtros devem ser escolhidos pelo projetista de acordo com a sua necessidade de quais frequências deseja no seu sinal. 2 OBJETIVO Este trabalho tem como objetivo utilizar os conhecimentos de filtros digitais e projetar um filtro digital no Matlab para remover ruídos/sons indesejados de arquivos de áudio, e de um sinal com frequências de 200 Hz e 800 Hz misturadas. Os filtros digitais projetados neste trabalho foram do tipo FIR passa-baixa. Neste projeto, dois áudios foram filtrados para efeito de comparação dos resultados. Um áudio possuindo uma voz e uma sacola sendo reproduzidos 3 separadamente, e outro áudio possuindo esta mesma voz e sacola, porém sendo reproduzidos ao mesmo tempo, ou seja, os dois sons um “em cima” do outro. Posteriormente, foram criados dois sinais separados, um possuindo uma frequência de 200 Hz e outro uma frequência de 800 Hz. Os dois sinais foram somados para que ambos ficassem presentes em um mesmo sinal. Após isso, filtrou-se este sinal somado, removendo as frequências acima de 200 Hz, ou seja, removeu-se a frequência de 800 Hz. 3 DESENVOLVIMENTO DO PROJETO Primeiramente, como se trata de um arquivo de áudio com voz, foi utilizada a frequência de amostragem de 44100 Hz ou 44,1 KHz. Utilizando o Matlab, ela foi chamada de fs. Os áudios foram atribuídos às variáveis utilizando a função wavread. Em seguida, o gráfico no domínio do tempo referente a esse áudio foi plotado utilizando a função plot. Porém o domínio do tempo não é muito importante para a análise deste sinal, logo, obteve-se o gráfico no domínio da frequência, referente a este áudio, através da transformada rápida de Fourier (FFT). Com a análise do gráfico no domínio da frequência, percebe-se então quais frequências devem ser eliminadas. No caso dos áudios utilizados neste projeto, frequências acima de 800 Hz já começaram a se tornar indesejáveis. Porém, os ruídos indesejáveis ainda estão presentes abaixo de 800 Hz, mas são bem menos perceptíveis. Apesar disso, foi utilizada a frequência de 800 Hz como frequência de passagem (fpass), pois escolher uma frequência inferior a esta, acarretaria em uma grande perda de qualidade na voz. Ainda analisando o gráfico no domínio da frequência, observou-se que a frequência de parada (fstop) seria ideal em 1000 Hz. Vale ressaltar, que tanto a frequência de passagem quanto a de parada são obtidas através de especulação, e tentativa e erro. Definindo-se a frequência de passagem e de parada, é possível obter os outros parâmetros necessários para a filtragem da voz. As frequências angulares relacionadas 4 às frequências de passagem e parada são, respectivamente, w p= f pass∗π f s 2 e w s= f stop∗π f s 2 . E através destas, pode-se obter a frequência de transição, que é a faixa entre a frequência de passagem e a de parada, e também a frequência de corte (ou de canto), que é a frequência intermediária a essas outras duas. Logo, a frequência de transição é definida por w t=ws−wp , e a de corte por w c= (wp+ws) 2 . O comprimento do filtro é definido, de acordo com a janela escolhida, seguindo a seguinte tabela: Nome da Janela Comprimento de Transição (wt) Aproximado Comprimento de Transição (wt) Exato Menor atenuação da banda de parada Retangular 4∗π M 1,8∗π M 21 dB Barlett 8∗π M 6,1∗π M 25 dB Hanning 8∗π M 6,2∗π M 44 dB Hamming 8∗π M 6,6∗π M 53 dB Blackman 12∗π M 11∗π M 74 dB 5 Para este trabalho, utilizou-se a janela Hanning, portanto o comprimento do filtro foi definido como M=6,2∗π wt +1 . Através do comprimento do filtro, cria-se a janela utilizando-se a função hann. Em seguida, foi feita uma multiplicação, em forma de convolução, da janela com a voz original. O resultado da convolução, é a voz já filtrada. A partir da voz filtrada, plotou-se o gráfico no domínio do tempo utilizando a função plot e no domínio da frequência utilizando a FFT, o que permite que uma comparação com os gráficos da voz original seja feita. Todo este processo de filtragem de voz foi realizado duas vezes, uma para o áudio da voz com a sacola separados, e outro para o áudio da voz com a sacola juntos (um “em cima” do outro). Utilizando a função wavplay do matlab, pode-se escutar tanto os áudios originais, quanto os áudios filtrados. Sendo importante para notar os resultados e compará-los com os áudios de origem. Para utilizar esta função, basta passar como parâmetros para o wavplay, o nome da variável onde está guardado o áudio e a frequência de amostragem. Para a filtragem da soma dos sinais de 200 Hz e 800 Hz, teve-se que primeiro criar sinais separados de 200 Hz e 800 Hz. A frequência de amostragem deve ser definida como sendo pelo menos 4 vezes o valor do maior sinal. Para este caso, a frequência de amostragem foi então 4 vezes 800 Hz, ou seja, 3200 Hz. Como o período equivale ao inverso da frequência de amostragem, foi definido T s= 1 fs . E para definir o espaçamento do tempo para a plotagem dos gráficos no domínio do tempo, utilizou-se a expressão t = [0:Ts:3], informando que o tempo variará de 0 a 3 segundos com um incremento igual ao valor do período. Foi necessário criar os sinais de 200 Hz e 800 Hz separadamente. Foi-se atribuído, então, f1 como 200 e f2 como 800. Gerou-se duas senoides distintas, uma 6 para cada sinal. Para o sinal de 200 Hz criou-se s1 = 2*sin(2*pi*f1*t) e para o sinal de 800 Hz, s2 = 4*sin(2*pi*f2*t). Tendo estas senoides, plotou-se os gráficos no domínio do tempo, através da função plot, e os gráficos no domínio da frequência através da transformada de Fourier, utilizando a função fft. Entretanto o projeto trata-se de filtrar sinais que já estão misturados. Portanto, a senoide de cada sinal foi somada, definindo s = s1 + s2, obtendo-se então, o sinal resultante da mistura dos outros dois sinais. A partir deste novo sinal, plotou-se novamente os gráficos no domínio do tempo e no domínio da frequência. Através destes, é possível observar as frequências de 200 e 800 Hz em um mesmo sinal. Assim como na filtragem dos áudios, foi necessário definir as frequências de passagem e parada. Como o objetivo era eliminar as frequências acima de 200 Hz, que neste caso seria eliminar apenas a frequência de 800 Hz, definiu-se a frequência de passagem como 250 Hz e a de parada como 750 Hz. Os mesmos processos foram realizados para a criação da janela Hann, que foi posteriormente multiplicada, em forma de convolução, com o sinal senoidal da soma (sinal s). Através da convolução, obteve-se o sinal filtrado. Este sinal foi plotado no domínio do tempo e no domínio da frequência, utilizando, respectivamente, as funções, plot e fft. 4 RESULTADOS Os resultados foram bastante satisfatórios. Os ruídos indesejáveis nos sinais de áudio foram praticamente eliminados, ficando apenas um pequeno ruído, porém com volume bem baixo. Além disso, o som da voz não perdeu muita qualidade, mantendo uma claridade para compreensão da mesma. Na soma do sinal de 200 Hz e 800 Hz, pôde-se eliminar totalmente o ruído de 800 Hz. Como não se trata de um sinal de áudio, o resultado foi apenas observado através dos gráficos gerados. A partir do gráfico filtrado no domínio da frequência, é imperceptível a existência de um ruído, portanto, o sinal foi devidamente filtrado. 7 5 CONCLUSÃO Filtros digitais permitem que os sinais possuam apenas o que for de interesse para o projetista, abrindo uma gama de aplicações e áreas das mais variadas em que se pode aplicá-los. Entretanto, apesar do Matlab ser uma ferramenta bem poderosa e de multiuso, áudios tratados através de filtros digitais não se tornam perfeitos, mas, ainda assim, há uma melhora significativa na redução dos ruídos ao se aplicar uma filtragem a estes áudios. Entretanto, é possível notar que, graficamente, os ruídos não estão mais presentes nos sinais. 8 REFERÊNCIA INGLE, Vinay K.; PROAKIS, John G. Digital Signal Processing using Matlab. 3ª Edição. 9 APÊNDICE Gráficos gerados no Matlab referentes aos áudios – à esquerda, domínio do tempo, à direita, domínio da frequência Gráficos gerados no Matlab referentes aos sinais de 200 e 800 Hz – à esquerda, domínio do tempo, à direita domínio da frequência 10 Ruido800Hz.m clc; close all; clear all; fs=3200; %frequência de amostragem. fs = 800*4 = 3200 Ts= 1/fs; %Período t = [0:Ts:3]; %Tempo de 0 a 3, tendo o período como incremento % Senoide de 200Hz f1 = 200; %frequência de 200Hz s1 = 2*sin(2*pi*f1*t); subplot(421); plot(t,s1); title('Senoide de 200Hz no domínio do tempo') ylabel('Amplitude') xlabel('Tempo (s)'); % Espectro de frequência 200Hz subplot(422); my_fft(s1,fs); % Senoide de 800Hz f2 = 800; %frequência de 800Hz s2 = 4*sin(2*pi*f2*t); subplot(423); plot(t,s2); title('Senoide de 800Hz no domínio do tempo') ylabel('Amplitude') xlabel('Tempo (s)'); % Espectro de frequência 800Hz subplot(424); my_fft(s2,fs); % somando s1 e s2 s = s1+s2; subplot(425); plot(t,s); title('Soma de 200Hz e 800Hz no domínio do tempo') ylabel('Amplitude') xlabel('Tempo (s)'); % Espectro de frequência soma de 200Hz e 800Hz subplot(426); my_fft(s,fs); % Filtro passa-baixa FIR % frequência de amostragem (fs) de 3200Hz fpass = 250; 11 fstop = 750; wp = (fpass/(fs/2))*pi; ws = (fstop/(fs/2))*pi; wt = ws - wp; % frequência de transição wc = (wp + ws)/2; % frequência de corte intermediária M = ceil((6.2*pi/wt)) + 1; hd = ideal_lp(wc,M); % função sinc passa-baixa ideal %n = [0:M-1]; %w_han = 0.5-0.5*cos(2*pi*n/M-1); w_han = hann(M)'; % calcula a janela de hamming h = hd.*w_han; % multiplica os vetores no tempo %figure; %subplot(); %freqz(h); % mostra a magnitude e a fase do filtro; sinal_filtrado = conv(h, s); subplot(427); plot(sinal_filtrado); % sinal filtrado no domínio do tempo title('Sinal filtrado no domínio do tempo') ylabel('Amplitude') xlabel('Tempo (s)'); subplot(428); my_fft(sinal_filtrado, fs); % sinal filtrado no domínio da frequência my_fft.m function [X, frequency ] = my_fft(x, fs) % normal - normalizar o eixo das abscissas normal = length(x); v_aux = 0:normal-1; % vetor auxiliar T = normal/fs; frequency = v_aux/T; % redimensiona o eixo das abscissas X = fft(x)/normal; % normalizar fc = ceil(normal/2); % frequência de corte para ajustar os dados do vetor X = X(1:fc); %subplot(); plot(frequency(1:fc), abs(X)); % abs retorna o módulo do sinal no domínio da frequência title('Análise do Espectro no domínio da frequência'); 12 xlabel('Frequência Hz'); ylabel('Amplitude'); end FiltrarVoz.m voz = wavread('voz_audio.wav'); %carrega o áudio voz_audio.wav vozcomsacola = wavread('voz_sacola_audio.wav'); %carrega o áudio voz_sacola_audio.wav fs = 44100; %frequência de amostragem do áudio %Voz e sacola separados subplot(421); plot(voz); title('Voz e sacola separados sem filtro'); xlabel('Tempo(s)'); ylabel('Amplitude'); subplot(422); my_fft(voz,fs); %fft para plotar no domínio da frequência fpass = 800; %frequência de passagem fstop = 1000; %frequência de parada wp = (fpass/(fs/2))*pi; %frequência angular relacionada à frequência de passagem ws = (fstop/(fs/2))*pi; %frequência angular relacionada à frequência de parada wt = ws - wp; %frequência de transição wc = (ws + wp)/2; %frequência de corte ou frequência de canto M = ceil((6.2*pi/wt)) + 1; %comprimento do filtro hd = ideal_lp(wc,M); %Criação da w_han = hann(M)'; %janela h = hd.*w_han; %Hanning voz_filtrada = conv(h, voz); %Multiplicação em forma de convolução da janela com o áudio original, retirando as frequências indesejadas subplot(423); plot(voz_filtrada); title('Voz filtrada no domínio do tempo'); xlabel('Tempo(s)'); ylabel('Amplitude'); subplot(424); my_fft(voz_filtrada,fs); %Voz e sacola juntos subplot(425); 13 plot(vozcomsacola); title('Voz e sacola juntos sem filtro'); xlabel('Tempo(s)'); ylabel('Amplitude'); subplot(426); my_fft(vozcomsacola,fs); vozcomsacola_filtrada = conv(h, vozcomsacola); subplot(427); plot(vozcomsacola_filtrada); title('Voz com sacola filtrada no domínio do tempo'); xlabel('Tempo(s)'); ylabel('Amplitude'); subplot(428); my_fft(vozcomsacola_filtrada,fs); ideal_lp.m function hd = ideal_lp(wc, M) % Ideal LowPass filter computation % ------------------------------- % [hd] = ideal_lp(wc,M) % hd=idealimpulseresponsebetween0toM-1 % wc=cutofffrequencyinradians % M=lengthoftheidealfilter % alpha = (M-1)/2; n = [0:1:(M-1)]; m=n-alpha; fc=wc/pi; hd=fc*sinc(fc*m); end 14
Compartilhar