04 Ćwiczenia

background image

ZAJĘCIA

4

4

4




WPROWADZENIE DO INFORMATYKI II




MATLA

A

B

FUNKCJE GRAFICZNE 2D

M

M

A

A

T

T

L

L

AB

B

I ELEMENTY PROGRAMOWANIA


PLAN ZAJEĆ:

WSTĘP

GRAFIKA DWUWYMIAROWA-ELEMENTARNE

WYKRESY DWUWYMIAROWE

ZARZĄDZANIE WIELOMA RYSUNKAMI-OKNA GRAFICZNE I OPISY-

WANIE 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


background image


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 wier-
szowym, to liczba kolumn macierzy Y musi być taka sama jak liczba ele-
mentów wektora X lub gdy X jest wektorem kolumnowym, to liczba wier-
szy macierzy Y musi być równa liczbie elementów wektora X),

s

– łańcuch tekstowy jedno-, dwu- lub trój elementowy umieszczony w apo-
strofach, określający sposób kreślenia krzywych; łańcuch ten zawiera in-
formację 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 przed-
stawione są odpowiednie symbole.



Symbol Kolor

Symbol Rodzaj lini

y
m
c
r
g
b
w
k

żółty
purpurowy
niebiesko-zielony
czerwony
zielony
niebieski
biały
czarny

.
o
x
+
*
-
:
-.
--

pnktowa
kółkowa
iksowa
plusowa
gwiazdkowa
ciągła
kropkowana
kropkowo-kreskowa
przerywana












1

background image




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 semilogaryt-
micznej 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 wy-
kres 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

background image

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 10

d1

do 10

d2

włącznie. Wywołana z dwoma parametrami funkcja wygene-

ruje 50 liczb.

Zadanie 4. Należy wykonać wykres przy pomocy funkcji plot z wykorzystaniem wekto-
ró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

background image

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 n
pujące polecenia umieszczone za instrukcją rysowania:

astę-


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 w
nych.

spółrzęd-

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

background image

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ć w
jemnie różne.

za-


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

background image

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łup-
kó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

background image

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

background image

%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

background image

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

background image

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

background image

% --- 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 modula-
jacy', 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

background image

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

background image

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

background image

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 "zaszu-
mionego"'); 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

background image

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

background image

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

background image

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

background image

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 transfor-
maty 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

background image

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

background image

%%% 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 czestot-
liwosci', '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 czestotliwo-
sci', 'NumberTitle', 'off');
subplot(2, 1, 1); plot(y1b); axis([0 2048 get(gca, 'YLim')]);
title('dewuiacyjna zmiana f');

20

background image

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

background image

22


Wyszukiwarka

Podobne podstrony:
04 Cwiczenie2
04 Cwiczenie2
04 cwiczenie programowanie
04 cwiczenie 4
04 Cwiczenie4id 4994 Nieznany (2)
04 cwiczenie archiwizacja cw
04 cwiczenia inflacja miesieczna
04 Ćwiczenia (formatowanie warunkowe, wykres)
KSP 04 Ćwiczenia projektowe 4
cwiczenie 04 53
Cwiczenie 04
MB ćwiczenia 24 04 2010 (02)
cwiczenia 7 25.04.2008, Prawoznawstwo, Materialy e-learning, mgr M. Zalewska
ćwiczenia 4 podatki  04 2011
Kinezyterapia cwiczenia# 04 2008 Chod o kulach
fiz cwiczenia 04(1)

więcej podobnych podstron