Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ps:laboratoare:04 [2019/10/20 17:43]
andrei.nicolicioiu
ps:laboratoare:04 [2020/10/07 18:26] (current)
ionut.gorgos
Line 52: Line 52:
 s(1:(T/2)) = A; s(1:(T/2)) = A;
 </​code>​ </​code>​
-  - Calculați coeficienții Fourier $c_{k}$ pentru $k=[-500:500]$. Plotați amplitudinile $|c_k|^2$ ca funcție de $k$. [1p] +  - Calculați coeficienții Fourier $c_{k}$ pentru $k=[0:500]$. Plotați amplitudinile $|c_k|^2$ ca funcție de $k$. [1p] 
-  - Calculam $\text{rms}(\epsilon_{K})$ pentru fiecare $K \in \{1, \ldots, 500\}$. Vedeți explicația de mai jos pentru a putea calcula RMS folosind Teorema lui Parseval. Plotați valoarea rms pentru $K \in \{1, \ldots, 500\}$.[3p] +  - Calculam $\text{rms}(\epsilon_{K})$ pentru fiecare $K \in \{1, \ldots, 500\}$. Vedeți explicația de mai jos pentru a putea calcula RMS folosind Teorema lui Parseval. Plotați ​(cu plot, semilogy și loglog) ​valoarea rms pentru $K \in \{1, \ldots, 500\}$.[3p] 
-  - Determinați cel mai mic $K$ astfel încât $\text{rms}(\epsilon_{K}) < 0.025$ și reconstruiți semnalul original folosind acest număr de coeficienți. Trebuie să folosiți atât coeficienții pozitivi cât și negativi (de ex. de la -K la K) pentru a reconstrui semnalul. Reprezentați grafic semnalul reconstruit și comparați-l cu semnalul inițial. [1p]  ​+  - Determinați cel mai mic $K$ astfel încât $\text{rms}(\epsilon_{K}) < 0.05$ și reconstruiți semnalul original folosind acest număr de coeficienți. Trebuie să folosiți atât coeficienții pozitivi cât și negativi (de ex. de la -K la K) pentru a reconstrui semnalul. Reprezentați grafic semnalul reconstruit și comparați-l cu semnalul inițial. [1p]  ​
  
 <​note>​ Semnalele reale au următoarea proprietate:​ coeficienții Fourier negativi sunt conjugații complexi ai celor pozitivi $c_{-k} = c_{k}^*$. De asemenea, semnalele impare s(-t) = -s(t), au coeficienți complet imaginari, obținând $c_{-k} = -c_{k}$ </​note>​ <​note>​ Semnalele reale au următoarea proprietate:​ coeficienții Fourier negativi sunt conjugații complexi ai celor pozitivi $c_{-k} = c_{k}^*$. De asemenea, semnalele impare s(-t) = -s(t), au coeficienți complet imaginari, obținând $c_{-k} = -c_{k}$ </​note>​
Line 68: Line 68:
   - scădeți pătratele termenilor de la $c_k, k \in \{-K...K\}$ obținând suma termenilor necesari pentru calcularea rms.   - scădeți pătratele termenilor de la $c_k, k \in \{-K...K\}$ obținând suma termenilor necesari pentru calcularea rms.
  </​note>​  </​note>​
