Sei sulla pagina 1di 9

FONDAMENTI DI SEGNALI E TRASMISSIONE

5 Laboratorio
Paolo Mazzucchelli

mazzucch@elet.polimi.it

Campionamento di segnali
In MATLAB, qualunque segnale continuo approssimato da una sequenza campionata. Si pu
simulare il campionamento di un segnale continuo, semplicemente riducendo il suo passo di
campionamento (decimazione della sequenza). Il comando che permette di decimare un vettore, che
approssima il segnale y(t) :
tc=t(1:step:end);
yc=y(1:step:end);
(dove step rappresenta il rapporto tra il nuovo e il vecchio passo di campionamento)
La visualizzazione pi adatta ai segnali campionati ottenuta con il comando:
stem(tc,yc);
: Esercizio
Il segnale y(t) (somma di due sinusoidi di frequenza f1=5 Hz f2=20 Hz, e ampiezza A1=2, A2=1)
originariamente campionato con passo dt=1 ms, viene sottocampionato con passo dt=10 ms. Si disegni
il segnale originale ed il segnale sottocampionato. La durata dellosservazione T=1 sec.
dt=0.001;
t=[0:dt:1-0.001];
y=3*sin(2*pi*5*t)+sin(2*pi*20*t);
tc=t(1:10:end);
yc=y(1:10:end);
figure,
plot(t,y,'r');
hold on;
stem(tc,yc);

Campionamento ed equivocazione
Leffetto della discretizzazione di un segnale continuo replicare la risposta in frequenza del segnale a
passo fc=1/dt. In prima approssimazione quindi le uniche frequenze rappresentabili sono limitate
allintervallo 1/(2*dt). Frequenze pi elevate vengono interpretate come altre frequenze nellintervallo
definito in precedenza (equivocazione).
Date due sinusoidi campionate con freq. di campionamento fc=20 Hz, la prima a frequenza f1 minore di
fc/2 (non equivocata) e laltra a frequenza f2=f1+fc, si pu verificare come i campioni delle due
sinusoidi si sovrappongono perfettamente (equivocazione).
fc=20;
dt=1/fc;
t=[0:dt:2];
f1=2;
f2=f1+fc;

%
%
%
%
%

freq. campionamento
intervallo campionamento
asse campione tempi
freq. non aliasata
freq. aliasata

figure
subplot(2,1,1),
plot(t,sin(2*pi*f1*t),'*',t,sin(2*pi*f2*t),'o')
xlabel('tempo')
subplot(2,1,2),
t1=[0:dt/10:2];
plot(t1,sin(2*pi*f1*t1),t1,sin(2*pi*f2*t1),t, sin(2*pi*f1*t),'*')
xlabel('tempo')

Ricostruzione di segnali
Il segnale pu essere ricostruito correttamente, se il segnale campionato, definito nei soli istanti
y(n*dt), (e quindi con trasformata periodica di periodo fc=1/dt), viene filtrato con un filtro passa-basso
nellintervallo 1/2dt , 1/2dt. Questo pu essere fatto convolvendo con la risposta allimpulso del filtro
ideale, ovvero il sinc(t). Quindi, per poter effettuare la ricostruzione:
% spettro del segnale continuo
N =length(t);
df=1/(N*dt);
f=[N/2+[0:N-1]]*df; % N pari
Y =fftshift(fft(y))*dt;
% spettro del segnale impulsivo
yi=zeros(size(y));
yi(1:10:end)=yc;
YI =fftshift(fft(yi))*dt;
% ricostruzione sinc
th=[-1:dt:1];
h =sin(pi*100*th)./(pi*100*th);
h(find(th==0))=1;
yr=conv(yi,h);
tr=th(1)+t(1)+[0:length(yr)]*dt;
set=find(tr>=0 & tr<1);
yr=yr(set);
YR=fftshift(fft(yr))*dt;
figure,
subplot(3,1,1),
plot(t,y,'--r',t,yr,'b');
subplot(3,1,2),
semilogy(f,abs(YI),'b');
grid, axis([-500 500 1e-3 1]);
subplot(3,1,3),
semilogy(f,abs(YR),'b',f,abs(Y),'--r');
grid, axis([-500 500 1e-3 1]);
Possiamo interpretare lesempio presentato come simulazione del comportamento del filtro analogico
necessario per la ricostruzione, ma anche come sovracampionamento numerico (esempio, il classico
sovracampionamento 8:1 utilizzato nei cd-player), che permette di semplificare lo stadio analogico
successivo comunque necessario. Infatti, il sovracampionamento (o interpolazione) numerico, permette
di allontanare le repliche spettrali (per il sovracampionamento 8:1, il periodo diventa 8fc!) e quindi di
richiedere la realizzazione di filtri analogici con piccole pendenze.
Ovviamente nella ricostruzione di segnali continui si impiegheranno filtri di breve durata, per rendere
loperazione possibile in tempo reale. Ad esempio si potranno utilizzare il mantenitore, linterpolatore
lineare, cubico. In MATLAB, questo tipo di ricostruzione pu essere simulata con il comando
interp1. La risposta in frequenza del corrispondente filtro di ricostruzione sar
3

