Teorema da Amostragem e Algoritmos de Reconstrução

Introdução
Na atualidade os processos de amostragem e reconstrução de sinais são onipresentes.
Na telefonia celular por exemplo os sinais de voz são amostrados e transmitidos através de ondas eletromagnéticas com codificação digital. Do outro lado da ligação a onda eletromagnética é captada, e o sinal é decodificado e reconstruído para posteriormente ser amplificado e convertido em ondas mecânicas por alto-falantes. A taxa de amostragem utilizada em sistemas de telefonia é de 8KHz.
No passado músicas eram armazenadas de maneira analógica em vinyl ou em fitas de rolo magnético.
A figura abaixo ilustra uma agulha magnética deslizando sobre os sulcos em um disco de vinyl. As oscilações provocadas na agulha pelos sulcos se convertem em sinal elétrico através de uma capsula magnética. Essa técnica permite uma codificação stereo.
Para se ter uma idéia de como seria um sinal de audio que correspondesse a uma música a figura abaixo ilustra um trecho de uma música em sistema estéreo. A música está digitalizada no formato WAV utilizada nos CDs.
O CD de audio foi desenvolvido em parceria nos anos 70 pela Philips e Sony.
A tecnologia digital óptica possibilita armazenar 0s e 1s. A leitura se faz através de um raio laser que é refletido pela superfície do CD.
A figura abaixo ilustra uma comparação entre os tipos de mídia ótica existentes.
Os CDs de música utilizam uma frequência de amostragem de 44.1KHz. Por que essa frequência ?
Sabemos que quanto maior for a frequência de amostragem maior a precisão na reconstrução do sinal. Entretanto, a quantidade de dados a serem armazenados aumenta com o aumento da frequência de amostragem.
Usualmente considera-se que o ouvido humano é sensível a um intervalo de frequências de 20Hz até 20KHz.
Através do teorema da amostragem, que será discutido na seção seguinte, sabe-se que a frequência mínima de amostragem é duas vezes maior que a maior frequência presente no sinal.
A frequência de 44.1KHz atende a esse requisito ?
Mesmo que o ouvido humano não seja sensível a frequências acima de 20KHz é necessário garantir que não haja presença de componentes da música que estejam acima dessa frequência.
Os sinais com frequências acima de 22.05KHz que eventualmente existam serão reconstruídos de maneira incorreta. Os sinais serão detectados como sendo de frequências mais baixas. Esse fenômeno é denominado ALIASING.
Para evitar o ALIASING é necessário utilizar um filtro passa-baixa usualmente com frequência de corte de 20KHz. A frequência de corte é a frequência aonde o sinal cai 3dB ou seja cai pela metade. Essa atenuação é insuficiente por isso ainda existe uma margem para o decaimento do filtro de cerca de 2.05KHz.
Um filtro desse tipo é denominado filtro ANTI-ALIASING.
Sabemos como a música é armazenada em seu CD. Como o CD player reproduz a música armazenada ?
É necessário utilizar um algoritmo de reconstrução associado a um circuito eletrônico analógico. A única maneira de reproduzir a música é o envio de um sinal elétrico analógico amplificado para os alto-falantes.
Usualmente a qualidade de um CD player está associado a qualidade dos circuitos eletrônicos de reconstrução do sinal.
A seguir é discutido somente três possíveis algoritmos de reconstrução devido ao seu interesse acadêmico: reconstrutor de ordem zero, interpolador linear
e reconstrutor de Shannon.
Em teoria o reconstrutor de Shannon é o único reconstrutor ideal, i.e., que permite reconstruir perfeitamente o sinal analógico a partir de suas amostras. Entretanto, sua implementação prática é impossível como será visto a seguir.
Na prática a reconstrução de sinal de áudio é feita através de interpolações polinomiais com pontos à atrás e à frente o que só é possível porque a aplicação não possui requisitos de tempo real.
Ou seja, nenhum reconstrutor pode reconstruir perfeitamente o sinal de áudio analógico original.
Seria então um sistema de áudio analógico melhor do que um digital ?
Teorema da Amostragem
OBS: por conta das figuras utilizadas o texto ora usa o símbolo ora usa o símbolo para designar a frequência angular.
O Teorema da Amostragem é atribuído a diversos pesquisadores que supostamente o desenvolveram simultaneamente. Dentre eles destacam-se Harry Nyquist e Claude Shannon ambos pesquisadores dos Laboratórios Bell da At&T aonde foram feitos os principais avanços científicos e tecnológicos da área de comunicação. Por isso esse teorema é conhecido como Teorema de Nyquist-Shannon, Teorema de Nyquist ou Teorema de Shannon.
A idéia central do Teorema da Amostragem é a existência de uma frequência mínima de amostragem utilizada para amostrar um sinal analógico tal que as amostras discretas possam ser utilizadas para recuperar perfeitamente o sinal analógico.
O problema surge inicialmente em telefonia quando vários sinais de voz passaram a trafegar simultaneamente num único par de fios.
Dentro do contexto teórico, o sinal em tempo discreto é obtido através da amostragem do sinal de tempo contínuo .
Na figura abaixo, sub-figura (a), observa-se um espectro de frequência do sinal de tempo contínuo .
Na sub-figura (b) observa-se o espectro da função de amostragem que se repete a cada múltiplo da frequência angular de amostragem .
Como consequência observa-se na sub-figura (c) o espectro no tempo discreto repetido a cada múltiplo de .
Se a frequência angular de amostragem diminui eventualmente ocorre a situação ilustrada na sub-figura (d) onde os espectros começam a se misturar.
Esse fenômeno é denominado distorção ou Aliasing.
Um sinal no tempo contínuo pode eventualmente ser reconstruído a partir das amostras de tempo discreto através da
utilização de um filtro passa-baixa adequado como ilustrado na figura abaixo (Sub-figuras (a)-(e)).
Como será argumentado mais adiante o único filtro (Observe sub-figura (d)) que origina uma reconstrução perfeita é o algoritmo de reconstrução de Shannon.
----->
Teorema da amostragem: Seja um sinal de banda limitada, i.e., para . é unicamente determinado através de suas amostras ,se
onde a frequência de amostragem .
Se as amostras forem processadas por um filtro passa-baixa ideal com ganho Te frequência de corte maior que e menor que o sinal de saída resultante será exatamente igual a .
A frequência é denominado taxa de Nyquist (Nyquist rate) e a frequência é denominada frequência de Nyquist.
<-----
Vamos ilustrar os aspectos fundamentais da amostragem/reconstrução utilizando a função coseno como sinal a ser amostrado:
Na sub-figura (a) abaixo, observamos o espectro de frequências no domínio do tempo contínuo. Na sub-figura (b) observa-se o espectro de frequências no domínio do tempo discreto amostrado com . O espectro resultante pode ser descrito como:
e se repete a cada . A janela de frequências contêm o espectro principal que é idêntico a .
Na sub-figura (c) observa-se o espectro amostrado com . Para esse, caso dentro da janela de frequências os componentes ficam em posições diferentes.
Para o primeiro caso se o sinal for reconstruído através de um filtro passa-baixa ideal obtêm-se ou no domínio do tempo . Não há Aliasing como observado na sub-figura (d).
No segundo caso (sub-figura (e)), o sinal reconstruído é dado por . Ou seja, para esse caso a reconstrução do sinal não é correta, o que caracteriza o fenômeno de Aliasing.
Parte Experimental
A parte experimental para a comprovação do Teorema de Nyquist é idêntica ao da Experiência 1.
Entretanto não é necessaŕio calcular o gráfico da fase do espectro pois somente interessa saber em qual frequência o sinal é detectado.
Pode ser calculado o espectro simétrico como mostrado no exemplo a seguir aonde o processo de amostragem é simulado. Modifique o código abaixo para a sua parte experimental.
Interessa aqui o espectro no intervalo .
% No codigo abaixo o processo de amostragem e' simulado
% Voce deve adaptar o codigo abaixo lembrando que inicialmente deve ser utilizado
% o script aquisicao.m que amostra o sinal e armazena os pontos no array data().
%
fa=10; % frequencia de amostragem
T=1/fa; % intervalo de amostragem
tfinal=10; % tempo final de referencia
t=0:T:tfinal-T; % vetor de tempo
K=0; % sinal DC adicional
A1=1; % amplitude do sinal
f1=0.5; % frequencia do sinal
phi1=0; % angulo de atraso/avanco de fase
x = K + A1*sin(2*pi*f1*t+phi1);
figure(1);
Warning: MATLAB has disabled some advanced graphics rendering features by switching to software OpenGL. For more information, click here.
subplot(2,1,1);
stem(t,x);
xlabel('tempo (s)');
ylabel('Tensão (V)');
grid on;
nx=length(x);
f=-fa/2:(fa/(nx-1)):fa/2;
z=fft(x)/nx;
Cn=fftshift(z);
modCn = abs(Cn);
subplot(2,1,2);
stem(f,modCn);
grid on;
xlabel('Frequencia (Hz)');
ylabel('|Cn|');

