Differences

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

Link to this comparison view

ps:laboratoare:11 [2018/12/08 21:15]
ionut.gorgos
ps:laboratoare:11 [2020/10/07 18:34] (current)
ionut.gorgos
Line 6: Line 6:
  
 Materiale utile: Materiale utile:
-  * Vedeți slide-urile din  R. Lyons [[http://​cs.curs.pub.ro/​2015/​pluginfile.php/​27567/​mod_resource/​content/​0/​iir_lyons_part1.pdf|aici]]+  * Vedeți slide-urile din  R. Lyons {{:​ps:​laboratoare:​iir_lyons_part1.pdf|aici}}
  
  
Line 18: Line 18:
  
 Câteva cazuri particulare:​ Câteva cazuri particulare:​
-  - $f_B = \frac{f_s}{4}$,​ în acest caz secvența cosinus devine [1, -0, -1, 0, 1, 0, -1, 0, ...]. Acesta este un tip de filtru eficient trece-bandă centrat în frecvența $f_s / 4$.+  - $f_B = \frac{f_s}{4}$,​ în acest caz secvența cosinus devine [0, -1, 0, 1, 0, -1, 0, ...]. Acesta este un tip de filtru eficient trece-bandă centrat în frecvența $f_s / 4$.
   - $f_B = \frac{f_s}{2}$,​ în acest caz secvența cosinus devine [1, -1, 1, -1, ...] și obținem un filtru trece-sus. ​   - $f_B = \frac{f_s}{2}$,​ în acest caz secvența cosinus devine [1, -1, 1, -1, ...] și obținem un filtru trece-sus. ​
  
Line 25: Line 25:
   - Din această secvență obțineți o secvență corespunzătoare unui filtru trece-bandă cu $f_B = \frac{f_s}{4}$.   - Din această secvență obțineți o secvență corespunzătoare unui filtru trece-bandă cu $f_B = \frac{f_s}{4}$.
   - Obțineți o secvență corespunzătoare unui filtru trece-sus cu $f_B = \frac{f_s}{2}$.   - Obțineți o secvență corespunzătoare unui filtru trece-sus cu $f_B = \frac{f_s}{2}$.
-  - Generați trei sinusoide cu frecvențe diferite (ex: $0.1 f_s$, $0.25 f_s$, $0.4 f_s$ și filtrați-le (folosind funcția //conv//) cu  filtrele trece-sus și trece-bandă obținute mai sus. Plotați atât input-ul cât și output-ul în același plot folosind //stem// pentru a observa efectele filtrelor.+  - Generați trei sinusoide cu frecvențe diferite (ex: $0.1 f_s$, $0.25 f_s$, $0.4 f_s$, unde $f_s = 64000și $N = 64$) și filtrați-le (folosind funcția //conv//) cu  filtrele trece-sus și trece-bandă obținute mai sus. Plotați atât input-ul cât și output-ul în același plot folosind //stem// pentru a observa efectele filtrelor.
  
-<​hidden>​ 
-<​note>​ 
-O soluție posibilă: 
-<code matlab bandpass_highpass.m>​ 
-clear; 
-close all; 
- 
-%% Generate an ideal-filter sequence (in freq domain) 
-N = 256; 
-kc = N/16; 
-HK = zeros(1, N); 
-HK(1:kc) = 1; 
-HK(end-kc+2:​end) = 1; 
-h = figure; 
-fx = linspace(0,​1,​N);​ 
-plot(fx, HK); 
-xlabel('​Frequency (x Fs)'); 
-title('​Ideal low-pass filter'​);​ 
-print(h, '​-dpng',​ '​ideal_filter.png'​);​ 
- 
-%% Obtain time-domain sequence 
-hk = ifftshift(ifft(HK));​ 
-figure; 
-plot(1:N, hk); 
-xlabel('​Index'​);​ 
-title('​Time-domain sequence of ideal low-pass filter'​);​ 
- 
-%% Generate windowed time-domain sequence 
-% window = rect 
-L = 65; 
-w = ones(1, L); 
-hw = hk(N/​2+1-floor(L/​2):​N/​2+1+floor(L/​2)) .* w; 
-h = figure; 
-plot(1:L, hw); 
-xlabel('​Sample index'​);​ 
-title('​Windowed filter sequence h(k) using rect(n)'​);​ 
- 
-%% Obtain frequency-domain of windowed sequence 
-HW = fft(hw); 
-figure; 
-fx = linspace(0,​1,​L);​ 
-plot(fx, abs(HW)); 
-xlabel('​Frequency (x Fs)'); 
-title('​FFT of the time-domain sequence with w(n)=rect(n)'​);​ 
- 
-%% Generate windowed time-domain sequence 
-% window = blackman 
-L = 65; 
-w = blackman(L)';​ 
-hw = hk(N/​2+1-floor(L/​2):​N/​2+1+floor(L/​2)) .* w; 
-h = figure; 
-plot(1:L, hw); 
-xlabel('​Sample index'​);​ 
-title('​Windowed filter sequence h(k) using blackman(n)'​);​ 
- 
-%% Obtain frequency-domain of windowed sequence 
-HW = fft(hw); 
-figure; 
-fx = linspace(0,​1,​L);​ 
-plot(fx, abs(HW)); 
-xlabel('​Frequency (x Fs)'); 
-title('​FFT of the time-domain sequence with w(n)=blackman(n)'​);​ 
- 
-%% Filter a sinewave using the low-pass filter 
-fs = 64000; 
-N = 64; 
-x = 0:(N-1); 
-f = 3000; 
-A = 1; 
-xn = A*sin(2*pi*f/​fs*x);​ 
-yn = conv(xn, hw); 
-h = figure; 
-stem(x, xn, '​b'​);​ 
-hold on; 
-stem(x, yn(1:N), '​r'​);​ 
-xlabel('​Sample index'​);​ 
-legend('​xn',​ '​yn'​);​ 
-title('​low-pass filtering using hw'); 
- 
-%% Obtain band-pass from low-pas filter 
-% Multiply with sequence cos(pi/2 * n) = 
-% [0, -1, 0, 1, 0, -1, ...] 
-hwb = hw; 
-hwb(1:​2:​end) = 0; 
-hwb(2:​4:​end) = -hwb(2:​4:​end);​ 
- 
-%% Obtain frequency-domain of band-pass sequence 
-HWB = fft(hwb); 
-figure; 
-fx = linspace(0,​1,​L);​ 
-plot(fx, abs(HWB)); 
-xlabel('​Frequency (x Fs)'); 
-title('​FFT of the time-domain band-pass sequence'​);​ 
- 
-%% Filter sinewaves using the band-pass filter 
-fs = 64000; 
-N = 64; 
-x = 0:(N-1); 
-f1 = 3000; 
-f2 = 15000; 
-f3 = 30000; 
-A = 1; 
-xn1 = A*sin(2*pi*f1/​fs*x);​ 
-xn2 = A*sin(2*pi*f2/​fs*x);​ 
-xn3 = A*sin(2*pi*f3/​fs*x);​ 
-yn1 = conv(xn1, hwb); 
-yn2 = conv(xn2, hwb); 
-yn3 = conv(xn3, hwb); 
-h = figure; 
-subplot(2,​1,​1);​ 
-stem(x, xn1, '​r'​);​ 
-hold on; 
-stem(x, xn2, '​g'​);​ 
-stem(x, xn3, '​b'​);​ 
-xlabel('​Sample index'​);​ 
-legend('​xn 3kHz', 'xn 15kHz',​ 'xn 30kHz'​);​ 
-title('​Input sinusoids of different frequencies'​);​ 
-subplot(2,​1,​2);​ 
-stem(x, yn1(1:N), '​r'​);​ 
-hold on; 
-stem(x, yn2(1:N), '​g'​);​ 
-stem(x, yn3(1:N), '​b'​);​ 
-xlabel('​Sample index'​);​ 
-legend('​yn 3kHz', 'yn 15kHz',​ 'yn 30kHz'​);​ 
-title('​Applying band-pass filtering'​);​ 
- 
-%% Obtain high-pass from low-pas filter 
-% Multiply with sequence cos(pi * n) = 
-% [1, -1, 1, -1, ...] 
-hwh = hw; 
-hwh(2:​2:​end) = -hwh(2:​2:​end);​ 
- 
-%% Obtain frequency-domain of high-pass sequence 
-HWH = fft(hwh); 
-figure; 
-fx = linspace(0,​1,​L);​ 
-plot(fx, abs(HWH)); 
-xlabel('​Frequency (x Fs)'); 
-title('​FFT of the time-domain high-pass sequence'​);​ 
- 
-%% Filter sinewaves using the high-pass filter 
-fs = 64000; 
-N = 64; 
-x = 0:(N-1); 
-f1 = 3000; 
-f2 = 15000; 
-f3 = 30000; 
-A = 1; 
-xn1 = A*sin(2*pi*f1/​fs*x);​ 
-xn2 = A*sin(2*pi*f2/​fs*x);​ 
-xn3 = A*sin(2*pi*f3/​fs*x);​ 
-yn1 = conv(xn1, hwh); 
-yn2 = conv(xn2, hwh); 
-yn3 = conv(xn3, hwh); 
-h = figure; 
-subplot(2,​1,​1);​ 
-stem(x, xn1, '​r'​);​ 
-hold on; 
-stem(x, xn2, '​g'​);​ 
-stem(x, xn3, '​b'​);​ 
-xlabel('​Sample index'​);​ 
-legend('​xn 3kHz', 'xn 15kHz',​ 'xn 30kHz'​);​ 
-title('​Input sinusoids of different frequencies'​);​ 
-subplot(2,​1,​2);​ 
-stem(x, yn1(1:N), '​r'​);​ 
-hold on; 
-stem(x, yn2(1:N), '​g'​);​ 
-stem(x, yn3(1:N), '​b'​);​ 
-xlabel('​Sample index'​);​ 
-legend('​yn 3kHz', 'yn 15kHz',​ 'yn 30kHz'​);​ 
-title('​Applying high-pass filtering'​);​ 
-</​code>​ 
-</​note>​ 
-</​hidden>​ 
 === Exercițiul 2 -- Proiectarea de FIR rapidă folosind MATLAB [2p] === === Exercițiul 2 -- Proiectarea de FIR rapidă folosind MATLAB [2p] ===
  
Line 213: Line 39:
  
 Pentru acest exercițiu, folosiți funcția //fir1// pentru a proiecta filtre FIR trece-jos, trece-bandă și trece-sus. Apoi folosiți funcția //filter// pentru a testa filtrele cu aceleași secvențe ca în exercițiul precedent. Puteți verifica designul filtrelor folosind tool-ul //fvtool//. Pentru acest exercițiu, folosiți funcția //fir1// pentru a proiecta filtre FIR trece-jos, trece-bandă și trece-sus. Apoi folosiți funcția //filter// pentru a testa filtrele cu aceleași secvențe ca în exercițiul precedent. Puteți verifica designul filtrelor folosind tool-ul //fvtool//.
- 
-<​hidden>​ 
-<​note>​ 
-O soluție posibilă:: 
-<code matlab fir_filter.m>​ 
-clear; 
-close all; 
- 
-%% Generate sinewaves 
-fs = 64000; 
-N = 64; 
-x = 0:(N-1); 
-f1 = 3000; 
-f2 = 15000; 
-f3 = 30000; 
-A = 1; 
-xn1 = A*sin(2*pi*f1/​fs*x);​ 
-xn2 = A*sin(2*pi*f2/​fs*x);​ 
-xn3 = A*sin(2*pi*f3/​fs*x);​ 
- 
-%% Design band-pass filter with fir 
-L = 64; 
-wn = [0.2, 0.4]; 
-b = fir1(L, wn); 
-figure; 
-fvtool(b,​1);​ 
- 
-%% Filter sequence with band-pass 
-yn1 = filter(b, 1, xn1); 
-yn2 = filter(b, 1, xn2); 
-yn3 = filter(b, 1, xn3); 
-h = figure; 
-subplot(2,​1,​1);​ 
-stem(x, xn1, '​r'​);​ 
-hold on; 
-stem(x, xn2, '​g'​);​ 
-stem(x, xn3, '​b'​);​ 
-xlabel('​Sample index'​);​ 
-legend('​xn 3kHz', 'xn 15kHz',​ 'xn 30kHz'​);​ 
-title('​Input sinusoids of different frequencies'​);​ 
-subplot(2,​1,​2);​ 
-stem(x, yn1(1:N), '​r'​);​ 
-hold on; 
-stem(x, yn2(1:N), '​g'​);​ 
-stem(x, yn3(1:N), '​b'​);​ 
-xlabel('​Sample index'​);​ 
-legend('​yn 3kHz', 'yn 15kHz',​ 'yn 30kHz'​);​ 
-title('​Applying band-pass filtering'​);​ 
- 
-%% Design high-pass filter with fir 
-L = 64; 
-wn = 0.75; 
-b = fir1(L, wn, '​high'​);​ 
-figure; 
-fvtool(b,​1);​ 
- 
-%% Filter sequence with band-pass 
-yn1 = filter(b, 1, xn1); 
-yn2 = filter(b, 1, xn2); 
-yn3 = filter(b, 1, xn3); 
-h = figure; 
-subplot(2,​1,​1);​ 
-stem(x, xn1, '​r'​);​ 
-hold on; 
-stem(x, xn2, '​g'​);​ 
-stem(x, xn3, '​b'​);​ 
-xlabel('​Sample index'​);​ 
-legend('​xn 3kHz', 'xn 15kHz',​ 'xn 30kHz'​);​ 
-title('​Input sinusoids of different frequencies'​);​ 
-subplot(2,​1,​2);​ 
-stem(x, yn1(1:N), '​r'​);​ 
-hold on; 
-stem(x, yn2(1:N), '​g'​);​ 
-stem(x, yn3(1:N), '​b'​);​ 
-xlabel('​Sample index'​);​ 
-legend('​yn 3kHz', 'yn 15kHz',​ 'yn 30kHz'​);​ 
-title('​Applying high-pass filtering'​);​ 
-</​code>​ 
-</​note>​ 
-</​hidden>​ 
  
 === Exercițiul 3 -- Proiectarea de IIR rapidă folosind MATLAB [2p] === === Exercițiul 3 -- Proiectarea de IIR rapidă folosind MATLAB [2p] ===
Line 320: Line 66:
   * Responsabil:​ [[ionutgorgos@gmail.com|Ionuț Gorgos]]   * Responsabil:​ [[ionutgorgos@gmail.com|Ionuț Gorgos]]
  
-  * Data publicării: ​12.11.2018+  * Data publicării: ​9.12.2019
  
ps/laboratoare/11.1544296552.txt.gz · Last modified: 2018/12/08 21:15 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