Table of Contents

Laboratorul 05.

Semnale digitale - procesarea simplă, eşantionarea și recuperarea semnalului

Prezentarea PowerPoint pentru acest laborator poate fi găsită aici: aici

În acest laborator vom începe să experimentăm efectele semnalelor eşantionate şi procesarea semnalelor digitale.

Materiale ajutătoare:

  1. Secţiunile 5.1-5.3

Exerciţiul 1 -- Procesarea simplă

[4p]

Vom încerca să implementăm un sistem de procesare digitală simplă, care funcţionează după cum urmează:

Urmăriţi aceşti paşi:

  1. Creaţi câteva secvenţe digitale care reprezintă sinusoide de diferite frecvenţe (1, 2, 10, 20, 100 Hz), la aceeaşi frecvenţă de eşantionare (folosiţi acelaşi număr de eşantioane, e.g. $N=128$). [1p]
  2. Implementaţi sistemul de procesare menţionat mai sus. [1p]
  3. Creaţi secvenţele corespunzătoare de ieşire. [1p]
  4. Plotaţi toate secvenţele de intrare/ieşire. [1p]
  5. Ce fel de sistem de procesare este acesta ?
  6. Cum ați putea implementa sistemul de procesare menționat mai sus, folosind funcția 'filter'? (opțional)

Pentru fiecare eşantion de intrare ($x(n)$) trebuie să produceţi o valoare de ieşire ($y(n)$). Pentru primele patru eşantioane nu aveţi suficiente valori de intrare diferite de zero, şi pentru simplitate ori setaţi ieşirea pe zero, ori faceţi media dintre 1, 2, 3, 4 eşantioane, în timp ce consideraţi ca celelalte să fie zero. Dar de la al 5-lea eşantion veţi avea câte 5 eşantioane la îndemână (actualul $x(n)$ şi anterioarele patru eşantioane).

Pentru crearea timpilor de eșantionare puteți folosi 0:perioada_esantionare:timp_maxim sau funcția linspace(0,timp_maxim,numar_esantioane)

Exercițiul 2 -- Subeşantionare (Bandpass sampling)

[3p]

În acest exercițiu vom experimenta subeșantionarea, metodă care reduce frecvența de eșantionare necesară pentru a obține întreg spectru al semnalului.

Un semnal real (un cosinus sau o sinusoidă) cu o frecvență purtătoare (centrată) la 3kHz este eşantionată la 8 kHz. Lăţimea de bandă a semnalului este 1 kHz, cum puteţi vedea mai jos:

Task-uri/întrebări:

  1. Generați semnalul $signal = cos(2 \cdot \pi \cdot f_c \cdot t)$, unde $f_c = 3000$ Hz, $t=0:T_s:100 \cdot T_s$ și $T_s = \frac{1}{f_s} = \frac{1}{8000}$
  2. De ce avem energie în ambele frecvenţe $f_c$ şi $-f_c$ ?
  3. Folosiţi Matlab pentru a calcula transformata Fourier Discretă a unei sinusoide de $3kHz$ eşantionată la $8kHz$. Folosiți $N=64$ pentru fft. Folosiți acest cod pentru DFT: [1p]
    figure;
    fx = zeros(1, N);
    fidx = (fs/N) * linspace(0,N-1,N);
    spectrum = fft(signal, N);
    stem(fidx, abs(spectrum));
    xlabel('Frequency (Hz)');
    ylabel('Amplitude');
    title('Spectrum of signal');
  4. Plotaţi (cu 'stem') rezultatele şi observaţi frecvenţele. Acum folosiţi “fftshift” pe rezultatul obţinut de la “fft” şi plotaţi din nou rezultatele. Folosiți acest cod: [1p]
    figure;
    fidx = (fs/N)*linspace(-N/2, N/2-1, N);
    stem(fidx, abs(fftshift(spectrum)));
    xlabel('Frequency (Hz)');
    ylabel('Amplitude');
    title('Zero-centred frequency spectrum of signal');
  5. De ce într-un caz avem semnal la $3 kHz$ şi $5 kHz$ în timp ce, în celălalt caz pare să avem la $-3 kHz$ şi $3 kHz$ ?
  6. Care este semnificaţia semnalului de $5 kHz$ ? Când plotaţi rezultatele de la “fft” luaţi în considerare că, în mod implicit output-ul transformatei Discrete Fourier, deci şi “fft”, arată frecvenţele de la $0$ la $f_s$ (frecvenţa de eşantionare).
  7. Putem să reducem frecvenţa de eşantionare în timp ce încă detectăm spectrul dorit de frecvenţe ? (vedeţi bandpass sampling Fig 2-7). Cât de mult putem reduce frecvenţa de eşantionare? Ce se întâmplă dacă reducem frecvenţa de eşantionare sub 2B? [1p]

Exercițiul 3 -- Reconstruire de semnal

[3p]

Pentru reconstruirea unui semnal ideea este: - dacă se face sampling pe un semnal cu $f_s > 2 \cdot W$ (unde $W$ este frecvenţa maximă a semnalului, i.e. respectiv Nyquist), atunci puteţi să reconstruiţi din semnalul digital semnalul analog (exceptând o eroare de cuantizare) pe baza unui low pass filter (cu un sinc).

Vom simula un semnal sinus analog, pe care îl vom eșantiona, apoi îl vom reconstrui. Pentru asta ar trebui să faceţi următorii paşi:

Pentru a face convoluție cu un semnal sinc, folosiți codul următor:

N_sinc = N_analog;
t_sinc = linspace(-0.2, 0.2, N_sinc/10);
sincvec = sinc(f_s*t_sinc);
s_cont_filtered = conv(s_cont, sincvec);

,unde $f_s = 10$.

Pentru semnalele continue (analogice), puteți folosi pentru afișare plot, iar pentru cele digitale (eșantionate), stem.