unapprossimazione tanto peggiore del filtro passa-basso ideale, quanto pi bassa la lunghezza della
risposta impulsiva del filtro.

% ricostruzione pratica di segnali


yr=interp1(tc,yc,t,'nearest'); % provare anche con linear,
% v5cubic,spline
yr(find(isnan(yr))=0;
YR=fftshift(fft(yr))*dt;
figure,
subplot(2,1,1),
plot(t,y,'--r',t,yr,'b');
subplot(2,1,2),
semilogy(f,abs(YR),'b',f,abs(Y),'--r');
grid,
axis([-500 500 1e-3 1]);
: Esercizio
Si analizzi la risposta impulsiva dei diversi interpolatori nel dominio delle frequenze (si calcoli la
trasformata di Fourier della sequenza ottenuta interpolando 10:1 un singolo impulso)

Quantizzazione
Il segnale tempo continuo y(t), campionato con passo di campionamento temporale dt, quantizzato
con B bit: presenta valori limitati allinsieme rappresentabile dal numero di bit utilizzati (ad esempio, il
formato cd-audio utilizza 16 bit per canale). Scriviamo quindi una funzione che permette di simulare in
MATLAB la quantizzazione del segnale y(t):
Yq=quantizza(Y,peak,livelli);
(dove livelli il numero di livelli utilizzabili (B bit= 2B livelli) e peak rappresenta lampiezza di
picco rappresentabile, che deve essere superiore allampiezza massima del segnale per evitare
distorsione).
function Yq=quantizza(Y,estr,livelli);
% Quantizzazione del vettore Y, con N livelli,
% e con ampiezza di soglia -estr...estr
Yq=round(Y/estr*livelli/2-1)/(livelli/2-1)*estr;
set=find(abs(Yq)>estr);
Yq(set)=estr*sign(Yq(set));
return,
Errore di Quantizzazione
Se il segnale in ingresso al blocco di quantizzazione ha distribuzione uniforme tra Vp e +Vp, lerrore
di quantizzazione e(t)=x(t)-xq(t) pu essere modellizzato come un processo casuale stazionario a valor
medio nullo e varianza:
2=1/12*Vpp2 / 22B
: Esercizio
Si generi un processo x(t) (Il segnale osservato per T=1 sec., con passo di campionamento dt=1 ms),
con distribuzione uniforme tra 2 e +2. Si quantizzi x(t) con numero di bit B=2,4,6,8,12,16..
Qual il numero di livelli corrispondenti?
Si stimi la densit spettrale di potenza dellerrore di quantizzazione e la si confronti con il
risultato teorico noto
% Generazione del processo x(t)
N=1000;
dt=0.001;
t=[0:N-1]*dt;
y=4*rand(1,N)-2;
% quantizzazione
L=2^16;
yq=quantizza(y,2,L);
E=var(y-yq);
Et=2^2/(3*L^2);
% visualizzazione
figure,
plot(t,y,'b');
hold on,
plot(t,yq,'.r');
5

plot(t,y-yq,'-g');
xlabel('tempo [sec.]');
title (['Quantiz. con ',num2str(L),' livelli; potenza
errore:',num2str(E),(Teorico:,num2str(Et), )]);
% Densit spettrale
figure,
df=1/(N*dt);
f=[-N/2+[0:N-1]]*df; % N pari
semilogy(f,fftshift(abs(fft(y)).^2)/N,'r',f,fftshift(abs(fft(yyq)).^2)/N,'b',f,ones(size(f))*E,'g');
grid
xlabel('frequenza [Hz]');

Trasmissione in banda base


Si vuole analizzare il comportamento di un sistema di trasmissione numerica in banda base, verificando
leffetto del rumore sul calcolo della probabilit derrore.
function [seq_ric,decisione]=pam(L,sequenza,SNR),
% trasmissione PAM a L livelli.
% ----------------------------% [sequenzaricevuta,decisore]=pam(Livelli,sequenzatrasmessa,d/sigma),
% ----------------------------noise
=randn(size(sequenza))/SNR;
seq_ric =sequenza-(L-1)/2+noise;
[val,pos]=min(abs(seq_ric-sequenza*L-L/2));
decisione=sequenza(pos);
Simboli=[0:L-1]-(L-1)/2;
for k=1:length(sequenza),
[val,pos]=min(abs(seq_ric(k)-Simboli));
decisione(k)=Simboli(pos)+(L-1)/2;;
end,
return,
: Esercizio
Si vuole visualizzare la sequenza ricevuta, con una trasmissione PAM a L livelli, fissato il rapporto
(d/). Si stimi inoltre la probabilit di errore di ricezione di un simbolo. Si utilizzi come sequenza
trasmessa una sequenza casuale con i simboli [0:L-1] equiprobabili.
% disegno della costellazione M-PAM
% --------------------------------L=16;
Len=1000;
colmap=hsv(L);
cols=zeros(size(colmap));
for k=1:2:L-1,
cols(k,:)=colmap(k,:);
cols(k+1,:)=colmap(L-k+1,:);
end,
sequenza=floor(rand(1,Len)*L);
[seq_ric,decisione]=pam(L,sequenza,5);
figure,
hold on,
for k=0:L-1;
X=find(sequenza==k);
plot(seq_ric(X),zeros(size(X)),'Marker','.','LineStyle','none','Color
',cols(k+1,:));
end,
plot(sequenza-(L-1)/2,zeros(size(sequenza)),'ko');
errori=length(find((decisione-sequenza)~=0));
title(['Simboli Errati [%]:',(num2str(errori/Len*100))]);

: Esercizio
Si mostri landamento della probabilit di errore al variare del rapporto (d/) per differenti livelli L (si
scelga (d/)=[0.1:0.2:10] ). Lo si confronti con landamento teorico:
P()=2(1-1/L)wQ(d/(2) )= 2(1-1/L)w0.5werfc(d/(22) )
Trasmissione in banda passante
Si vuole ora analizzare la trasmissione numerica in un canale passa-banda, modulando in fase e
quadratura (trasmissione numerica QAM).
function [seq_ric,decisione]=qam(L,sequenza,SNR),
% trasmissione QAM a L livelli.
% ----------------------------% [sequenzaricevuta,decisore]=qam(Livelli,sequenzatrasmessa,d/sigma),
% ----------------------------L=floor(sqrt(L));
noise
=( randn(size(sequenza))+i*randn(size(sequenza))
)/SNR*sqrt(2);
seq_ric =(sequenza-(L-1)*(1+i)/2)*sqrt(2)+noise;
decisione=zeros(size(sequenza));
Simboli=( repmat([0:L-1],L,1)-(L-1)/2+i*(repmat([0:L-1]',1,L)-(L1)/2) )*sqrt(2);
for k=1:length(sequenza),
[val,pos]=min(abs(seq_ric(k)-Simboli(:)));
decisione(k)=Simboli(pos)/sqrt(2)+(L-1)*(1+i)/2;
end,
return,
: Esercizio
Si vuole visualizzare la sequenza ricevuta, con una trasmissione QAM a M=L2 livelli, fissato il
rapporto (d/). Si stimi inoltre la probabilit di errore di ricezione di un simbolo. Si utilizzi come
sequenza trasmessa una sequenza casuale con i simboli (real,imag)=([0:L-1],[0:L-1]) equiprobabili.
8

% disegno della costellazione M-QAM


% --------------------------------L=4;
Len=10000;
colmap=hsv(L^2);
cols=zeros(size(colmap));
for k=1:2:L^2-1,
cols(k,:)=colmap(k,:);
cols(k+1,:)=colmap(L^2-k+1,:);
end,
sequenza=floor(rand(1,Len)*L)+i*floor(rand(1,Len)*L);
[seq_ric,decisione]=qam(L^2,sequenza,4);
figure,
hold on,
for k=0:L-1;
for h=0:L-1;
X=find(real(sequenza)==k & imag(sequenza)==h);
plot(real(seq_ric(X)),imag(seq_ric(X)),'Marker','.','LineStyle','none
','Color',cols(k*L+h+1,:));
end,
end,
plot((sequenza-(L-1)*(1+i)/2)*sqrt(2),'ko');
errori=length(find((decisione-sequenza)>1e-6));
title(['Simboli Errati [%]:',(num2str(errori/Len*100))]);