Reconstrução de sinais

Na apostila são descritos três tipos de reconstrutores:
Reconstrutor de Ordem Zero
O reconstrutor de ordem zero é o algoritmo de reconstrução mais utilizado em sistemas de controle digital devido a simplicidade de sua implementação física através de circuitos eletrônicos e a sua não dependência de dados de instantes anteriores e posteriores o que permite sua utilização em tempo real.
Muito embora o processo de reconstrução não seja muito preciso ele é bastante utilizado em aplicações que não requerem precisão muito elevada como em sistemas de controle.
A figura a seguir ilustra a amostragem de um sinal e posterior reconstrução de ordem zero.
A figura a seguir apresenta o processo de uma maneira mais detalhada. O sinal é amostrado e posteriormente atravessa um sistema impulsivo retangular de largura T.
Interpolador Linear
O algoritmo de interpolação linear une os pontos através de segmentos de retas.
Sua utilização em tempo real só pode ser feita se houver um delay de um intervalo de amostragem T.
A figura abaixo representa o o processo de amostragem de um sinal analógico e reconstrução através de um interpolador linear. No domínio do tempo o interpolador linear é uma função triangular como pode ser observado na sub-figura (c). A sub-figura (e) apresenta uma comparação entre a função de transferência do interpolador linear e do filtro ideal.
Reconstrutor de Shannon
O reconstrutor de Shannon é um filtro interpolador ideal. Sua definição utiliza uma somatória de funções considerando todos os pontos:
,
onde .
A utilização todos os pontos no intervalo torna o filtro NÃO CAUSAL e portanto de implementação prática inviável.
Simplificações do algoritmo com poucos pontos pode ser realizada em aplicações que não exijam requisitos de tempo real.
Na figura abaixo observa-se uma comparação entre a função de transferência do filtro ideal e do reconstrutor de ordem zero.
Parte Experimental
O seguinte problema é colocado: como calcular estimar a precisão de aproximação de algoritmos de reconstrução de sinais ?
Aqui é proposto um método experimental para o reconstrutor de ordem zero utilizando o cálculo do erro quadrático médio.
Inicialmente, utilizando o script aquisicao.m, deve ser realizado a aquisição de uma onda senoidal gerada por um gerador de funções.
Vamos supor que é utilizado uma frequência de amostragem .
O processo de amostragem é ilustrado na figura abaixo onde as amostras estão representadas pelos círculos pretos.
A partir dessas amostras vamos agora realizar uma segunda amostragem aonde é selecionado uma a cada cinco das amostras iniciais. É como se utilizasse uma frequência de amostragem virtual cinco vezes mais lenta, i.e., .
A figura abaixo ilustra as amostras selecionadas representadas por círculos vermelhos.
As amostras representadas pelos círculos vermelhos são utilizadas para a função de reconstrução de Ordem Zero.
A função deve ser amostrada com uma frequência de amostragem .
As figuras abaixo ilustram as funções e .
Os pontos amostrados de são representados por círculos verdes e vermelhos na figura.
Os círculos vermelhos são os pontos coincidentes das funções e .
O que contribui para o erro de aproximação são as distâncias entre as amostras da função representadas pelos círculos pretos e as amostras da função representadas pelos círculos verdes.
A estimativa de precisão pode ser feita numericamente calculando-se o erro quadrático médio para os pontos amostrados: , n=0,1,...,N.
Onde Né o número total de pontos amostrados.
Abaixo um ZOOM do trecho .