-<​hidden>​ 
-<note tip> 
-O posibilă soluție: 
-<code matlab ex1.m> 
-A = 1; 
-T = 100; 
-x = 1:T; 
-s = -A*ones(1, T); 
-s(1:(T/2)) = A; 
- 
-h = figure; 
-plot(x,s); 
-ylabel('​Amplitude'​);​ 
-xlabel('​Time'​);​ 
-ylim([-A-0.5,​ A+0.5]); 
-title('​Original signal s(t)'​);​ 
-print(h, '​-dpng',​ '​original_signal.png'​);​ 
- 
-% Compute some of the Fourier coefficients 
-cmax = 21; 
-kv = -cmax:cmax; 
-N = length(kv); 
-coef = zeros(N,1); 
-for i=1:N 
-    k = kv(i); 
-    if mod(k,2) ~= 0 
-        coef(i) = (2*A) / (j*pi*k); 
-    end 
-end 
- 
-% Plot power of coefficients 
-h = figure; 
-csquare = coef.*coef; 
-stem(kv,​abs(csquare));​ 
-xlabel('​Frequency component (k)'); 
-ylabel('​Magnitude of component'​);​ 
-title('​Fourier coefficients squared'​);​ 
-print(h, '​-dpng',​ '​squared_coefficients.png'​);​ 
- 
-% Plot rms of error signal 
-cmax = 1000; 
-kv = 0:cmax; 
-N = length(kv); 
-coef = zeros(N,1); 
-for i=1:N 
-    k = kv(i); 
-    if mod(k,2) ~= 0 
-        coef(i) = (2*A) / (j*pi*k); 
-    end 
-end 
- 
-kmax = 500; 
-rmse = zeros(kmax, 1); 
-for i=1:kmax 
-    ss = coef(i:​end)'​*coef(i:​end);​ 
-    rmse(i) = sqrt(2*ss); 
-end 
- 
-h=figure; 
-plot(0:​(kmax-1),​ rmse); % Look with plot, semilogy and loglog 
-title('​RMS of e_k'); 
-ylabel('​RMS(e_k)'​);​ 
-xlabel('​K'​);​ 
-grid on; 
-print(h, '​-dpng',​ '​rms_ek.png'​);​ 
- 
-% Reconstruct signal with only some of the components 
-% Note: need to use both positive and negative k's 
-% The fourier coeficients ​ c(-k) = conj(c(k)), for real signals 
-% As the original signal is odd, the fourier coeficient are completly imaginary 
-% so c(-k) = -c(k) 
- 
-fk = find(rmse < 0.03); 
-N = fk(1); 
-sr = zeros(1, T); 
-for t=1:T 
-    for i=1:N 
-        sr(t) = sr(t) + coef(i)*exp(j*2*pi*kv(i)*t/​T) ... 
-                      - coef(i)*exp(-j*2*pi*kv(i)*t/​T);​ 
-    end 
-end 
- 
-h=figure; 
-plot(1:T, sr); 
-ylim([-A-1, A+1]); 
-title('​Reconstructed signal s(t)'​);​ 
-ylabel('​Amplitude'​);​ 
-xlabel('​Time'​);​ 
-print(h, '​-dpng',​ '​reconstructed_signal.png'​);​ 
-</​code>​ 
-</​note>​ 
-</​hidden>​ 
- 
  
 === Exercițiul 2 - filtrare [4p] === === Exercițiul 2 - filtrare [4p] ===
Line 205: Line 112:
     - $f_c = 10/T$ (frecvența de cut-off mult mai mare decât frecvența fundamentală => filtrare slabă)     - $f_c = 10/T$ (frecvența de cut-off mult mai mare decât frecvența fundamentală => filtrare slabă)
   - Reconstruiți semnalul de output cu ajutorul seriei Fourier (folosind formula de la exercițiul 1) [1p]   - Reconstruiți semnalul de output cu ajutorul seriei Fourier (folosind formula de la exercițiul 1) [1p]
