Prévia do material em texto
Universidade Federal de Uberlândia FEELT – Faculdade de Engenharia Elétrica Comunicações Digitais 1 Trabalho 1 Prof. Dr. Antônio Cláudio Paschoarelli Veiga Engenharia Eletrônica e de Telecomunicações Gustavo Coelho Domingos 11321ETE010 02 de Setembro de 2020 http://www.ebramem.feciv.ufu.br/defaul12.gif 1- Introdução Teorica 1.1- Teorema da amostragem A amostragem de um sinal ou forma de onda analógica é o processo pelo qual o sinal passa a ser representado por um conjunto discreto de números. Estes números, ou amostras, são iguais ao valor do sinal em instantes bem determinados (os instantes de amostragem). As amostras devem ser obtidas de maneira a que seja possível reconstituir o sinal com exatidão. A forma de onda original, definida em tempo contínuo, passa a ser representada em tempo discreto por amostras obtidas em instantes de amostragem espaçados convenientemente. O intervalo de tempo entre amostras chama-se intervalo de amostragem, Ts. O seu inverso é a frequência de amostragem, Fs = 1/Ts amostras por segundo. Um sinal para ser recuperado após sua amostragem deve obedecer o Teorema de Nyquist. A reconstrução do sinal original é um processo de interpolação. 1.2- Teorema de Nyquist "Seja um sinal, limitado em banda, e seu intervalo de tempo dividido em partes iguais, de forma que se obtenham intervalos tais que, cada subdivisão compreenda um intervalo com período T segundos, onde T é menor do que Fm/2, e se uma amostra instantânea é tomada arbitrariamente de cada subintervalo, então o conhecimento da amplitude instantânea de cada amostra somado ao conhecimento dos instantes em que é tomada a amostra de cada subintervalo contém toda a informação do sinal original." 1.3- Interpolação A interpolação corresponde ao aumento da frequência de amostragem do sinal contínuo, e só é, naturalmente, possível se este tiver já sido amostrado a uma frequência satisfazendo o teorema da amostragem. 1.4- Efeito Aliasing Caso a frequência de amostragem não seja suficientemente alta, ocorre a sobreposição do espectro (aliasing), impossibilitando recuperar o sinal original. 2- Execução 2.1- Introdução Utilizando um sinal senoidal, no caso 𝑠𝑒𝑛(2𝜋𝑓𝑡) com frequência de F=10Hz com uma frequência de amostragem 10Hz, 30Hz e 100Hz e 1kHz. Abaixo mostra o código utilizado para implementação do sinal senoidal com sua devida frequência de amostragem, apresentando as amostras em sinal discreto, utilizando a convolução através da função interpoladora para a devida reconstrução do sinal. Primeiro utilizamos uma frequência de amostragem “desobedecendo” o Teorema de Nyquist (Fs>2Fmax amostras/seg.) fazendo Fs = 10 Hz. 2.2- Código e resultados Gráficos 2.2-1. Código para 10 Hz clear; close all; t=0:0.0001:10; % Vetor de tempo F=10; % Frequência entrada em Hz X=sin(2*pi*F*t); % Gerando onda senoidal figure(1); % Plotando Sinal plot(t,X); axis([0 0.05 -1.5 1.5]); title('Sinal Contínuo'); xlabel('t'); ylabel('X(t)'); Fs1=10; % Frequência de amostragem t1=0:1/Fs1:1; % Vector de tempo x1=sin(2*pi*F*t1); % Onda com tempo de acordo com a frequência de amostragem figure(1); subplot(411); stem(t1,x1); % Representa os valores da função nos instantes axis([0 0.5 -1.5 1.5]); title('Sinal Amostrado com Fs = 10Hz'); xlabel('t'); ylabel('amplitude'); hold on; plot(t,X,'m:'); % Plotar sinal original em verde e tracejado Ts=1/Fs1; % Função Interpolação N1=round(1/Ts); n1=0:N1; Sinc=sinc(Fs1*(ones(length(n1),1)*t-(n1*Ts)'*ones(1,length(t)))); %Jogando a função sinc figure(1); subplot(412); plot(t,Sinc); axis([0 0.5 -1.5 1.5]); ylabel('x(t)'); title('Função Interpoladora'); figure(1); Xa=x1*Sinc; subplot(413); plot(t,Xa,'b--',t,X,'m'); legend('amostrado','original'); axis([0 0.5 -1.5 1.5]); ylabel('x_{a}(t)'); title('Reconstrução do X{a}(t) quando Fs = 10Hz'); Isso fez com que o programa não conseguisse plotar o sinal amostrado. 2.2-2. Código para 30 Hz No segundo teste colocamos uma frequência de amostragem que obedecesse ao Teorema de Nyquist (Fs= 30Hz): clear; close all; t=0:0.0001:10; % Vetor de tempo F=10; % Frequência entrada em Hz X=sin(2*pi*F*t); % Gerando onda senoidal figure(1); % Plotando Sinal plot(t,X); axis([0 0.05 -1.5 1.5]); title('Sinal Contínuo'); xlabel('t'); ylabel('X(t)'); Fs1=30; % Frequência de amostragem t1=0:1/Fs1:1; % Vector de tempo x1=sin(2*pi*F*t1); % Onda com tempo de acordo com a frequência de amostragem figure(1); subplot(411); stem(t1,x1); % Representa os valores da função nos instantes axis([0 0.5 -1.5 1.5]); title('Sinal Amostrado com Fs = 30Hz'); xlabel('t'); ylabel('amplitude'); hold on; plot(t,X,'m:'); % Plotar sinal original em verde e tracejado Ts=1/Fs1; % Função Interpolação N1=round(1/Ts); n1=0:N1; Sinc=sinc(Fs1*(ones(length(n1),1)*t-(n1*Ts)'*ones(1,length(t)))); %Jogando a função sinc figure(1); subplot(412); plot(t,Sinc); axis([0 0.5 -1.5 1.5]); ylabel('x(t)'); title('Função Interpoladora'); figure(1); Xa=x1*Sinc; subplot(413); plot(t,Xa,'b--',t,X,'m'); legend('amostrado','original'); axis([0 0.5 -1.5 1.5]); ylabel('x_{a}(t)'); title('Reconstrução do X{a}(t) quando Fs = 30Hz'); Obedecendo o terorema já conseguimos um resultado melhor: 2.2-3. Código para 100Hz Como observado aumentando a frequencia de amostragem conseguimos um sinal melhor. Assim aumentamos a Fs =100Hz. clear; close all; t=0:0.0001:10; % Vetor de tempo F=10; % Frequência entrada em Hz X=sin(2*pi*F*t); % Gerando onda senoidal figure(1); % Plotando Sinal plot(t,X); axis([0 0.05 -1.5 1.5]); title('Sinal Contínuo'); xlabel('t'); ylabel('X(t)'); Fs1=100; % Frequência de amostragem t1=0:1/Fs1:1; % Vector de tempo x1=sin(2*pi*F*t1); % Onda com tempo de acordo com a frequência de amostragem figure(1); subplot(411); stem(t1,x1); % Representa os valores da função nos instantes axis([0 0.5 -1.5 1.5]); title('Sinal Amostrado com Fs = 100Hz'); xlabel('t'); ylabel('amplitude'); hold on; plot(t,X,'m:'); % Plotar sinal original em verde e tracejado Ts=1/Fs1; % Função Interpolação N1=round(1/Ts); n1=0:N1; Sinc=sinc(Fs1*(ones(length(n1),1)*t-(n1*Ts)'*ones(1,length(t)))); %Jogando a função sinc figure(1); subplot(412); plot(t,Sinc); axis([0 0.5 -1.5 1.5]); ylabel('x(t)'); title('Função Interpoladora'); figure(1); Xa=x1*Sinc; subplot(413); plot(t,Xa,'b--',t,X,'m'); legend('amostrado','original'); axis([0 0.5 -1.5 1.5]); ylabel('x_{a}(t)'); title('Reconstrução do X{a}(t) quando Fs = 100Hz'); 2.2-4. Código para 1Khz Com uma frequencia maior conseguimos com que Xa(t) ficasse cada vez mais aproximado de X(t). Portanto para ultimo teste colocamos Fs=1KHz. clear; close all; t=0:0.0001:10; % Vetor de tempo F=10; % Frequência entrada em Hz X=sin(2*pi*F*t); % Gerando onda senoidal figure(1); % Plotando Sinal plot(t,X); axis([0 0.05 -1.5 1.5]); title('Sinal Contínuo'); xlabel('t'); ylabel('X(t)'); Fs1=1000; % Frequência de amostragem t1=0:1/Fs1:1; % Vector de tempo x1=sin(2*pi*F*t1); % Onda com tempo de acordo com a frequência de amostragem figure(1); subplot(411); stem(t1,x1);% Representa os valores da função nos instantes axis([0 0.5 -1.5 1.5]); title('Sinal Amostrado com Fs = 1KHz'); xlabel('t'); ylabel('amplitude'); hold on; plot(t,X,'m:'); % Plotar sinal original em verde e tracejado Ts=1/Fs1; % Função Interpolação N1=round(1/Ts); n1=0:N1; Sinc=sinc(Fs1*(ones(length(n1),1)*t-(n1*Ts)'*ones(1,length(t)))); %Jogando a função sinc figure(1); subplot(412); plot(t,Sinc); axis([0 0.5 -1.5 1.5]); ylabel('x(t)'); title('Função Interpoladora'); figure(1); Xa=x1*Sinc; subplot(413); plot(t,Xa,'b--',t,X,'m'); legend('amostrado','original'); axis([0 0.5 -1.5 1.5]); ylabel('x_{a}(t)'); title('Reconstrução do X{a}(t) quando Fs = 1KHz'); Apesar de necessitar de muito processamento conseguimos um X(a) tao próximo de X(t) que mal podemos diferencialas.