This shows you the differences between two versions of the page.
|
ps:laboratoare:02 [2019/09/17 06:51] darius.necula [Semnale şi sisteme de bază] |
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> | + | |