Differences

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

Link to this comparison view

ps:laboratoare:08 [2019/11/16 19:01]
ionut.gorgos
ps:laboratoare:08 [2020/10/07 18:31] (current)
ionut.gorgos
Line 23: Line 23:
   - Pentru a vedea mai bine efectul de leakage trebuie să creștem numărul de eșantioane folosite pentru DFT. Pentru asta adăugați zerouri semnalului vostru. De exemplu adăugati 56 de zerouri ca să obțineți un total de $K=64$ eșantioane (din care doar $N=8$ sunt diferite de 0). Apoi calculați DFT pentru acest semnal. Ar trebui să vedeti forma sinc-ului mult mai clară și de asemenea că e centrată în jurul frecvenței semnalului (2.5kHZ).   - Pentru a vedea mai bine efectul de leakage trebuie să creștem numărul de eșantioane folosite pentru DFT. Pentru asta adăugați zerouri semnalului vostru. De exemplu adăugati 56 de zerouri ca să obțineți un total de $K=64$ eșantioane (din care doar $N=8$ sunt diferite de 0). Apoi calculați DFT pentru acest semnal. Ar trebui să vedeti forma sinc-ului mult mai clară și de asemenea că e centrată în jurul frecvenței semnalului (2.5kHZ).
   - Acum schimbati din nou frecvența la $f2=2000$ Hz, dar folosind în continuare zero-padding și plotați DFT. Ar trebui să vedeți că într-adevăr sinc-ul era acolo, dar eșantioanele de la $1000, 3000, 4000 \ldots$ erau 0.   - Acum schimbati din nou frecvența la $f2=2000$ Hz, dar folosind în continuare zero-padding și plotați DFT. Ar trebui să vedeți că într-adevăr sinc-ul era acolo, dar eșantioanele de la $1000, 3000, 4000 \ldots$ erau 0.
- 
-<​hidden>​ 
-<​note>​ 
-Solution without zero-padding:​ 
-<code matlab lab7_sinewaves.m>​ 
-close all; 
-clear; 
-fs = 8000; 
-f1 = 0000; 
-f2 = 2500; 
-A1 = 1; 
-A2 = 0.5; 
-N = 8; 
- 
-t = 0:(N-1); 
-s1 = A1*sin(2*pi*(f1/​fs)*t);​ 
-s2 = A2*sin(2*pi*(f2/​fs)*t);​ 
-s = s1 + s2; 
- 
-%% Plot signals 
-h = figure; 
-plot(t, s1, '​r--'​);​ 
-hold on; 
-plot(t, s2, '​b-.'​);​ 
-plot(t, s, '​k-'​);​ 
-xlabel('​Sample index'​);​ 
-ylabel('​Amplitude'​);​ 
-title('​Two sinewaves'​);​ 
-legend('​s1',​ '​s2',​ 's1 + s2'); 
-print(h, '​-dpng',​ '​lab7_sinewaves_c.png'​);​ 
- 
- 
-%% Compute/​plot fft 
-ffs = fft(s); 
-fidx = (fs/​N)*linspace(0,​ N-1, N); 
-h = figure; 
-stem(fidx, abs(ffs)); 
-title('​FFT of signal'​);​ 
-xlabel('​DFT frequency index'​);​ 
-print(h, '​-dpng',​ '​lab7_sinewaves_c_fft.png'​);​ 
-</​code>​ 
- 
-Code with zero-padding:​ 
-<code matlab sinewaves_zeropad.m>​ 
-close all; 
-clear; 
-fs = 8000; 
-f1 = 0; 
-f2 = 2000; 
-A1 = 1; 
-A2 = 0.5; 
-N = 8; 
-Z = 64; 
- 
-t = 0:(N-1); 
-tt = 0:(Z-1); 
-s1 = A1*sin(2*pi*(f1/​fs)*t);​ 
-s2 = A2*sin(2*pi*(f2/​fs)*t);​ 
- 
-%% Zero-pad the signals 
-s1 = [s1, zeros(1, Z-N)]; 
-s2 = [s2, zeros(1, Z-N)]; 
-s = s1 + s2; 
- 
- 
-%% Plot signals 
-h = figure; 
-plot(tt, s1, '​r--'​);​ 
-hold on; 
-plot(tt, s2, '​b-.'​);​ 
-plot(tt, s, '​k-'​);​ 
-xlabel('​Sample index'​);​ 
-ylabel('​Amplitude'​);​ 
-title('​Two sinewaves'​);​ 
-legend('​s1',​ '​s2',​ 's1 + s2'); 
-print(h, '​-dpng',​ '​lab7_sinewaves_zeropad_b.png'​);​ 
- 
-%% Compute/​plot fft 
-ffs = fft(s); 
-fidx = (fs/​Z)*linspace(0,​ Z-1, Z); 
-h = figure; 
-stem(fidx, abs(ffs)); 
-title('​FFT of signal'​);​ 
-xlabel('​DFT frequency index'​);​ 
-print(h, '​-dpng',​ '​lab7_sinewaves_zeropad_fft_b.png'​);​ 
-</​code>​ 
-</​note>​ 
-</​hidden>​ 
- 
  
 === Exercițiul 2 -- DFT leakage și ferestre [5p] === === Exercițiul 2 -- DFT leakage și ferestre [5p] ===
