This shows you the differences between two versions of the page.
ps:laboratoare:02 [2018/10/08 01:27] andrei.nicolicioiu |
ps:laboratoare:02 [2020/10/07 18:22] (current) ionut.gorgos |
||
---|---|---|---|
Line 14: | Line 14: | ||
- Care este cel mai mic interval de transmisie care are sens să fie folosit cu frecvenţele de mai sus? Cu alte cuvinte, cât ar trebui să fie T astfel încât semnalul să aibă un număr întreg de cicluri? [1p] | - Care este cel mai mic interval de transmisie care are sens să fie folosit cu frecvenţele de mai sus? Cu alte cuvinte, cât ar trebui să fie T astfel încât semnalul să aibă un număr întreg de cicluri? [1p] | ||
- Afişaţi cu ajutorul Matlab semnalul produs de modem pe parcursul mai multor intervale de transmisie consecutive. Aşa cum am învăţat în laboratorul trecut adăugaţi titlu şi etichete plotului. [1p] | - Afişaţi cu ajutorul Matlab semnalul produs de modem pe parcursul mai multor intervale de transmisie consecutive. Aşa cum am învăţat în laboratorul trecut adăugaţi titlu şi etichete plotului. [1p] | ||
- | |||
- | <hidden> | ||
- | <note tip> | ||
- | Prima frecvenţă este de 1600 = 8 * 200 Hz, iar a doua de 1800 = 9 * 200 Hz. Este clar că amândouă sunt multiple de 200 Hz. Astfel, dacă folosim o frecvenţă de 200 Hz ( T = 1/200 s ), primul semnal va cicla de 8 ori, iar al doilea de 9 ori. De aceea avem nevoie de o perioadă minimă de T = 1/200. | ||
- | |||
- | Un posibil cod de afişare a semnalului: | ||
- | |||
- | <code matlab 'sinewaves.m'> | ||
- | %% Sinewaves | ||
- | close all; | ||
- | f1 = 1800; | ||
- | f2 = 1600; | ||
- | fm = 200; | ||
- | tm = 1/fm; | ||
- | x = 0:tm/100:tm; | ||
- | s1 = sin(2*pi*f1*x); | ||
- | s2 = sin(2*pi*f2*x); | ||
- | h1 = figure; | ||
- | plot(x, [s1; s2]); | ||
- | xlabel('Time (s)'); | ||
- | ylabel('Amplitude'); | ||
- | title('Two sinewaves'); | ||
- | legend('1800 Hz', '1600 Hz'); | ||
- | print(h1, '-dpng', 'sines.png'); | ||
- | </code> | ||
- | </note> | ||
- | </hidden> | ||
=== Exerciţiul 2 [2.5p] === | === Exerciţiul 2 [2.5p] === | ||
Line 107: | Line 80: | ||
{{:ps:laboratoare:combined_signals.png?600|}} | {{:ps:laboratoare:combined_signals.png?600|}} | ||
- | <hidden> | ||
- | <note tip> | ||
- | Acesta este codul pentru funcţia 'unit step': | ||
- | |||
- | <code matlab ustep.m> | ||
- | function y=ustep(N) | ||
- | %RAMP Returns a step signal of a given number of smaples | ||
- | % [y] = USTEP(N) | ||
- | % returns the step signal for the given samples | ||
- | |||
- | y = ones(1, N); | ||
- | </code> | ||
- | |||
- | Pentru a combina ploturile puteţi folosi următorul cod: | ||
- | <code matlab signal_composition.m> | ||
- | N = 200; | ||
- | T = 100; | ||
- | y1 = ramp(N); | ||
- | y2 = [zeros(1,T), -y1(1:N-T)]; | ||
- | y3 = ustep(N); | ||
- | y3 = [zeros(1,T), -T*y3(1:N-T)]; | ||
- | ys = y1+y2+y3; | ||
- | x = 1:N; | ||
- | s1 = y1(x); | ||
- | s2 = y2(x); | ||
- | s3 = y3(x); | ||
- | ss = s1+s2+s3; | ||
- | h = figure; | ||
- | plot(x, ss, 'k-', 'LineWidth', 3); | ||
- | hold on; | ||
- | plot(x, s1, 'g-', 'LineWidth', 2); | ||
- | plot(x, s2, 'b-', 'LineWidth', 2); | ||
- | plot(x, s3, 'r-', 'LineWidth', 2); | ||
- | legend('sum', 'r(t)', '-r(t-T)', '-u(t-T)'); | ||
- | print(h1, '-dpng', 'combined_signals.png'); | ||
- | </code> | ||
- | </note> | ||
- | </hidden> | ||
=== Exerciţiul 3 [1p] === | === Exerciţiul 3 [1p] === | ||
Line 173: | Line 108: | ||
* Afisaţi secvenţa rezultată în imaginar folosid real(ss) ca valori x şi imag(ss) ca valori y | * Afisaţi secvenţa rezultată în imaginar folosid real(ss) ca valori x şi imag(ss) ca valori y | ||
* Verificaţi dacă s1, s2 şi ss arată cum v-aţi fi aşteptat! | * Verificaţi dacă s1, s2 şi ss arată cum v-aţi fi aşteptat! | ||
- | |||
- | <hidden> | ||
- | <note tip> | ||
- | Acesta este un posibil cod: | ||
- | <code matlab complex_exp.m> | ||
- | t = 0:0.1:2*pi; | ||
- | figure; | ||
- | plot(exp(1i*t), 'k.'); | ||
- | hold on; | ||
- | plot(0, 0, 'kx'); | ||
- | t = [0, pi/6, pi/4, pi/3, pi/2]; | ||
- | plot(exp(1i*t), 'ro'); | ||
- | plot(exp(-1i*t), 'bo'); | ||
- | ss = (exp(1i*t)+exp(-1i*t))/2; | ||
- | plot(real(ss), imag(ss), 'go'); | ||
- | legend('circle', 'origin', 'e^jt', 'e^-jt', '(e^jt + e-jt)/2'); | ||
- | </code> | ||
- | </note> | ||
- | </hidden> | ||
=== Exerciţiul 4 [1.5p] === | === Exerciţiul 4 [1.5p] === | ||
Line 202: | Line 118: | ||
* Adunaţi cele 2 semnale. | * Adunaţi cele 2 semnale. | ||
* Ascultaţi semnalul original şi pe cel rezultat pentru a auzi diferenţa. Pentru a asculta semnalele folosiţi funcţia 'sound'. | * Ascultaţi semnalul original şi pe cel rezultat pentru a auzi diferenţa. Pentru a asculta semnalele folosiţi funcţia 'sound'. | ||
- | |||
- | <hidden> | ||
- | Atentie: modificare de ultim moment: 0.1 secunde, adica 800 in loc de 500 esantioane | ||
- | <note tip> | ||
- | Acesta este un exemplu de rezolvare: | ||
- | <code matlab ecou.m> | ||
- | load('voice.mat'); | ||
- | sound(y); | ||
- | pause(3); | ||
- | plot(y); | ||
- | l = length(y); | ||
- | d = 0.1 * 8000; | ||
- | y2 = zeros(length(y), 1); | ||
- | y2(d+1:end,1) = y(1:l-d); | ||
- | y3 = y + y2; | ||
- | sound(y3, 8000); | ||
- | figure; | ||
- | plot(1:l, [y';y2';y3']); | ||
- | </code> | ||
- | </note> | ||
- | </hidden> | ||
=== Exerciţiul 5 [3p] === | === Exerciţiul 5 [3p] === | ||
Line 256: | Line 151: | ||
Rulaţi sistemul de N = 20 ori şi afişaţi outputul sistemului. | Rulaţi sistemul de N = 20 ori şi afişaţi outputul sistemului. | ||
- | + | /* </hidden> */ | |
- | <hidden> | + | |
- | <note tip> | + | |
- | Un exemplu de soluţie: | + | |
- | <code matlab sys1.m> | + | |
- | function y=sys1(speed, e) | + | |
- | %SYS1 Simulates a signal system | + | |
- | % [y] = SYS1(speed, e) | + | |
- | % returns the current state (speed) after applying the input e | + | |
- | + | ||
- | if abs(e) > 10 | + | |
- | k = 5; | + | |
- | else | + | |
- | k = 1; | + | |
- | end | + | |
- | if e > 0 | + | |
- | y = speed + k; | + | |
- | elseif e < 0 | + | |
- | y = speed - k; | + | |
- | else | + | |
- | y = speed; | + | |
- | end | + | |
- | </code> | + | |
- | + | ||
- | <code matlab cruise_control.m> | + | |
- | % Simulate a cruise control system | + | |
- | N = 20; | + | |
- | y = zeros(1, N); | + | |
- | f = zeros(1, N); | + | |
- | e = zeros(1, N); | + | |
- | x = 60*ones(1,N); | + | |
- | + | ||
- | y(1) = 7; % Initial speed | + | |
- | for i=1:N-1 | + | |
- | e(i) = x(i)-f(i); | + | |
- | y(i+1) = sys1(y(i), e(i)); | + | |
- | f(i+1) = y(i+1); | + | |
- | end | + | |
- | + | ||
- | figure; | + | |
- | plot(1:N, e, 'r'); | + | |
- | hold on; | + | |
- | plot(1:N, y, 'g'); | + | |
- | legend('e', 'y'); | + | |
- | </code> | + | |
- | </note> | + | |
- | + | ||
- | </hidden> | + |