Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE FEDERAL DO CEARÁ CENTRO DE TECNOLOGIA DEPARTAMENTO DE TELEINFORMÁTICA Processos Estocásticos Projeto Computacional Equipe: Arthur Eduardo de Oliveira Morais – 380792; Michel Gonzaga dos Santos – 378725; Victor Lander – 378729; Wagner Lindemberg dos Santos Pereira Júnior – 375176. Professor: Charles Casimiro Cavalcante. Curso: Engenharia de Telecomunicações. Turma: 01. Fortaleza, 06 de julho de 2016 Questão 1. Calcular e plotar (gráfico) a função de autocorrelação dos sinais de áudio. É possível inferir algum significado dos sinais que compõem o arquivo i. a partir de sua função de autocorrelação? O que se pode afirmar? Procedimento: Utilizando a função xcorr() geramos um vetor com valores de autocorrelação em cada intervalo de tempo. Em seguida utilizando a função plot() plotamos o vetor correspondente a cada um dos arquivos cedidos: noisy speech, speech, male speech. Código: figure plot(xcorr(noisy_speech,noisy_speech)); t = xlabel('tempo'); >> Rx = ylabel('Rx'); legend('noisy speech'); grid on; figure plot(xcorr(speech,speech)); t = xlabel('tempo'); Rx = ylabel('Rx'); legend('speech'); grid on; figure plot(xcorr(male_speech,male_speech)); t = xlabel('tempo'); Rx = ylabel('Rx'); legend('male speech'); grid on; Observa-se que o arquivo speech, utilizando as funções hist, mean e a autocorrelação, verifica- se que o arquivo se aproxima de um processo estocástico com PDF gaussiana (a média não é exatamente zero porque o arquivo é finito). Considerando que para diferentes repetições do arquivo a tendência se manteria, pode-se inferir a variância do arquivo a partir do pico apresentado no gráfico da função de autocorrelação do arquivo. Concluímos isso a partir das propriedades a baixo: 1. Rx(0)́ e o valor quadrático médio do processo X(t) E[x2(ti)] = Rx(ti, ti) = Rx (ti−ti) = RX(0). 2. Rx(0) =σ2x se o processo tiver média nula. 3. |Rx(τ)|≤ Rx(0), para todo τ. Na página seguinte temos os gráficos das autocorrelações dos arquivos noisy speech, speech, male_speech. Male Speeach: Noisy Speeach: Speeach: Questão 2. Calcular e plotar a densidade espectral de potência (DEP) dos sinais. Analisar se é possível “separar” os sinais via uma filtragem baseada, somente, na DEP. Procedimento Código: % Speech signal Fs = 22050; t = 0:1/Fs:1-1/Fs; N = length(speech); xdfts = fft(speech); xdfts = xdfts(1:N/2+1); psdxs = (1/(Fs*N)) * abs(xdfts).^2; psdxs(2:end-1) = 2*psdxs(2:end-1); freq = 0:Fs/length(speech):Fs/2; figure plot(freq,10*log10(psdxs),'k'); grid on; x = xlabel('Frequência'); y = ylabel('Potência'); legend('speech'); % male signal Fs = 22050; t = 0:1/Fs:1-1/Fs; N = length(male_speech); xdftm = fft(male_speech); xdftm = xdftm(1:N/2+1); psdxm = (1/(Fs*N)) * abs(xdftm).^2; psdxm(2:end-1) = 2*psdxm(2:end-1); freq = 0:Fs/length(male_speech):Fs/2; figure plot(freq,10*log10(psdxm),'r'); grid on; x = xlabel('Frequência'); y = ylabel('Potência'); legend('male speech'); % noisy signal Fs = 22050; t = 0:1/Fs:1-1/Fs; N = length(male_speech); xdftn = fft(male_speech); xdftn = xdftn(1:N/2+1); psdxn = (1/(Fs*N)) * abs(xdftn).^2; psdxn(2:end-1) = 2*psdxn(2:end-1); freq = 0:Fs/length(male_speech):Fs/2; figure plot(freq,10*log10(psdxn)); grid on; x = xlabel('Frequência'); y = ylabel('Potência'); legend('noisy speech'); Em resposta ao questionamento sobre a possibilidade da criação de um filtro usando apenas a densidade espectral de potência, verificou-se que tal aplicação é impossível de ser realizada, visto que a DEP trabalha com a frequência dos sinais. O método se torna inviável devido ao fato de que as frequências dos sinais ii e iii são muito próximas, impossibilitando a identificação do ruído a ser filtrado, exigindo assim métodos mais complexo. Plotando as Densidades Espectral: Noisy Speech: Male Speech: Speech: Questão 3. Os arquivos ii. e iii. São os mesmos (mesma frase falada), apenas coma adição de ruído no iii. Este tipo de dado é usado para o problema de “identificação de locutor” que é usado para fins forenses, por exemplo, para verificar se algum locutor está presente em outra gravação. Projete um método, baseado nas características estatísticas dos sinais para conseguir verificar se os locutores são os mesmos Código: % Speech signal Fs = 22050; t = 0:1/Fs:1-1/Fs; N = length(male_speech); xdft = fft(male_speech); xdft = xdft(1:N/2+1); psdx = (1/(Fs*N)) * abs(xdft).^2; psdx(2:end-1) = 2*psdx(2:end-1); freq = 0:Fs/length(male_speech):Fs/2; % Noisy-speech signal Fs = 22050; t = 0:1/Fs:1-1/Fs; A = length(noisy_speech); xdft = fft(noisy_speech); xdft = xdft(1:A/2+1); psdx_m = (1/(Fs*A)) * abs(xdft).^2; psdx_m(2:end-1) = 2*psdx_m(2:end-1); freq = 0:Fs/length(noisy_speech):Fs/2; a = [psdx_m - psdx]; w = norm(a) figure plot(freq,10*log10(psdx)); hold on; plot(freq,10*log10(psdx_m),'r'); grid on; legend('male speech','noisy speech'); Com o intuito de identificar se os indivíduos nos sinais com ruído (Noisy Speeach) e sem ruído (Male Speeach) são a mesma pessoa, pesquisamos sobre métodos eficientes para tal feito, constatou- se que apenas características estatísticas tais como média e variância não foram eficientes para tal feito. Para tanto, partido do fato de que as pessoas têm uma frequência de voz, utilizamos a densidade espectral de potência. Considerando essa ideia que as frequências dos sinais serão bem próximos quando fazemos a norma da subtração dos vetores resultantes da DEP dos sinais com ruído e sem ruído para o mesmo indivíduo temos que obter um número bem próximo de zero. Utilizando o código acima obtemos W = 8.7276e-004, onde W é a variável que recebe o resultado da norma da subtração das DEP’s. DEP’s da Male Speeach x Noisy Speeach Questão 4. Os dados de voz e áudio podem ser vistos como variáveis aleatórias e possuem suas distribuições de probabilidade bastante definidas. Identifique as principais características dos sinais nos arquivos i. iii. e gere variáveis aleatórias que emulem o comportamento estatístico dos sinais. Verifique se eles teriam alguma “inteligibilidade sonora”. Porquê? Código: % Gerador speech N = length(speech); x = randn(N,1); y = mean(speech)+sqrt(var(speech))*x; figure title('Sinal speech gerado') hist(y); figure plot(xcorr(y,y),'r'); hold on; grid on; figure hist(speech); sound(y,fs); Ms = mean(speech) Mss = mean(y) Vs = var(speech) Vss = var(y) % Gerador male_speech A = length(male_speech); z = randn(A,1); W = mean(male_speech)+sqrt(var(male_speech))*z; figure title('Sinal male_speech gerado') hist(W); figure plot(xcorr(W,W),'r'); hold on; grid on; figure hist(male_speech); sound(W,fs); Mm = mean(male_speech) Msm = mean(W) Vm = var(male_speech) Vsm = var(W)% Gerador noisy_speech B = length(noisy_speech); c = randn(B,1); v = mean(noisy_speech)+sqrt(var(noisy_speech))*c; figure title('Sinal male_speech gerado') hist(v); figure plot(xcorr(v,v),'r'); hold on; grid on; figure hist(noisy_speech); sound(v,fs); Mn = mean(noisy_speech) Msn = mean(v) Vn = var(noisy_speech) Vsn = var(v) Gerou-se vetores com distribuição de probabilidade similares aos arquivos fornecidos por meio das funções hist() e xcorr(). Observamos que os sinais fornecidos resultaram em um histograma similar à gaussiana. Tendo isso em mente, geramos vetores com as mesmas características estatísticas desse tipo de distribuição. Usando a relação: y = mean(speech)+sqrt(var(speech))*x; onde x é uma vetor aleatório com media 0 e variância 1. Nessa perspectiva, calculamos a média e a variância do arquivo Speech e do vetor aleatório gerado: Ms = -0.0040 (média do Speech) e Mss = -0.0040 (media do y) , Vs = 0.0271( Variância do Speech) Vss = 0.0270 ( Variância do y). Como os resultados são semelhantes, é razoável supor que tenham dados estatísticos igualmente semelhantes. Contudo, não possuem inteligibilidade sonora pois o sinal de voz é contínuo enquanto o arquivo simulado possui domínio discreto. Portanto, a priori, não é possível com as ferramentas utilizadas gerar “uma voz”, visto que ainda existem variáveis como timbre, frequência e ruídos presentes que influenciam significantemente na obtenção desse tipo de sinal. Os histogramas abaixo para o y é aleatório e logo para cada vez que executarmos o código poderá plotar um histograma diferente. Histograma do y: Histograma do Speech: Autocorrelação: Usamos a mesma lógica para gerar um vetor aleatório que simule a Male Speech. Abaixo estão o Histograma de W (Vetor gerado) , histograma da Male Speech e a autocorrelação do W. A média e a Variância são: Mm = -8.2927e-005 ,Msm = -2.9814e-004 ,Vm = 0.0013 e Vsm = 0.0013 , aonde m = Male Speech e sm = vetor gerado W. Histograma do W: Histograma do Male Speech: Autocorrelação: Usamos a mesma lógica para o Speech e Male Speech para gerar um vetor aleatório que simule a Noisy Speech. Abaixo estão o Histograma de V (Vetor gerado) , histograma da Noisy Speech e a autocorrelação do V. A média e a Variância são: Mn = -8.2927e-005 ,Msn = -2.9814e-004 ,Vn = 0.0013 e Vsn = 0.0013 , aonde n = Noisy Speech e sn = vetor gerado V. Histograma do V: Histograma da Noisy Speech: Autocorrelação:
Compartilhar