Script Matlab para implementação do reconstrutor de ordem zero

A seguir é apresentado a função CalcPolOrdemZero() que implementa o reconstrutor de ordem zero.
A sua utilização é demonstrada através de um exemplo simulado de amostragem de onda senoidal.
fv=10; % frequencia de amostragem
Tv=1/fv; % intervalo de amostragem
tfinal=4.0; % tempo final de referencia
tv=0:Tv:tfinal; % vetor de tempo
% parametros da onda senoidal
K=0; % sinal DC adicional
A1=1; % amplitude do sinal
f1=0.5; % frequencia do sinal
phi1=0; % angulo de atraso/avanco de fase
% simula a aquisicao de uma onda senoidal
xv = K + A1*sin(2*pi*f1*tv+phi1);
figure(2)
stem(tv,xv); hold on; % barras verticais com circulos
stairs(tv,xv); % escada
hold on
plot(tv,xv) % onda senoidal
grid on;
fa=50; % frequencia de amostragem
T=1/fa; % intervalo de amostragem
tfinal=4; % tempo final de referencia
t=0:T:tfinal; % vetor de tempo
t=round(t,2); % arredonda para o ponto flutuante mais proximo na segunda casa decimal
N = length(t);
for k=1:N
% lembre-se que o indice 1 do array x ou y esta associado ao tempo 0 (t=0,n=0)
y(k)=CalcPolOrdemZero(t(k),Tv,xv);
end
figure(3)
hold on
for k=1:N
plot(t(k),y(k),'o');
end
hold on
%stairs(t,y);
grid on
Função para reconstrução de ordem zero
function y=CalcPolOrdemZero(t,Tv,x)
% funcao de aproximacao - reconstrutor de ordem zero
% x - array contendo os pontos amostrados
% Tv - intervalo de amostragem Tv=1/fv
% t - instante de tempo (dominio real)
Np = length(x); % numero de pontos amostrados
index=fix(round(t/Tv,2)); % descobre qual a posicao do array x cujo conteudo e' o valor da funcao
if index + 1 <= Np % round arredonda para o ponto flutuante mais proximo na 2a casa decimal
% fix arredonda para o inteiro mais abaixo
y=x(index+1); % o indice correto do array e' index+1
else % se index+1 for maior que Np entao o array nao esta definido para o instante t desejado
y=-20; % devolve um valor qq para esse caso
end
end