- 
-<​hidden>​ 
-<note tip> 
-Ideea este să folosiți seriile Fourier pentru a determina ieșirea filtrului linear. 
-<code matlab ex3.m> 
-A = 1; 
-D = 20; 
-T = 100; 
-x = 1:T; 
-s = zeros(1,T); 
-s(1:D) = A; 
- 
-h = figure; 
-plot(x,s); 
-ylabel('​Amplitude'​);​ 
-xlabel('​Time'​);​ 
-ylim([-A-0.5,​ A+0.5]); 
-title('​Original signal s(t)'​);​ 
-print(h, '​-dpng',​ '​pulse_signal.png'​);​ 
- 
-% Compute some of the Fourier coefficients 
-cmax = 20; 
-kv = 0:cmax; 
-N = length(kv); 
-coef = zeros(N,1); 
-for i=1:N 
-    k = kv(i); 
-    coef(i) = (D/​T)*A*exp(-j*pi*k*D/​T)*sinc(k*D/​T);​ 
-end 
- 
-% Plot magnitude of pulse'​s coefficients 
-h = figure; 
-stem(kv, abs(coef)); 
-xlabel('​Frequency component (k)'); 
-ylabel('​Magnitude of component'​);​ 
-title('​Input Fourier coefficients'​);​ 
-hold on; 
-plot(kv, abs(coef), '​r--'​);​ 
-print(h, '​-dpng',​ '​coef_pulse.png'​);​ 
- 
-% Compute coefficients of output after lp filter 
-fcoef = zeros(N,1); 
-%fc = 0.1/T; 
-%fc = 1/T; 
-fc = 10/T; 
-RC = 1/​(2*pi*fc);​ 
-for i=1:N 
-    k = kv(i); 
-    fcoef(i) = coef(i) / (1+j*2*pi*RC*k/​T);​ 
-end 
- 
-% Plot magnitude of output'​s coefficients 
-h = figure; 
-stem(kv, abs(fcoef));​ 
-xlabel('​Frequency component (k)'); 
-ylabel('​Magnitude of component'​);​ 
-title('​Output Fourier coefficients'​);​ 
-hold on; 
-plot(kv, abs(fcoef), '​r--'​);​ 
-print(h, '​-dpng',​ '​coef_out.png'​);​ 
- 
-%Construct output signal with the computed coefficients 
-sr = zeros(1, T); 
-for t=1:T 
-    for i=1:N 
-        if kv(i) ~= 0 
-            sr(t) = sr(t) + fcoef(i)*exp(j*2*pi*kv(i)*t/​T) ... 
-                    + conj(fcoef(i))*exp(-j*2*pi*kv(i)*t/​T);​ 
-        else 
-            sr(t) = sr(t) + fcoef(i)*exp(j*2*pi*kv(i)*t/​T);​ 
-        end 
-    end 
-end 
- 
-h=figure; 
-plot(1:T, sr); 
-ylim([-A, A]); 
-title('​Output filtered signal s(t)'​);​ 
-ylabel('​Amplitude'​);​ 
-xlabel('​Time'​);​ 
-print(h, '​-dpng',​ '​output_signal.png'​);​ 
-</​code>​ 
-<​note>​ 
-If time allows and some of the students are interested, it would be nice to make a SPICE simulation 
-(e.g. on ngspice.com) with a pulse signal and an RC low-pass filter to check that the output 
-of the simulation is similar to what we did in MATLAB. 
- 
-Here is an example of what to write in ngspice to get the "shark teeth" (for fc=ft): 
-<​code>​ 
-*RC Filter Transient example 
-  
-V1 in 0 PULSE(0 1 1ns 1ns 1ns 40us 200us) 
-R1 in out 3.2k 
-C1 out 0 10n 
-  
-.TRAN 10n 1m 
-.end 
-</​code>​ 
-Change the capacitor value to modify the effect of the filter (smaller values mean a weaker filtering, while larger values mean a stronger filtering). 
-</​note>​ 
- 
-</​note>​ 
-</​hidden>​ 
- 
  
 === Exercițiul 3 - comunicație digitală [Bonus] === === Exercițiul 3 - comunicație digitală [Bonus] ===
Line 325: Line 128:
 Notă: pentru a genera o secvență random de valori întregi inspectați funcția '​randi'​ din MATLAB. Notă: pentru a genera o secvență random de valori întregi inspectați funcția '​randi'​ din MATLAB.
  
-<​hidden>​ 
-<note tip> 
-Posibila solutie: 
-<code matlab> 
-%% Frquency modulation using two frequencies 
-close all; 
-k1 = 1; 
-k2 = 2; 
-T = 1; 
-f1 = k1/T; 
-f2 = k2/T; 
-t = 0:T/100:T; 
-s1 = sin(2*pi*f1*t);​ 
-s2 = sin(2*pi*f2*t);​ 
-values = randi([0 3], 1, 10); 
-nv = length(values);​ 
-s = []; 
-for i=1:nv 
-    si = zeros(1,​length(s1));​ 
-    if mod(values(i),​ 2) == 1 
-        si = si + s1; 
-    end 
-    if values(i) > 1 
-        si = si + s2; 
-    end 
-    s = [s, si]; 
-end 
-tt = length(s); 
-x = ((1:tt) - 1) * nv / tt; 
-h1 = figure; 
-plot(x, s); 
-grid on; 
-xlabel('​Time (s)'); 
-ylabel('​Amplitude'​);​ 
-title('​Frequency modulated signal'​);​ 
-print(h1, '​-dpng',​ '​freqmod.png'​);​ 
-fprintf('​The transmitted values are:​\n'​);​ 
-values 
-</​code>​ 
-</​note>​ 
-</​hidden>​ 
  
 /​*</​hidden>​*/​ /​*</​hidden>​*/​
ps/laboratoare/04.1571582636.txt.gz · Last modified: 2019/10/20 17:43 by andrei.nicolicioiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0