Jelek és rendszerek Gyakorlat_11
Pletl
A gyakorlat célja a fehér és a színes zaj bemutatása. 1.@. FFT begyakorlása n = [0:29]; % Harminc minta x = cos(2*pi*n/10); % 10 mintát veszünk periodusonként N1 = 64; % Három módon számoljuk az FFT-t N2 = 128; N3 = 256; X1 = abs(fft(x,N1)); X2 = abs(fft(x,N2)); X3 = abs(fft(x,N3)); F1 = [0 : N1 - 1]/N1; % A frekvencia normalizálása 0 tól 1 – 1/N ig. F2 = [0 : N2 - 1]/N2; F3 = [0 : N3 - 1]/N3; subplot(3,1,1) plot(F1,X1,'-x'),title('N = 64'),axis([0 1 0 20]) subplot(3,1,2) plot(F2,X2,'-x'),title('N = 128'),axis([0 1 0 20]) subplot(3,1,3) plot(F3,X3,'-x'),title('N = 256'),axis([0 1 0 20]) Ha kirajzoltatjuk a spektrumokat, akkor a következő eredményeket kapjuk: N = 64 20
15
10
5
0
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
0.6
0.7
0.8
0.9
1
0.6
0.7
0.8
0.9
1
N = 128 20
15
10
5
0
0
0.1
0.2
0.3
0.4
0.5
N = 256 20
15
10
5
0
0
0.1
0.2
0.3
0.4
0.5
Látható, hogy a frekvenciákat normalizáltuk 0 és 1 közé. A spektrumon két csúcs jelent meg a 0.1-nél és a 0.9-nél. Ez a cosinus jel frekvenciájának felel meg (1/10). A jelünk, aminek a spektrumát ábrázoltuk tehát tartalmaz harmonikus összetevőket. Gyakorlat_11
1
Jelek és rendszerek Gyakorlat_11
Pletl
Azt is látjuk, hogy függetlenül attól, hogy 64, 128, 256 mintát veszünk, frekvenciatartományban a spektrumok nagyon hasonlítanak. Nézzük, meg mi történik akkor, ha a frekvencia tartománybeli mintavételezések száma megegyezik az időtartománybeli mintavételezések számával, tehát a N=30. Ekkor a következőeket kell, megadjuk: n = [0:29]; x = cos(2*pi*n/10); % N = 32; X = abs(fft(x,N)); F = [0 : N - 1]/N; plot(F,X,'-x'),title('N = 30'),axis([0 1 0 20]); A kapott eredmény pedig a következő: N = 30 20 18 16 14 12 10 8 6 4 2 0
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
2.@. Vizsgáljunk meg különböző hosszúságú idősorokat n = [0:29]; x1 = cos(2*pi*n/10); % 3 periódus x2 = [x1 x1]; % 6 periódus x3 = [x1 x1 x1]; % 9 periódus N = 2048; X1 = abs(fft(x1,N)); X2 = abs(fft(x2,N)); X3 = abs(fft(x3,N)); F = [0:N-1]/N; subplot(3,1,1) plot(F,X1),title('3 periods'),axis([0 1 0 50]) subplot(3,1,2) plot(F,X2),title('6 periods'),axis([0 1 0 50]) Gyakorlat_11
2
Jelek és rendszerek Gyakorlat_11
Pletl
subplot(3,1,3) plot(F,X3),title('9 periods'),axis([0 1 0 50]) Ha kirajzoltatjuk a spektrumokat, akkor a következő eredményeket kapjuk: 3 periods 50
0
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
0.6
0.7
0.8
0.9
1
0.6
0.7
0.8
0.9
1
6 periods 50
0
0
0.1
0.2
0.3
0.4
0.5 9 periods
50
0
0
0.1
0.2
0.3
0.4
0.5
Nézzük meg azt is, hogy mi történik, ha 90 periódust tartalmaz a jel: x1 = cos(2*pi*n/10); % 3 periódus x2 = [x1 x1]; % 6 periódus x3 = [x1 x1 x1]; % 9 periódus x4 = [x3 x3 x3 x3 x3 x3 x3 x3 x3 x3]; % 90 periódus N = 2048; X = abs(fft(x4,N)); F = [0:N-1]/N; plot(F,X),title('90 periods'),axis([0 1 0 50]) Ekkor a következő eredményt kapjuk: 90 periods 50 45 40 35 30 25 20 15 10 5 0
Gyakorlat_11
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
3
Jelek és rendszerek Gyakorlat_11
Pletl
Itt lényegében különböző hosszúságú idősorokat figyelünk. Az ablak, amin keresztül figyeljük a coszinusz jelet az egyre nagyobb. Az ablakozás pedig lényegében egy négyszögjellel való szorzást jelent. A négyszögjel Fourier transzformáltja a sinc() jel. A coszinusz jel Fourier transzformáltja a coszinusz jel frekvenciájánál lévő Dirac-impulzus. Tehát minél nagyobb az ablak, annál jobban érvényesül a coszinusz jel Fourier transzformáltja, és annál kevésbé a négyszögjel Fourier transzformáltja. Egyre jobban egy Dirac-impulzusra fog hasonlítani a Fourier transzformált és nem pedig egy sinc() jelre. Ha tehát időben meghosszabbítom a sort, akkor jobb minőségű Fourier transzformációt tudok végezni. A frekvencia tartományban vett minták száma viszont jelentősen nem változtatja meg a Fourier transzformáció eredményét. 3.@. Most vizsgáljunk a jel matematikai spektrumát. Egy valós matematikai spektruma −
f fS től + S ig terjed és páros. 2 2
n = [0:149]; x1 = cos(2*pi*n/10); N = 2048; X = abs(fft(x1,N)); X = fftshift(X); F = [-N/2:N/2-1]/N; plot(F,X), xlabel('frequency / f s') Ha kirajzoltatjuk a spektrumot akkor a következőt kapjuk: 80 70 60 50 40 30 20 10 0 -0.5
-0.4
-0.3
-0.2
-0.1 0 0.1 frequency / f s
0.2
0.3
0.4
0.5
Módosítsuk úgy az ábrát, hogy a két csúcs ne a 0.1-nél és a -0.1-nél hanem a 0.2-nél és a -0.2-nél legyen.
Gyakorlat_11
4
Jelek és rendszerek Gyakorlat_11
Pletl
n = [0:149]; x1 = cos(2*2*pi*n/10); N = 2048; X = abs(fft(x1,N)); X = fftshift(X); F = [-N/2:N/2-1]/N; plot(F,X), xlabel('frequency / f s') Ekkor az alábbi spektrumot kapjuk: 80 70 60 50 40 30 20 10 0 -0.5
-0.4
-0.3
-0.2
-0.1 0 0.1 frequency / f s
0.2
0.3
0.4
0.5
Alakítsuk át ezt a spektrumot fizikai spektrummá: n = [0:149]; x1 = cos(2*2*pi*n/10); N = 2048; X =2* abs(fft(x1,N)); F = [0:N-1]/N; plot(F(1:N/2),X(1:N/2)),xlabel('frequency / f s') Ekkor a következő jelet kapjuk:
Gyakorlat_11
5
Jelek és rendszerek Gyakorlat_11
Pletl
150
100
50
0
0
0.05
0.1
0.15
0.2 0.25 0.3 frequency / f s
0.35
0.4
0.45
0.5
Látjuk, hogy a frekvenciatartomány pozitív része értelmezett, és hogy a spektrum kétszer nagyobb értékű az egyes frekvenciákon mint a matematikai spektrum esetében. Így az egyes frekvenciákon levő összetevők energiája nem változik. 4.@. Zaj generálása. Normális eloszlás vagy Gauss-eloszlás. Azt, hogy az X valószínűségi változó normális eloszlást követ, a következő módon szoktuk jelölni: X → Ν(m, σ 2 ) , ahol m a középértéket, σ 2 pedig a szórás négyzetét jelöli. A hozzá tartozó sűrűségfüggvény: f (x ) =
1
−
e
σ 2π
( x − m )2 2σ 2
.
Speciálisan, ha X → Ν(0,1) , akkor X-et standard normális eloszlásúnak (vagy sztenderd normális eloszlásúnak) nevezzük. N=1024; % Define Number of samples R1=randn(1,N); % Generate Normal Random Numbers R2=rand(1,N); % Generate Uniformly Random Numbers figure(1); % Select the figure subplot(2,2,1); % Subdivide the figure into 4 quadrants plot(R1); % Plot R1 in the first quadrant grid; title('Normal [Gaussian] Distributed Random Signal'); xlabel('Sample Number'); ylabel('Amplitude'); subplot(2,2,2); % Select the second qudrant hist(R1); % Plot the histogram of R1 grid; title('Histogram [Pdf] of a normal Random Signal'); xlabel('Sample Number'); ylabel('Total'); Gyakorlat_11
6
Jelek és rendszerek Gyakorlat_11
Pletl
subplot(2,2,3); plot(R2); grid; title('Uniformly Distributed Random Signal'); xlabel('Sample Number'); ylabel('Amplitude'); subplot(2,2,4); hist(R2); grid; title('Histogram [Pdf] of a uniformly Random Signal'); xlabel('Sample Number'); ylabel('Total'); A színes és a fehér zaj kirajzoltatása, illetve a színes és a fehér zaj hisztogramjának kirajzoltatása: Normal [Gaussian] Distributed Random Signal
Histogram [Pdf] of a normal Random Signal
4
300
3 250 2 200
Total
Amplitude
1 0
150
-1 100 -2 50 -3 -4
0
200
400
600 Sample Number
800
1000
0 -4
1200
-3
-2
Uniformly Distributed Random Signal
-1
0 Sample Number
1
2
3
4
Histogram [Pdf] of a uniformly Random Signal
1
120
0.9 100
0.8
80
0.6 Total
Amplitude
0.7
0.5
60
0.4 40
0.3 0.2
20
0.1 0
0
200
400
600 Sample Number
800
1000
1200
0
0
0.1
0.2
0.3
0.4 0.5 0.6 Sample Number
0.7
0.8
0.9
1
Az első sorban az látható, hogy Gauss-os eloszlású a hisztogram, tehát bizonyos (a 0 frekvenciához tartozó amplitúdó, az egyenáramú komponens) amplitúdók többször szerepelnek a jelben. Az alsó sorban, pedig egy egyenletes eloszlású hisztogram látható, tehát az egyes amplitúdók nagyjából azonos számban szerepelnek, a jelben. Ezeknek a jeleknek keressük meg a Fourier transzformáltját: N=1024; % Define Number of samples R1=randn(1,N); % Generate Normal Random Numbers R2=rand(1,N); % Generate Uniformly Random Numbers figure(1); % Select the figure Gyakorlat_11
7
Jelek és rendszerek Gyakorlat_11
Pletl
subplot(2,3,1); % Subdivide the figure into 4 quadrants plot(R1); % Plot R1 in the first quadrant grid; title('Normal [Gaussian] Distributed Random Signal'); xlabel('Sample Number'); ylabel('Amplitude'); subplot(2,3,2); % Select the second qudrant hist(R1); % Plot the histogram of R1 grid; title('Histogram [Pdf] of a normal Random Signal'); xlabel('Sample Number'); ylabel('Total'); subplot(2,3,4); plot(R2); grid; title('Uniformly Distributed Random Signal'); xlabel('Sample Number'); ylabel('Amplitude'); subplot(2,3,5); hist(R2); grid; title('Histogram [Pdf] of a uniformly Random Signal'); xlabel('Sample Number'); ylabel('Total'); N = 2048; X1 = abs(fft(R1,N)); X1 = fftshift(X1); F = [-N/2:N/2-1]/N; subplot(2,3,6),plot(F,X1),xlabel('frequency / f s') Ki is rajzoljuk ezt a spektrumot X2 = abs(fft(R2,N)); X2 = fftshift(X2); F = [-N/2:N/2-1]/N; subplot(2,3,3),plot(F(1024-100:1024+100),X2(1024100:1024+100)),xlabel('frequency / f s') A kapott eredmény a következő:
Gyakorlat_11
8
Jelek és rendszerek Gyakorlat_11
Pletl
Normal [Gaussian] Distributed Random Signal
Histogram [Pdf] of a normal Random Signal
4
300
600
250
500
200
400
150
300
100
200
50
100
3 2
Total
Amplitude
1 0 -1 -2 -3 -4
0
200
400
600 800 Sample Number
1000
0 -4
1200
Uniformly Distributed Random Signal
-3
-2
-1 0 1 Sample Number
2
3
4
0 frequency / f s
0.05
0 frequency / f s
0.5
Histogram [Pdf] of a uniformly Random Signal
1
120
90
0.9
80 100
0.8
70
0.7
80
60
0.6 Total
Amplitude
0 -0.05
0.5
50 60 40
0.4 40
0.3
30 20
0.2
20 10
0.1 0
0
200
400
600 800 Sample Number
1000
1200
0
0
0.2
0.4 0.6 Sample Number
0.8
1
0 -0.5
Az első sorban az látható, hogy legnagyobb amplitúdóval a 0 frekvenciájú egyenáramú komponens szerepel, ahogy azt vártuk is, míg a második sorban azt látjuk, hogy minden frekvencia szerepel valamekkora amplitúdóval. 5.@. http://diag.duf.hu/file/IAEA/ A következő feladat, hogy ezt a linket megnyitjuk és letöltjük a 10N_20100211_182142.meres file-t. Van egy nagy csővezeték. Emellé leteszünk mikrofonokat, a mikrofonok folyamatosan veszik a csővezetékből érkező hangokat. Ha valami elkezdi ütögetni a csövet a kérdés az, hogy mi és hol ütögeti ezt a csövet. Például egy baltával ütögeti valaki, vagy gumikalapáccsal, vagy pedig csak valaki belerúgott, esetleg egy elszabadult anyacsavar halad a csőben. El kell dönteni, hogy veszélyes-e a hang, amit hallunk, vagy nem, és ha veszélyes, akkor honnan jön a hang a csővezetékből. Ennek a feladatnak a megoldásához vannak laboratóriumi felvételek. Ezeket tudjuk meghallgatni a következő képen: [y, t, dt, info]=beolvas wavplay(y(:,1),1/dt) A hangjel Fourier transzformáltját a következő képen képezhetjük: N=2048; X=abs(fft(y(:,1),N)); X=fftshift(X); F=[-N/2:N/2-1]/N;; plot(F,X); Ekkor a következő kimenetet kapjuk: Gyakorlat_11
9
Jelek és rendszerek Gyakorlat_11
Pletl
25
20
15
10
5
0 -0.5
-0.4
-0.3
-0.2
-0.1
0
0.1
0.2
0.3
0.4
0.5
A beolvas függvény a pub/JelekEsRendszerek mappában található. Természetesen a beolvas függvényt és a *.meres file-t be kell másolni a munkakönyvtárba.
Gyakorlat_11
10