Line 128: Line 39:
 {{:​ps:​laboratoare:​lab08_notes_signal_window.png?​300|}} ​ {{:​ps:​laboratoare:​lab08_notes_signal_window.png?​300|}} ​
  
- 
-<​hidden>​ 
-<​note>​ 
-O posibilă soluție: 
-<code matlab notes_signal_short.m>​ 
-clear; 
-close all; 
-gen_signal = 0; 
- 
-%% Generate or load the 2-note signal 
-if gen_signal 
-    %% Generate the 2-note signal ​   ​ 
-    fs = 1000; 
-    N = 64; 
-    x = 0:(N-1); 
-    f1 = 392; % (G4 - Sol major) 
-    A1 = 10; 
-    f2 = 440; % (A4 - La major) 
-    A2 = 1; 
-    s = zeros(1, N); 
-    s1 = A1*sin(2*pi*f1/​fs*x);​ 
-    s2 = A2*sin(2*pi*f2/​fs*x);​ 
-    notes_signal = s1+s2; 
-    save('​notes_signal.mat',​ '​notes_signal',​ '​fs'​);​ 
-else 
-    %% Load signal 
-    fname = '​notes_signal.mat';​ 
-    load(fname);​ 
-end 
- 
-%% Plot signal 
-N = length(notes_signal);​ 
-t = (N/​fs)*linspace(0,​ 1, N); 
-h = figure; 
-plot(t, notes_signal);​ 
-title('​Original signal'​);​ 
-xlabel('​Time (s)'); 
-ylabel('​Amplitude'​);​ 
-print(h, '​-dpng',​ '​notes_signal.png'​);​ 
- 
-%% Plot fft of the signal 
-ys = fft(notes_signal);​ 
-fidx = linspace(0,​fs/​2-1,​N/​2);​ 
-h = figure; 
-stem(fidx, abs(ys(1:​N/​2)));​ 
-xlabel('​Frequency (Hz)'​);​ 
-title('​Frequency spectrum of notes signal'​);​ 
-print(h, '​-dpng',​ '​notes_signal_fftpos.png'​);​ 
- 
-% %% Try zero-padding 
-% Z = 128; 
-% s_zeropadding = zeros(1, Z); 
-% s_zeropadding(1:​N) = notes_signal;​ 
- 
-% %% Plot fft after zero-padding 
-% ys = fft(s_zeropadding);​ 
-% fidx = linspace(0,​fs/​2-1,​N/​2);​ 
-% h = figure; 
-% stem(fidx, abs(ys(1:​N/​2)));​ 
-% xlabel('​Frequency (Hz)'​);​ 
-% title('​Frequency spectrum of notes signal with zero-padding'​);​ 
-% print(h, '​-dpng',​ '​notes_signal_zp_fftpos.png'​);​ 
- 
-%% Try to use a window to limit the sinc's effect 
-w1 = hanning(N); 
-w1 = w1(:​)';​ 
-sw = notes_signal .* w1; 
- 
-%% Plot windowed signal 
-h = figure; 
-plot(t, sw); 
-title('​Windowed signal'​);​ 
-xlabel('​Time (s)'); 
-ylabel('​Amplitude'​);​ 
-print(h, '​-dpng',​ '​notes_signal_window.png'​);​ 
- 
-%% Plot fft after window 
-ys = fft(sw); 
-fidx = linspace(0,​fs/​2-1,​N/​2);​ 
-h = figure; 
-stem(fidx, abs(ys(1:​N/​2)));​ 
-xlabel('​Frequency (Hz)'​);​ 
-title('​Frequency spectrum of notes signal with window'​);​ 
-print(h, '​-dpng',​ '​notes_signal_window_fftpos.png'​);​ 
-</​code>​ 
-</​note>​ 
-</​hidden>​ 
  
 === Exercițiul 3 -- Tratarea DFT leakage prin creșterea numărului de eșantione [1p] === === Exercițiul 3 -- Tratarea DFT leakage prin creșterea numărului de eșantione [1p] ===
