Mudanças entre as edições de "PSD29007-Engtelecom(2018-1) - Prof. Marcos Moecke"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 7: Linha 7:
 
* Autoinscrição na [https://moodle.sj.ifsc.edu.br/course/view.php?id=267 Plataforma Moodle de PSD29007] (PSD29006-2017-2)
 
* Autoinscrição na [https://moodle.sj.ifsc.edu.br/course/view.php?id=267 Plataforma Moodle de PSD29007] (PSD29006-2017-2)
 
* Revisão de Sinais e Sistemas no tempo discreto em Matlab:
 
* Revisão de Sinais e Sistemas no tempo discreto em Matlab:
 
  
 
;Aula 2 (20 fev):
 
;Aula 2 (20 fev):
Linha 170: Linha 169:
 
:*Ver também [http://www.mathworks.com/help/releases/R2014a/pdf_doc/matlab/index.html PDF Documentation for MATLAB]. Principalmente [http://www.mathworks.com/help/releases/R2014a/pdf_doc/matlab/getstart.pdf MATLAB Primer].
 
:*Ver também [http://www.mathworks.com/help/releases/R2014a/pdf_doc/matlab/index.html PDF Documentation for MATLAB]. Principalmente [http://www.mathworks.com/help/releases/R2014a/pdf_doc/matlab/getstart.pdf MATLAB Primer].
  
 
+
;Aula 5 (2 mar):
<!--
 
:* Resposta de sistemas LTI (Experimento 1.1)
 
::* Relembrar o conceito de equação de diferenças de um sistema LTI discreto e resposta ao impulso.
 
::* Resposta ao [https://pt.wikipedia.org/wiki/Delta_de_Kronecker delta de Kronecker] do sistema LTI discreto
 
:: <math>a_0 y[n] + a_1 y[n-1] + a_2 y[n-2] + ... + a_N y[n-N] = b_0 x[n] + b_1 x[n-1] + b_2 x[n-2] + ... + b_M x[n-M]</math>
 
:: onde <math>a_0 = 1</math>, <math>a_1 = - 1/\alpha</math> e <math>b_1 = 1 </math> logo <math>y[n] =  1/\alpha . y[n-1] + x[n]</math>
 
<syntaxhighlight lang=matlab>
 
%  Exemplos e Experimentos baseados no livro:
 
% DINIZ, P. S. R., DA SILVA, E. A. B., e LIMA NETTO, S. Processamento Digital de Sinais: Projeto e Análise de Sistemas. 2. ed. Porto Alegre: Bookman, 2014. 976 p. ISBN 978-8582601235.
 
%% Experimento 1.1
 
alpha = 1.15; N = 256;
 
x = [1 zeros(1,N)];
 
y = filter(1,[1 -1/alpha],x);
 
stem(y);
 
</syntaxhighlight>
 
:* Para usar melhor a interface do Matlab leia também o  [http://www.mathworks.com/help/matlab/learn_matlab/help.html Help], lembre-se que o F9 executa o código destacado no Help. [http://www.mathworks.com/help/matlab/learn_matlab/scripts.html Programação com scripts .m].
 
 
 
 
 
 
 
;Aula 3 (3 Ago):
 
 
*Revisão de Sinais e Sistemas no tempo discreto em Matlab:
 
*Revisão de Sinais e Sistemas no tempo discreto em Matlab:
 
:* Filtragem de Sinais
 
:* Filtragem de Sinais
Linha 265: Linha 244:
 
{{collapse bottom}}
 
{{collapse bottom}}
  
:* Análise de Sinais (Experimento 3.2) - Análise de um sistema h[n] correspondente a um filtro passa-faixa, utilizando um sinal de entrada x[n] senoidal (ou um sinal r[n] de ruído branco). Análise da entrada x[n] e saída y[n] usando a fft.
 
{{collapse top | Variação do Experimento 3.2}}
 
<syntaxhighlight lang=matlab>
 
%% Variação do Experimento 3.2 do livro:
 
% DINIZ, P. S. R., DA SILVA, E. A. B., e LIMA NETTO, S. Processamento Digital de Sinais: Projeto e Análise de Sistemas. 2. ed. Porto Alegre: Bookman, 2014. 976 p. ISBN 978-8582601235.
 
% FILE: Ex3_2.m
 
 
% Análise de sinais no domínio da frequência
 
fs = 200;  % frequência de amostragem
 
f_sinal = 10;  A_sinal = 1;  % freqüência e amplitude do sinal
 
T = 1;      % Duração do sinal
 
k_noise = 0.2;    % Intensidade do ruído 
 
snr = 0;
 
 
time = 0 : 1/fs : (T-1/fs);
 
L = length(time);
 
freq = time * fs/T;
 
 
% Sinal x(n) com amplitude A_sinal e frequencia de f_sinal (Hz)
 
x = A_sinal*sin(2*pi*f_sinal.*time);
 
 
% Adicionando um ruido com a função randn
 
noise = k_noise*randn(1,fs*T);
 
x1 = x + noise;
 
 
% Adicionando um ruido com a função awgn
 
x2 = awgn(x,snr);
 
 
% Obtendo o sinal no domínio da frequencia
 
X = abs(fft(x))/L;
 
X1 = abs(fft(x1))/L;
 
X2 = abs(fft(x2))/L;
 
 
% Obtendo os plots dos sinais no dominio do tempo e domínio da frequencia
 
figure(1);
 
subplot(211);plot(time,x, 'b', time,x1, 'g', time, x2, 'r');
 
legend('x(n)', 'x(n)+rand', 'x(n)awgn', 'Location','south')
 
xlabel('Tempo (seg)'); ylabel('Magnitude (linear)');
 
subplot(212);plot(freq, (abs(X)), 'b'); hold on ;plot(freq, (abs(X1)),'g');plot(freq,(abs(X2)),'r');
 
legend('X(f)', 'X(f)+rand', 'X(f)+awgn', 'Location','south'); hold off;
 
xlabel('Frequencia (Hz)'); ylabel('Magnitude (linear)');
 
</syntaxhighlight>
 
{{collapse bottom}}
 
 
:* Consulte a documentação do Matlab sobre <syntaxhighlight lang=matlab> fft, ifft, fftshift, randn </syntaxhighlight>
 
:* Consulte a documentação do Matlab sobre <syntaxhighlight lang=matlab> plot, grid, subplot, hold, xlabel, ylabel, title, legend, xlim, ylim, log10, log </syntaxhighlight>
 
:* Consulte a documentação do Matlab sobre [https://www.mathworks.com/help/matlab/ref/text.html text], [http://www.mathworks.com/help/signal/ref/zp2tf.html zp2tf], [http://www.mathworks.com/help/signal/ref/tf2zp.html tf2zp], [http://www.mathworks.com/help/signal/ref/fftfilt.html fftfilt], [http://www.mathworks.com/help/matlab/ref/awgn.html awgn]
 
:*Ver pag. 141 a 145 e 230 a 235 de <ref name="DINIZ2014"/>
 
 
;Aula 4 (7 Ago):
 
*Revisão de Sinais e Sistemas no tempo discreto em Matlab:
 
 
:* Filtros Digitais ([https://owncloud.ifsc.edu.br/index.php/s/WWY2LWexts8PKDs Experimento 2.3])
 
:* Filtros Digitais ([https://owncloud.ifsc.edu.br/index.php/s/WWY2LWexts8PKDs Experimento 2.3])
 
<syntaxhighlight lang=matlab>
 
<syntaxhighlight lang=matlab>
Linha 398: Linha 326:
 
xlim([0 Fs/2]);
 
xlim([0 Fs/2]);
 
</syntaxhighlight>
 
</syntaxhighlight>
-->
+
 
 +
:* Consulte a documentação do Matlab sobre <syntaxhighlight lang=matlab> fft, ifft, fftshift, randn </syntaxhighlight>
 +
:* Consulte a documentação do Matlab sobre <syntaxhighlight lang=matlab> plot, grid, subplot, hold, xlabel, ylabel, title, legend, xlim, ylim, log10, log </syntaxhighlight>
 +
:* Consulte a documentação do Matlab sobre [https://www.mathworks.com/help/matlab/ref/text.html text], [http://www.mathworks.com/help/signal/ref/zp2tf.html zp2tf], [http://www.mathworks.com/help/signal/ref/tf2zp.html tf2zp], [http://www.mathworks.com/help/signal/ref/fftfilt.html fftfilt], [http://www.mathworks.com/help/matlab/ref/awgn.html awgn]
 +
:*Ver pag. 141 a 145 e 230 a 235 de <ref name="DINIZ2014"/>
 +
 
 
{{collapse bottom}}
 
{{collapse bottom}}
  

Edição das 20h13min de 1 de março de 2018

Registro on-line das aulas

Unidade 1

Unidade 1

Aula 1 (16 fev)
Aula 2 (20 fev)
  • Revisão de Sinais e Sistemas no tempo discreto em Matlab:
  • Explorar a interface do Matlab.
  • Funções de visualização das variáveis no workspace.
  • Execução de instruções passo a passo.
  • Escrita de script .m
  • Uso da execução das seções de um script.
  • Incremento de valor e execução.
EXEMPLOS:
  • Leia com atenção e execute o exemplo (Moving-Avarage Filter) na página de help da função filter.
  • Leia com atenção o help Using FFT, abra o script clicando no botão [Open this Example]. Execute o script seção após seção. Note o uso da fft para determinar a frequência das manchas solares.
  • Para melhorar o desempenho no Matlab recomendo que leiam a pagina do Help, . Também gostaria de lembra-los que a tecla F9 executa o código destacado no Help. Programação com scripts .m.
DICAS:
  • No help on-line da Matworks, usando o botão [Try This Example > Try in your browser], permite executar o código no próprio browser sem ter nenhuma instalação do Matlab. Para verificar que o código realmente é executado mude a amplitude do ruído randômico para 0.1 ou 0.5, insira o comando close all antes da primeira linha, e execute todo o código [Run All]
  • No help do Matlab, usando o botão [Open this Example], é possível executar o código seção a seção.
  • Leia sobre manchas solares para entender o que são os dados do segundo exemplo.
Aula 3 (23 fev)
  • Revisão de Sinais e Sistemas no tempo discreto em Matlab:
Sinais no dominio do tempo e dominio da frequencia. Uso da função fft
Exemplo de uso da FFT
%% Signal in Time Domain 
% Use Fourier transforms to find the frequency components of a signal buried in noise.
% Specify the parameters of a signal with a sampling frequency of 1 kHz and a signal duration of 1.5 seconds
Fs = 1000;            % Sampling frequency                    
T = 1/Fs;             % Sampling period       
L = 1500;             % Length of signal
t = (0:L-1)*T;        % Time vector

% Form a signal containing a 50 Hz sinusoid of amplitude 0.7 and a 120 Hz sinusoid of amplitude 1.
S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);

% Corrupt the signal with zero-mean white noise with a variance of 4.
X = S + 2*randn(size(t));

% Plot the noisy signal in the time domain. It is difficult to identify the frequency components by looking at the signal X(t).
subplot(211);
plot(1000*t(1:200),X(1:200))
title('Signal Corrupted with Zero-Mean Random Noise')
xlabel('t (milliseconds)')
ylabel('X(t)')

%% Signal in Frequency Domain
% Compute the Fourier transform of the signal.
Y = fft(X);

% Compute the two-sided spectrum P2. Then compute the single-sided spectrum P1 based on P2 and the even-valued signal length L.
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);

% Define the frequency domain f and plot the single-sided amplitude spectrum P1. 
% The amplitudes are not exactly at 0.7 and 1, as expected, because of the added noise. 
% On average, longer signals produce better frequency approximations.
f = Fs*(0:(L/2))/L;
subplot(212);
plot(f,P1)
ylim([0 1.05]) 
title('Single-Sided Amplitude Spectrum of X(t)')
xlabel('f (Hz)')
ylabel('|P1(f)|')

% Now, take the Fourier transform of the original, uncorrupted signal and retrieve the exact amplitudes, 0.7 and 1.0.
Y = fft(S);
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);

plot(f,P1) 
title('Single-Sided Amplitude Spectrum of S(t)')
xlabel('f (Hz)')
ylabel('|P1(f)|')
  • Amostragem de Sinais (Experimento 1.2)
  • Relembrar teorema da amostragem. Efeito da amostragem abaixo da frequência de Nyquist. Aliasing.
  • Notar que as amostras de um sinal (3 Hz) e um sinal (7 Hz) são idênticas quando amostrado com um sinal de 10 Hz.
%  Exemplos e Experimentos baseados no livro:
% DINIZ, P. S. R., DA SILVA, E. A. B., e LIMA NETTO, S. Processamento Digital de Sinais: Projeto e Análise de Sistemas. 2. ed. Porto Alegre: Bookman, 2014. 976 p. ISBN 978-8582601235.
%% Experimento 1.2
fs = 10; % frequencia (Hz) de amostragem dos sinais
Ts = 1/fs; fase = 0;
time = 0:Ts:(1-Ts);
f1 = 3; % frequencia (Hz) do sinal s_1
f2 = 7; % frequencia (Hz) do sinal s_2
s_1 = cos(2*pi*f1*time+fase);
s_2 = cos(2*pi*f2*time+fase);
fsa = 1000; % frequência auxiliar de amostragem usada apenas para representação dos sinais originais
Tsa = 1/fsa;
time_aux = 0:Tsa:(1-Tsa);
figure(1);
stem(time,s_1,'ob');
hold on;
plot(time_aux, cos(2*pi*f1*time_aux+fase),'--k');
stem(time,s_2,'+r');
plot(time_aux, cos(2*pi*f2*time_aux+fase),'--m');
hold off;
legend('s_1 discreto','s_1 contínuo','s_2 discreto','s_2 contínuo')
Aula 4 (27 fev)
  • Revisão de Sinais e Sistemas no tempo discreto em Matlab:
Variação do Experimento 2.2
%  Exemplos e Experimentos baseados no livro:
% DINIZ, P. S. R., DA SILVA, E. A. B., e LIMA NETTO, S. Processamento Digital de Sinais: Projeto e Análise de Sistemas. 2. ed. Porto Alegre: Bookman, 2014. 976 p. ISBN 978-8582601235.
%% Experimento 2.2
% Resposta em frequencia usando a função freqz
N = 1;
num = [1 0 0 0];
den = poly([0.8 0.2])
%den = [1 0.6 -0.16];
% modo 1
%[H,w]=freqz(num,den,[0:pi/100:N*pi-pi/100]);
%plot(w/pi, abs(H));
% modo 2
%[H,w]=freqz(num,den);
%plot(w/pi, abs(H));
% modo 3
%[H,w]=freqz(num, den, 'whole');
%plot(w/pi, abs(H));
% modo 4
freqz(num, den, 'whole');
figure(2);
zplane(num,den);

%% Resposta em frequencia substituindo z -> e^(jw)
syms z
Hf(z) = symfun(z^2/(z-0.2)/(z+0.8),z);
pretty(Hf)
latex(Hf)
N = 1;
w = [0:pi/100:N*pi-pi/100];
plot(w/pi,abs(Hf(exp(1i*w))))
%title(['$' latex(Hf) '$'],'interpreter','latex')
text(0.2,2,['H(z) = ' '$$' latex(Hf) '$$'],'interpreter','latex')
xlabel(['w/' '$$' '\pi' '$$'],'interpreter','latex')
  1. Verifique a diferença entre os tipos de plots comentados no código.
  2. substitua o denominador de H(z) por dois polos em [-0.8 -0.8].
  3. verifique o que ocorre se forem utilizados polos complexos conjugados [0.3-0.4i 0.3+0.4i 0.1]
  4. verifique o que ocorre se forem utilizados polos complexos não conjugados [0.3-0.4i 0.3+0.8i]
  5. verifique o que ocorre se os polos estiverem fora do circulo unitário [1.2 -0.2]. Interprete este resultado
Aula 5 (2 mar)
  • Revisão de Sinais e Sistemas no tempo discreto em Matlab:
  • Filtragem de Sinais
Variação do Experimento 3.1
%% Variação do Experimento 3.1 do livro:
% DINIZ, P. S. R., DA SILVA, E. A. B., e LIMA NETTO, S. Processamento Digital de Sinais: Projeto e Análise de Sistemas. 2. ed. Porto Alegre: Bookman, 2014. 976 p. ISBN 978-8582601235.
% FILE: Ex3_1.m
% Exemplificando as possiveis formas de realizar a filtragem de um sinal x(n)

clc; clear all; close all;
%% Definindo valores iniciais
Nh = 10; Nx = 20;
%Nh = 400; Nx = 10000;
x = ones(1,Nx);
% A resposta ao inpulso de um sistema h(n) 
% no filtro FIR aos coeficientes b(n) = h(n) 
h = [1:Nh]; b = h;
%% Filtrando o sinal e medindo tempos

% Filtragem utilizando a convolução
% NOTE: length(y) = length(x) + length(h) -1
tic;  % iniciar a contagem do tempo
y1 = conv(x,h); 
t(1) = toc; % terminar acontagem e mostrar tempo no console

% filtragem utilizando a equação recursiva
% NOTE: length(y) = length(x)
tic;
y2 = filter(b,1,x);
t(2) = toc;

% filtragem utilizando a equação recursiva
% aumentando o tamanho de x para que length(y3) = length(y1)
x3 = [x zeros(1,length(h)-1)];
tic;
y3 = filter(h,1,x3); 
t(3) = toc;

length_y = length(x) + length(h) - 1;

% filtragem utilizando a FFT
% a y = IFFT(FFT(x)*FFT(h))
tic;
X = fft(x,length_y);
H = fft(h,length_y);
Y4 = X.*H;
y4 = ifft(Y4);
t(4) = toc;

% filtragem utilizando a função fftfilt
% a y = IFFT(FFT(x)*FFT(h))

tic
y5 = fftfilt(h,x3);
t(5) = toc;

disp('Comprimento do vetor de saída length(y)')
disp(['    ' num2str([length(y1) length(y2) length(y3) length(y4) length(y5)])])
disp('Tempo usado na filtragem em micro segundos')
disp(['    ' num2str(t*1e6) ' us'])

%%  Plotando o gráfico
subplot(411);stem(y1);
hold on;
stem(y2,'xr');
stem(y3,'+m');
legend('y1', 'y2', 'y3')
hold off
subplot(412);stem(y1, 'ob');legend('y1')
subplot(413);stem(y2, 'xr'); hold on; stem(zeros(size(y1)),'.w');hold off; legend('y2')
subplot(414);stem(y3, '+m');legend('y3')
%% Experimento 2.3 - Filtros Digitais
% Exemplos e Experimentos baseados no livro:
% DINIZ, P. S. R., DA SILVA, E. A. B., e LIMA NETTO, S. Processamento Digital de Sinais: Projeto e Análise de Sistemas. 2. ed. Porto Alegre: Bookman, 2014. 976 p. ISBN 978-8582601235.
% FILE: Exp2_3.m
 
%% 1º filtro
p1 = 0.9*exp(1j*pi/4);
Z = [1 -1 ]'; P = [p1 p1']';
[num,den] = zp2tf(Z,P,1);
[h,w] = freqz(num,den);
figure(1); plot(w,abs(h)/max(abs(h)));
figure(2); zplane(num,den);
 
%% 2º filtro
z1 = exp(1j*pi/8);
z2 = exp(1j*3*pi/8);
p1 = 0.9*exp(1j*pi/4);
Z = [1 -1 z1 z1' z2 z2']';
P = [p1 p1' p1 p1' p1 p1']';
[num,den] = zp2tf(Z,P,1);
[h,w] = freqz(num,den);
figure(1); plot(w,abs(h)/max(abs(h)));
figure(2); zplane(num,den);
 
%% 3º filtro
z1 = exp(1j*pi/8);
z2 = exp(1j*3*pi/8);
p1 = 0.99*exp(1j*pi/4);
p2 = 0.9*exp(1j*pi/4 - 1j*pi/30);
p3 = 0.9*exp(1j*pi/4 + 1j*pi/30);
Z = [1 -1 z1 z1' z2 z2']';
P = [p1 p1' p2 p2' p3 p3']';
[num,den] = zp2tf(Z,P,1);
[h,w] = freqz(num,den);
figure(1); plot(w,abs(h)/max(abs(h)));
figure(2); zplane(num,den);
  • Exercício - Sinal DTMF com ruído
  • Verifique se o Matlab está reproduzindo corretamente o som.
%% Carregando o som
clear, close, clc
load handel;

%% Reproduzindo o som 
sound(y,Fs)
 
% Reproduzindo o som 
%soundsc(y,Fs)
 
% Reproduzindo o som 
%player = audioplayer(y, Fs);
%play(player);
  • Usando o Matlab (ou Audacity) para gerar um sinal DTMF correspondente a um número N e adicionar um ruido ao sinal. Opcionalmente utilize um sinal DTMF gravado
  • Utilizar uma frequência de amostragem de 8000Hz de fazer a duração do sinal igual a 2 segundos.
  • Para adicionar o ruído utilize a função y = awgn(x,snr), ou y = x + nivel*randn(n).
  • Observe este sinal no domínio do tempo (DT) e domínio da frequência (DF).
%% Carregando o som
clear, close, clc
[y,Fs] = audioread('DTMF_8kHz.ogg');

%% Reproduzindo o som 
sound(y,Fs)

%% Visualizando o som no DT
time = [0:length(y)-1]'/Fs;
plot(time',y'); xlabel('segundos');
xlim([0 time(end)]), ylim([-1 1]);

%% Visualizando o som no DF
Nfreq = length(y);
freq = linspace(0,2*pi,Nfreq)'*Fs/pi/2;
Y = fft(y,Nfreq)/Nfreq;
plot(freq,abs(Y)); xlabel('Hertz');
xlim([0 Fs/2]);
  • Consulte a documentação do Matlab sobre
     fft, ifft, fftshift, randn
    
  • Consulte a documentação do Matlab sobre
     plot, grid, subplot, hold, xlabel, ylabel, title, legend, xlim, ylim, log10, log
    
  • Consulte a documentação do Matlab sobre text, zp2tf, tf2zp, fftfilt, awgn
  • Ver pag. 141 a 145 e 230 a 235 de [1]


Avaliações

  • Entrega dos diversas Atividades Extraclasse ao longo do semestre.
  • Entrega do Projeto Final. O projeto é avaliado nos quesitos:
1) Implementação do Sistema,
2) Documentação,
3) Avaliação Global do aluno no projeto.
  • Entrega dos Atividades Extraclasse ao longo do semestre AE1 a AE(N). A entrega, detalhes e prazos de cada AE serão indicados na plataforma Moodle
Atividades Relâmpago (prazo e forma de entrega ver na plataforma AVA)
AE1 - Revisão de Sinais e Sistemas (prazo e forma de entrega ver na plataforma AVA)
  • Enviar o relatório (em pdf) incluindo as principais figuras obtidas e as respostas e conclusões na plataforma AVA.
  • Para a geração de documentação/relatórios técnicos/artigos, está disponibilizada a Plataforma Sharelatex. Utilize preferencialmente o modelo de artigo no padrão ABNT em 1 coluna. Se quiser pode utilizar o publish do matlab mas entregue o documento em pdf, com as respostas solicitadas e as conclusões de cada Atividade.


Referências Bibliográficas

  1. 1,0 1,1 1,2 DINIZ, P. S. R., DA SILVA, E. A. B., e LIMA NETTO, S. Processamento Digital de Sinais: Projeto e Análise de Sistemas. 2. ed. Porto Alegre: Bookman, 2014. 976 p. ISBN 978-8582601235


Curso de Engenharia de Telecomunicações