Plik 5. Zajęcia 4

Transkrypt

Plik 5. Zajęcia 4
4
ZAJĘCIA
TECHNOLOGIE INFORMACYJNE
ATLAB
M
AB FUNKCJE GRAFICZNE 2D
MATLA
I ELEMENTY PROGRAMOWANIA
PLAN ZAJEĆ:
• WSTĘP
• GRAFIKA DWUWYMIAROWA-ELEMENTARNE
WYKRESY DWUWYMIAROWE
• ZARZĄDZANIE WIELOMA RYSUNKAMI-OKNA GRAFICZNE I OPISYWANIE WYKRESÓW
• NAKŁADANIE RYSUNKÓW W JEDNYM UKŁADZIE WSPÓŁRZĘDNYCH
• WYKRESY DANYCH DYSKRETNYCH
WSTĘP
Funkcje graficzne w programie MATLAB dzielą się na:
a. funkcje przeznaczone do prezentacji danych
b. funkcje umożliwiające edycję rysunków
c. funkcja pozwalające rysować różne obiekty
GRAFIKA DWUWYMIAROWA - ELEMENTARNE WYKRESY
DWUWYMIAROWE
Podstawowe instrukcje rysowania wykresu dwuwymiarowego z automatycznym
skalowaniem osi można zapisać następująco:
funkcja(y)
funkcja(x, y)
funkcja(x, y, s)
funkcja(x1, y1, x2, y2,..)
funkcja(x1, y1, s1, x2, y2, s2,..)
gdzie zamiast wyrazu funkcja należy wstawić jedno z poniższych poleceń:
plot
– tworzenie wykresu o obu osiach wyskalowanych liniowo,
loglog
– tworzenie wykresu o obu osiach wyskalowanych logarytmicznie,
semilogx – tworzenie wykresu o skali logarytmicznej w osi x i liniowej w osi y
semilogy – tworzenie wykresu o skali logarytmicznej w osi y i liniowej w osi x
x
– wektor danych na osi odciętych,
y
– wektor lub macierz danych dla osi rzędnych (jeżeli X jest wektorem wierszowym, to liczba kolumn macierzy Y musi być taka sama jak liczba elementów wektora X lub gdy X jest wektorem kolumnowym, to liczba wierszy macierzy Y musi być równa liczbie elementów wektora X),
s
– łańcuch tekstowy jedno-, dwu- lub trój elementowy umieszczony w apostrofach, określający sposób kreślenia krzywych; łańcuch ten zawiera informację o kolorze na ekranie, rodzaju lini i znaczniku na lini, np. ‘b-o’
oznacza linię niebieską, ciągłą z kółkiem w każdym punkcie; poniżej przedstawione są odpowiednie symbole.
Symbol Kolor
y
m
c
r
g
b
w
k
Symbol Rodzaj lini
.
o
x
+
*
:
-.
--
żółty
purpurowy
niebiesko-zielony
czerwony
zielony
niebieski
biały
czarny
1
pnktowa
kółkowa
iksowa
plusowa
gwiazdkowa
ciągła
kropkowana
kropkowo-kreskowa
przerywana
Przykład 1. Przykład użycia funkcji plot
x=-pi:0.1:pi;
y=sin(x);
plot(x, y)
Przykład 2. Przykład tworzenia wykresy dwuwymiarowego z dwóch wektorów
X=[1 2 3 4 5];
Y=[2 4 6 7 8 ];
plot(X, Y)
Zadanie 1. Proszę narysować wykres funkcji cosinus i tangens.
Zadanie 2. Należy wykonać wykresy w skali liniowej, logarytmicznej i semilogarytmicznej dla dowolnej serii danych (min 10 punktów).
Zadanie 3. Należy wykonać wykresy funkcji sinus i cosinus.
Pytanie 1.
Co oznacza taki opis lini – ‘wo’ ?
fplot
Funkcja fplot – służy do rysowania wykresów zależności funkcyjnych, tzn. rysuje wykres funkcji o nazwie określonej przez parametr f.
fplot(f, granice)
fplot(f, granice, n)
fplot(f, granice, n, kąt)
fplot(f, granice, n, kąt, podprzedziały)
[x, y]=fplot(...)
gdzie:
f – łańcuch znaków stanowiący nazwę pliku zawierającego rysowaną funkcję,
granice – dwuelementowy wektor opisujący granice przedziału w jaki m ma być
narysowany wykres,
n – liczba określająca minimalną liczbę punktów, uwzględnianych przy sporządzaniu wykresu,
kąt – liczba określająca kąt w stopniach między sąsiednimi odcinkami wykresu
powyżej jakiego zwiększana jest liczba punktów próbkowania,
poprzedzały – skalar określający maksymalną liczbę punktów próbkowania, jaka
może zostać dodana w gwałtownie zmieniających się miejscach wykresu.
Przykład 3. Przykład użycia funkcji fplot
2
Należy utworzyć m – plik fff.m zawierający funkcję:
function y=fff(x)
y=sin(3*pi*atan(x));
A następnie:
[xx, yy]=fplot(‘fff’, [-10 10]);
x=-10:0.5:10; y=fff(x);
subplot(2, 1, 1)
plot(x, y)
title(‘plot’)
subplot(2, 1, 2)
plot(xx, yy)
title(‘fplot’)
Pytanie 2. Jaka jest różnica pomiędzy funkcją plot, a fplot?
linspace
v=linspace(x1, x2, N)
v=linspace(x1, x2)
Funkcja linspace – generuje wierszowy wektor N liczb rozłożonych równomiernie w
przedziale od x1 do x2. Wywołana z dwoma parametrami funkcja wygeneruje 100 liczb.
logspace
v=logspace(d1, d2, N)
v=logspace(d1, d2)
Funkcja linspace – generuje wierszowy wektor N liczb rozłożonych logarytmicznie w
przedziale od 10d1 do 10d2 włącznie. Wywołana z dwoma parametrami funkcja wygeneruje 50 liczb.
Zadanie 4. Należy wykonać wykres przy pomocy funkcji plot z wykorzystaniem wektorów wygenerowanych przy pomocy funkcji linspace i logspace.
ZARZĄDZANIE WIELOMA RYSUNKAMI - OKNA GRAFICZNE I OPISYWANIE
WYKRESÓW
W oknie graficznym programu MATLAB można umieścić maksymalnie cztery układy
współrzędnych (cztery rysunki) dzieląc okno na dwa wiersze i dwie kolumny.
Podziału okna graficznego dokonuje się przy pomocy funkcji:
subplot
3
subplot(m, n, p)
subplot(mnp)
gdzie:
m – liczba wykresów które mają się zmieścić w pionie,
n – liczba wykresów które mają się zmieścić w poziomie,
p – numer wykresu, który zostanie narysowany najbliższym wywołaniem funkcji
plot, wykresy są numerowane w wierszach od lewej do prawej, a wiersze od góry
do dołu.
Wykresy można uzupełnić, opisując osie, dodając siatkę współrzędnych, nadając
tytuł względnie umieszczając tekst lub opis krzywych na wykresie. Służą do tego następujące polecenia umieszczone za instrukcją rysowania:
grid
grid
grid on
grid off
Funkcja grid umożliwia naniesienie na wykres pomocniczej siatki współrzędnych.
xlabel
xlabel(tekst)
Funkcja ta wpisuje łańcuch tekstowy pod poziomą osią aktywnego układu współrzędnych.
ylabel
ylabel(tekst)
Funkcja ta wpisuje łańcuch tekstowy obok osi y aktywnego układu współrzędnych.
title
title(tekst)
Funkcja ta umieszcza tytuł nad wykresem.
text
text(x, y, tekst)
4
Umieszczenie tekstu w miejscu bieżącego wykresu; x, y, wyznaczają punkt początku
tekstu w takich jednostkach w jakich wyskalowane są osie x i y.
gtext
gtext(tekst)
Umieszczenie łańcucha tekstowego tekst za pomocą myszy komputerowej.
Zadanie 5. Należy wykreślić cztery wykresy w jednym oknie graficznym, a następnie
opisać tytuły i osie.
NAKŁADANIE RYSUNKÓW W JEDNYM UKŁADZIE WSPÓŁRZĘDNYCH
Wykreślenie kilku krzywych w jednym układzie współrzędnych jest możliwe na dwa
sposoby:
• przez umieszczenie danych do rysowania w macierzy,
• przez nakładanie kolejno generowanych wykresów.
plot(x, Y)
Wykreślanie w jednym układzie współrzędnych kolumn lub wierszy macierzy Y w
funkcji argumentów zawartych w wektorze x.
plot(Y)
Wykreślenie krzywych dla danych zawartych w poszczególnych kolumnach Y w funkcji
kolejnych numerów wierszy tej macierzy,
plot(X, Y)
Wykreślenie kolumn macierzy X w funkcji kolumn macierzy Y w jednym układzie
współrzędnych, jeżeli obie macierze mają te same wymiary.
plot(X1, Y1, X2, Y2,...)
Wykreślenie lini dla poszczególnych par X, Y, przy czym wymiary par mogą być wzajemnie różne.
Drugą możliwością jest wykreślenie w jednym układzie współrzędnych krzywych, których dane są zawarte w osobnych macierzach lub wektorach. Stosuję się do tego celu
instrukcję hold.
hold
hold
5
hold on
hold off
Sterowanie nakładaniem kolejno generowanych wykresów przy zatrzymaniu skalowania
osi i miejsca w oknie graficznym.
Zadanie 6. Należy wykreślić wykresy funkcji sinus i cosinus w jednym układzie współrzędnych.
5. WYKRESY DANYCH DYSKRETNYCH
bar(y)
Funkcja bar(y) wykreśla słupki wartości zawartych w wektorze y; rozmieszczenie słupków jest równomierne.
bar(x, y, S)
Funkcja bar(x, y, S) wykreśla słupki wartości wektora y w funkcji wartości wektora x,
które muszą mieć wartości rosnące, równomiernie odległe; S jest łańcuchem tekstowym,
np. dla określenia koloru lini.
[xb, yb]=bar(x, y)
Funkcja [xb, yb]=bar(x, y) zwraca wektory xb i yb w taki sposób, że instrukcją plot(xb,
yb) można wykreślić wykres słupkowy.;
Stem
ZADANIA DO WYKONANIA
Proszę wpisać poniższe przykłady wykresów 2D:
1. Algorytm: y=sin(t)
clear;
t=0:0.001:1.023;
y=sin(20*t);
plot(t,y);
2.
Transformata Fouriera dla y=sin(wt).
clear;
t=0:0.001:1.023;
6
y=sin(2*pi*10*t);
y_f=fft(y);
a_y=abs(y_f);
plot(a_y);
3.
Widmo transformaty Fouriera - generatory liczb losowych okresowych.
clear;
t=0:0.001:1.023
x(1)=5;
a=52;
m=112;
for i=2:1024;
x(i)=rem(a*x(i-1),m);
end
y_f=fft(x);
df=1000/1024;
a_y=abs(y_f);
f=0:df:1000-df;
yc=a_y/max(a_y);
subplot(2,1,1);
plot(yc);
subplot(2,1,2);
plot(x);
4.
Widmo transformaty Fouriera - generatory liczb losowych nieokresowych.
clear;
t=0:0.001:1.023
x(1)=5;
a=48;
m=886;
for i=2:1024;
x(i)=rem(a*x(i-1),m);
end
y_f=fft(x);
df=1000/1024;
a_y=abs(y_f);
f=0:df:1000-df;
yc=a_y/max(a_y);
subplot(2,1,1);
plot(yc);
subplot(2,1,2);
plot(x);
6.
Algorytmy: A =exp(t); y = A * cos( t );
7
%sterowanie
fp
= 100;
fs1
= 5;
fs2
= 2;
Tmax = 5;
t
= 0:1/fp:Tmax;
A1
= 10;
A2
= 5;
fi0
= 0;
%algorytmy
A= A1 * exp(-t);
y= A .* cos(2 * pi * fs1 * t + fi0);
%demonstracja
figure(1);
clf;
hold on;
grid on;
plot(t, y, 'g');
6.
Algorytmy: s = rand(size(t)); y = cos( t ); y1 = cos (t ) + s;
%sterowanie
fp
= 1000;
fs
= 5;
Tmax = 0.5;
t
= 0:1/fp:Tmax;
A
= 1;
fi0
= 0;
%algorytmy
s
= rand(size(t));
y
= A * cos(2 * pi * fs * t + fi0 );
y1
= A * cos(2 * pi * fs * t + fi0 ) + s;
%demonstracja
figure(1);
clf;
hold on;
grid on;
plot(t, y, 'g', t, y1, 'r');
7.
Algorytmy: Amod = exp(-t); y = Amod * sin(t ); y2 = sin( t); x = [y y2];
% --- STEROWANIE --fp
= 1000;
8
fs
= 10;
fs2
= 5;
Tmax = 2;
A
= 1;
fi0
= 0;
fi02
= 0;
t
= 0:1/fp:Tmax;
t2
= 0:1/fp:2*Tmax+1/fp;
% --- ALGORYTM --Amod = A * exp(-t);
y
= Amod .* sin(2 * pi * fs * t +fi0);
y2
= A * sin(2 * pi * fs2 * t + fi02);
x
= [y y2];
% --- PREZENTACJA --figure(1);
clf
hold on;
grid on;
plot(t2, x, 'r')
xlabel('t');
ylabel('y, y2, x');
8.
Algorytm: y1 = A * sin(t ); y2 = A2 * sin( t); y=y1+y2;
% --- STEROWANIE --fp
= 1000;
fs
= 10;
fs2
= 5;
Tmax = 0.1;
A
= 1;
A2
= 1;
fi0
= 0;
fi02 = 0;
t
= 0:1/fp:Tmax;
% --- ALGORYTM --y
= A * sin(2 * pi * fs * t + fi0);
y2
= A2 * sin(2 * pi * fs2 * t +fi02);
% --- PREZENTACJA --figure(1);
clf
hold on;
grid on;
plot(t, y, 'g');
plot(t, y2, 'b');
plot(t, y+y2, 'r');
9
xlabel('t');
ylabel('A, A2, A+A2');
legend('+g', 'przebieg pierwszy', '+b', 'przebieg drugi', '+r',
'suma', 10);
plot(t, y, '+g');
plot(t, y2, '+b');
plot(t, y+y2, '+r');
9. Algorytm: Amod = A * exp(-t); - exp modulująca
y = Amod .* sin(t); - sin modulowany
% --- STEROWANIE --fp = 1000;
fs = 10;
Tmax = 2;
A = 1;
fi0 = 0;
t = 0:1/fp:Tmax;
% --- ALGORYTM --Amod = A * exp(-t);
y
= Amod .* sin(2 * pi * fs * t + fi0);
% --- PREZENTACJA --figure(1);
clf
hold on;
grid on;
plot(t, y, 'r');
plot(t, Amod, 'g');
xlabel('t');
ylabel('A, exponenta');
legend('r', 'sin zmodulowany', 'g', 'exponenta');
10. Algorytm: Amod = A * cos( t); - cos modulujący
y = Amod .* sin( t); - sin zmodulowany
% --- STEROWANIE --fp = 1000;
fs
= 10;
fs2 = 3;
Tmax
= 0.5;
A
= 1;
fi0 = 0;
fi02 = 10;
t
= 0:1/fp:Tmax;
10
% --- ALGORYTM --Amod
= A * cos(2 * pi * fs2 * t + fi02);
y
= Amod .* sin(2 * pi * fs * t + fi0);
% --- PREZENTACJA --figure(1);
clf
hold on;
grid on;
plot(t, y, 'r');
plot(t, Amod, 'g');
plot(t, -Amod, 'b');
xlabel('t');
ylabel('A, exponenta');
legend('r', 'sin zmodulowany', 'g', 'cos modulujacy', 'b', 'cos modulajacy', 50);
11. Algorytm:
y1 = X * sin (2 * pi * fs * t + fi0); y2 = Y * sin (2 * pi * fs2 * t +fi02);
y3 = y1 + y2; fy3 = fft(y3); y31 = ifft(fy3); dy = (y3 - y31) .* (y3 - y31);
% --- STEROWANIE --X
= 2;
Y
= .5;
fp
= 1000;
fs
= 10;
fs2
= 40;
fi0
= 0;
fi02
= 0;
Tmax
= 5;
t
= 0:1/fp:Tmax;
% --- ALGORYTM --y1
= X * sin (2 * pi * fs * t + fi0);
y2
= Y * sin (2 * pi * fs2 * t +fi02);
y3
= y1 + y2;
fy3
= fft(y3);
y31
= ifft(fy3);
dy
= (y3 - y31) .* (y3 - y31);
% --- PREZENTACJA --figure(1);
clf
hold on;
grid on;
%plot(t, y1, 'g');
%plot(t, y2, 'b');
11
plot(t, y3, 'r'); title('Przebieg');
figure(2);
clf
hold on;
grid on;
F = fft(y3);
subplot(2, 1, 1), plot(t, abs(F), 'b'); title('Amplituda'); grid on;
subplot(2, 1, 2), plot(t, angle(F), 'r'); title('faza'); grid on;
figure(3);
clf
subplot(2,1,1),plot(t, y3,'g', t, y31, '.r');
subplot(2,1,2),plot(t, dy);
13. Algorytmy: y1 = X * sin (2 * pi * fs * t + fi0 );
y2 = rand(size(t)); przebieg jednostajny
y3 = randn(size(t)); przebiegnormalny
% --- STEROWANIE --X
= 2;
fp
= 1000;
fs
= 10;
fi0
= 0;
Tmax = 1;
t
= 0:1/fp:Tmax;
t1
= 0:1/fp:2*Tmax;
% --- ALGORYTM --y1
= X * sin (2 * pi * fs * t + fi0 );
y2
= rand(size(t)); %jednostajny
y3
= randn(size(t));%normalny
% --- PREZENTACJA --figure(1);
clf
subplot(3,1,1), plot(t, y1, 'g'); grid on;
subplot(3,1,2), plot(t, y2, 'r'); grid on;
subplot(3,1,3), plot(t, y3, 'b'); grid on;
figure(2);
clf;
subplot(3,1,1), hist(y1);title('sygnał z pkt. 1');
subplot(3,1,2), hist(y2);title('szum o rozkładzie jednostajnym');
subplot(3,1,3), hist(y3);title('szum o rozkładzie normalnym');
figure(3);
clf;
subplot(3,1,1), plot(t1, xcorr(y1),'g'); title('syganł z pkt. 1');grid on;
12
subplot(3,1,2), plot(t1, xcorr(y2),'g'); title('szum o rozkładzie jednostajny
');grid on;
subplot(3,1,3), plot(t1, xcorr(y3),'g'); title('szum o rozkładzie normalnym');grid
on;
figure(4);
clf;
subplot(3,1,1), plot(t1, xcov(y1),'r'); title('syganł z pkt. 1');grid on;
subplot(3,1,2), plot(t1, xcov(y2),'r'); title('szum o rozkładzie jednostajny
');grid on;
subplot(3,1,3), plot(t1, xcov(y3),'r'); title('szum o rozkładzie normalnym');grid
on;
14.
Algorytmy: s = rand(size(t); y1 = X * sin ( t ); y2 = Y * sin ( t );
y3 = y1 + y2; y3s = y1 + y2 + s;
% --- STEROWANIE --X
= 2;
Y
= .5;
fp
= 1000;
fs
= 10;
fs2
= 40;
fi0
= 0;
fi02
= 0;
Tmax
= .5;
t
= 0:1/fp:Tmax;
% --- ALGORYTM --s
= rand(size(t/6));
y1
= X * sin (2 * pi * fs * t + fi0);
y2
= Y * sin (2 * pi * fs2 * t +fi02);
y3
= y1 + y2;
y3s
= y1 + y2 + s;
% --- PREZENTACJA --figure(1);
clf
hold on;
grid on;
%plot(t, y1, 'g');
%plot(t, y2, 'b');
subplot(2, 1, 1), plot(t, y3, 'r'); title('Przebieg "czysty"');
subplot(2, 1, 2), plot(t, y3s, 'g'); title('Przebieg "zaszumiony"');
figure(2);
clf
hold on;
grid on;
F
= fft(y3);
Fs
= fft(y3s);
13
subplot(4, 1, 1), plot(t, abs(F), 'b'); title('Amplituda przebiegu "czystego"'); grid on;
subplot(4, 1, 2), plot(t, abs(Fs), 'b'); title('Amplituda przebiegu "zaszumionego"'); grid
on;
subplot(4, 1, 3), plot(t, angle(F), 'r'); title('faza przebiegu "czystego"'); grid on;
subplot(4, 1, 4), plot(t, angle(Fs), 'r'); title('faza przebiegu "zaszumionego"'); grid on;
15.
Porównanie FFT z podziałem czasowym z ''FFT'' wbudowanym
% dane
clear all;
close all;
t = 0:0.01:2;
%t = 0:0.001:1;
f = 5;
x = 1 * sin(2 * pi * f * t + 0);
%x = 1 * sin(2 * pi * f * t + 0) + 1 * sin(2 * pi * 10 * f * t + 0);
%%% uzupełnienie do 2^n %%%
a = log2(length(x));
b = floor(log2(length(x)));
if (a - b)
for lp1 = length(x):1:2^(b+1)
x(lp1) = 0;
end
end
e = log2(length(x));
kr = length(x)/2;
p = 0;
krkr = 1;
% obliczenia
lb = log2(length(x));
in = 0:length(x)-1;
14
bi = zeros(length(x), lb);
for lp1 = 1:length(x)
for lp2 = 1:lb
po = 2^(lb - lp2);
if in(lp1) - po >= 0
bi(lp1, lp2) = 1;
in(lp1) = in(lp1) - po;
end
end
end
ob = fliplr(bi);
oi = zeros(1, length(x));
for lp1 = 1:length(x)
for lp2 = 1:lb
po = 2^(lb - lp2);
if ob(lp1, lp2) == 1
oi(lp1) = oi(lp1) + po;
end
end
end
xo = x(oi + 1);
xo_ = x(oi + 1);
for ee = 1:1:e
% disp(sprintf('etap %d', ee));
for krkr = 1:2^(ee-1):kr
lr = 2^(ee - 1);
r = 0;
fR = lr;
for p = 2*(krkr-1):1:2*(krkr-1)+(2^(ee-1)-1)
%
disp(sprintf('p= %d \t q= %d \t r=%d',p,p+2^(ee-1), r));
15
q = p + 2^(ee - 1);
X(p + 1) = xo(p + 1) + exp(-i * 2 * pi * r / length(x)) * xo(q + 1);
X(q + 1) = xo(p + 1) - exp(-i * 2 * pi * r / length(x)) * xo(q + 1);
r = r + 2^(e - ee);
fR = fR - 1;
if fR == 0
r = 0;
fR = lr;
end
end
end
p = 0; xo = X;
end
XX = fft(x);
% prezentacja
scrsz = get(0,'ScreenSize');
xx = scrsz(3)*0.075;
x_ = scrsz(3)*0.87;
yy = scrsz(4)*0.06;
y_ = scrsz(4)*0.9;
figure(1); clf;
set(1,'Position', [xx yy x_ y_], 'MenuBar', 'none', 'Name', ' porównanie FFT z
podziauem czasowym z ''FFT'' wbudowanom', 'NumberTitle', 'off');
axes('Position', [0.07 0.71 0.9 0.25]); plot(x);
ylim = get(gca, 'YLim'); axis([0 length(x) ylim]);
xlabel('k'); ylabel('x(k)'); title(sprintf('sygnau uzupełniony do 2^%d, czyli %d', e,
length(x)));
axes('Position', [0.07 0.285 0.4 0.35]); plot(abs(X), 'r');
ylim = get(gca, 'YLim'); axis([0 length(x) ylim]);
xlabel('k'); ylabel('|X(k)|'); title('widmo amplitudowe obliczone FFT z podziauem');
16
axes('Position', [0.57 0.285 0.4 0.35]); plot(abs(XX), 'g');
ylim = get(gca, 'YLim'); axis([0 length(x) ylim]);
xlabel('k'); ylabel('|XX(k)|'); title('widmo amplitudowe FFT wbudowanej');
axes('Position', [0.07 0.07 0.9 0.15]); plot(abs(XX) - abs(X));
ylim = get(gca, 'YLim'); axis([0 length(x) ylim]);
xlabel('k'); ylabel('[|X(k)|-|XX(k)|]'); title('wska
nik różnic pomiędzy FFT z podzi-
auem a FFT wbudowanym');
16. Transformata Fourier'a
% dane
clear all;
f = 10;
N = 99;
t = 0:0.005:10;
x = 1 * sin(2 * pi * f * t + 0);
for i = 1:1:(3 * N + 1)
X(i) = 0;
end
% obliczenia
for k = 0:1:(3 * N - 1)
for n = 0:1:(N - 1)
X(k + 1) = X(k + 1) + x(n + 1) * exp(-j * ( (2 * pi) / N ) * k * n);
end
end
XX = fft(x, N);
adif = abs(XX(1:1:99)) - abs(X(1:1:99));
fdif = unwrap(angle(XX(1:1:99))) - unwrap(angle(X(1:1:99)));
% prezentacja
scrsz = get(0,'ScreenSize');
17
xx = scrsz(3)*0.125;
x_ = scrsz(3)*0.87;
yy = scrsz(4)*0.06;
y_ = scrsz(4)*0.9;
figure(1); clf;
set(1,'Position', [xx yy x_ y_], 'MenuBar', 'none', 'Name', ' transformata Fourier''a',
'NumberTitle', 'off');
subplot(3, 1, 1); plot(100 * t, x); hold on; plot(100 * t, x, '.r');
xlabel('n'); ylabel('x(n)'); axis([0 100 -1.1 1.1]); title('Sygnał');
set(gca, 'Position', [0.05 0.71 0.9 0.2238]);
subplot(3, 1, 2); plot(1:1:100, abs(X(1:1:100))); hold on; plot(101:1:298,
abs(X(101:1:298)), 'g');
xlabel('k'); ylabel('|X(k)|'); axis([0 300 0 60]); title('widmo amplitudowe');
set(gca, 'Position', [0.05 0.405 0.9 0.2238]);
subplot(3, 1, 3); plot(1:1:100, unwrap(angle(X(1:1:100)))); hold on;
plot(100:1:298, unwrap(angle(X(100:1:298))), 'g');
xlabel('k'); ylabel('arg(X(k))'); title('widmo fazowe');
set(gca, 'Position', [0.05 0.1 0.9 0.2238]);
figure(2); clf;
set(2,'Position', [xx yy x_ y_], 'MenuBar', 'none', 'Name', ' porównanie transformaty ze wzoru z funkcja ''fft''', 'NumberTitle', 'off');
axes('Position', [0.05 0.77 0.4 0.20]); plot(abs(X(1:1:101)), 'r'); axis([0 100 0 55]);
xlabel('k'); ylabel('|X(k)|'); title('widmo amplitudowe ''wzór''');
axes('Position', [0.55 0.77 0.4 0.20]); plot(abs(XX), 'g'); axis([0 100 0 55]);
xlabel('k'); ylabel('|XX(k)|'); title('widmo amplitudowe ''fft''');
axes('Position', [0.05 0.58 0.9 0.1]); plot(adif.*adif, '.'); hold on; plot(adif.*adif,
'm'); axis([0 100 0 5e-26]);
xlabel('k'); ylabel('[|X(k)|-|XX(k)|]^2'); title('wska
nik różnic pomiędzy fft a
''wzorem''');
axes('Position', [0.05 0.25 0.4 0.25]); plot(unwrap(angle(X(1:1:99))), 'r');
18
xlabel('k'); ylabel('arg(X(k))'); title('widmo fazowe ''wzór''');
axes('Position', [0.55 0.25 0.4 0.25]); plot(unwrap(angle(XX)), 'g');
xlabel('k'); ylabel('arg(XX(k))'); title('widmo fazowe ''fft''');
axes('Position', [0.05 0.08 0.9 0.1]); plot(fdif.*fdif, '.'); hold on; plot(fdif.*fdif, 'm');
axis([0 100 0 1e-24]);
xlabel('k'); ylabel('[arg(X(k))-arg(XX(k))]^2'); title('wska
nik różnic pomiędzy fft a
''wzorem''');
figure(3); clf;
set(3,'Position', [10 10 60 90], 'MenuBar', 'none', 'Name', ' :)', 'NumberTitle', 'off');
p(1) = uicontrol('Style', 'pushbutton', 'String', 'Close All', 'Position', [25 5 50 30],
'Callback', 'sw');
p(2) = uicontrol('Style', 'pushbutton', 'String', 'Fourier', 'Position', [17 40 70 20],
'Callback', 'sw');
p(3) = uicontrol('Style', 'pushbutton', 'String', 'Porównanie', 'Position', [17 65 70
20], 'Callback', 'sw');
figure(1);
17.
Liniowa zmiana częstotliwości, dewiacja częstotliwości
%%% dane
f = 10;
df = 15;
fp = 1000;
w0 = 2 * pi * f;
dw0 = 2 * pi * df;
n = 1:2048;
t = 1/fp.*n;
N = 700;
k = (dw0/N)*fp;
wm = 10;
Df = 150;
19
%%% obliczenia
%% punkt (1a) %%
y1a = sin(w0*t+(1/2)*k*(t.*t));
%% punkt (1b) %%
y1b = sin(w0*t - (Df/(2*pi*wm))*cos(wm*t));
%% punkt (2a) %%
X2a = fft(y1a);
X2b = fft(y1b);
%% punkt (2b) %%
%%% prezentacja
scrsz = get(0,'ScreenSize');
xx = scrsz(3)*0.15;
x_ = scrsz(3)*0.8;
yy = scrsz(4)*0.1;
y_ = scrsz(4)*0.8;
figure(1); clf;
set(1,'Position', [xx yy x_ y_], 'MenuBar', 'none', 'Name', ' liniowa zmiana czestotliwosci', 'NumberTitle', 'off');
subplot(2, 1, 1); plot(y1a); axis([0 2048 get(gca, 'YLim')]);
title('liniowa zmiana f');
subplot(2, 2, 3); plot(abs(X2a)); axis([0 300 get(gca, 'YLim')]);
title('FFT sygnau');
subplot(2, 2, 4); specgram(y1a); axis([get(gca, 'XLim') 0 0.2]);
title('SPECGRAM sygnau');
figure(2); clf;
set(2,'Position', [xx yy x_ y_], 'MenuBar', 'none', 'Name', ' dewiacja czestotliwosci', 'NumberTitle', 'off');
subplot(2, 1, 1); plot(y1b); axis([0 2048 get(gca, 'YLim')]);
title('dewuiacyjna zmiana f');
20
subplot(2, 2, 3); plot(abs(X2b)); axis([0 300 get(gca, 'YLim')+0.1*get(gca,
'YLim')]);
title('FFT sygnau');
subplot(2, 2, 4); specgram(y1b); axis([get(gca, 'XLim') 0 0.2]);
title('SPECGRAM sygnau');
21
22