Line 226: Line 50:
   - Aplicați funcția fereastră și verificați spectrul. Ar trebui sa fie mult mai clar.   - Aplicați funcția fereastră și verificați spectrul. Ar trebui sa fie mult mai clar.
   - Ce note muzicale reprezintă aceste frecvențe? Puteți să redați acest sunet folosind funcția Matlab '​sound'​.   - Ce note muzicale reprezintă aceste frecvențe? Puteți să redați acest sunet folosind funcția Matlab '​sound'​.
- 
-<​hidden>​ 
-<​note>​ 
-O posibilă soluție: 
-<code matlab notes_signal_long.m>​ 
-clear; 
-close all; 
-gen_signal = 0; 
- 
-%% Generate or load the 2-note signal 
-if gen_signal 
-    %% Generate the 2-note signal ​   ​ 
-    fs = 1000; 
-    N = 1024; 
-    x = 0:(N-1); 
-    f1 = 392; % (G4 - Sol major) 
-    A1 = 10; 
-    f2 = 440; % (A4 - La major) 
-    A2 = 1; 
-    s = zeros(1, N); 
-    s1 = A1*sin(2*pi*f1/​fs*x);​ 
-    s2 = A2*sin(2*pi*f2/​fs*x);​ 
-    notes_signal = s1+s2; 
-    save('​notes_signal_long.mat',​ '​notes_signal',​ '​fs'​);​ 
-else 
-    %% Load signal 
-    fname = '​notes_signal_long.mat';​ 
-    load(fname);​ 
-end 
- 
-%% Plot signal 
-N = length(notes_signal);​ 
-t = (N/​fs)*linspace(0,​ 1, N); 
-h = figure; 
-plot(t, notes_signal);​ 
-title('​Original signal'​);​ 
-xlabel('​Time (s)'); 
-ylabel('​Amplitude'​);​ 
-print(h, '​-dpng',​ '​notes_signal.png'​);​ 
- 
-%% Plot fft of the signal 
-ys = fft(notes_signal);​ 
-fidx = linspace(0,​fs/​2-1,​N/​2);​ 
-h = figure; 
-stem(fidx, abs(ys(1:​N/​2)));​ 
-xlabel('​Frequency (Hz)'​);​ 
-title('​Frequency spectrum of notes signal'​);​ 
-print(h, '​-dpng',​ '​notes_signal_fftpos.png'​);​ 
- 
-%% Try to use a window to limit the sinc's effect 
-w1 = hanning(N); 
-w1 = w1(:​)';​ 
-sw = notes_signal .* w1; 
- 
-%% Plot windowed signal 
-h = figure; 
-plot(t, sw); 
-title('​Windowed signal'​);​ 
-xlabel('​Time (s)'); 
-ylabel('​Amplitude'​);​ 
-print(h, '​-dpng',​ '​notes_signal_window.png'​);​ 
- 
-%% Plot fft after window 
-ys = fft(sw); 
-fidx = linspace(0,​fs/​2-1,​N/​2);​ 
-h = figure; 
-stem(fidx, abs(ys(1:​N/​2)));​ 
-xlabel('​Frequency(Hz)'​);​ 
-title('​Frequency spectrum of notes signal with window'​);​ 
-print(h, '​-dpng',​ '​notes_signal_window_fftpos.png'​);​ 
-</​code>​ 
-</​note>​ 
-</​hidden>​ 
  
ps/laboratoare/08.1573923661.txt.gz · Last modified: 2019/11/16 19:01 by ionut.gorgos
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