2_Macierze.pdf

(216 KB) Pobierz
Adam Korzeniewski, Andrzej Leśnicki
Lab. PS, Ćw. 0. MATLAB jako narzędzie w przetwarzaniu sygnałów
ĆWICZENIE 0
MATLAB jako narzędzie w przetwarzaniu sygnałów
2. Macierze
1/3
Zgodnie z nazwą programu MATLAB, jest to program, w którym łatwo wykonuje się
działania na macierzach. Pokazuje to przykład 3.
Przykład 3.
>>A=[1 2;3,4;... %Elementy macierzy wprowadzamy wierszami. Separatorami są spacje lub
5 6]
%przecinek. Średnik kończy wiersz. Wielokropek jest znakiem kontynuacji
%linii (tutaj nie był niezbędny).
A=
1 2
3 4
5 6
>> a=1:2:8 %Dwukropek pozwala na skrócony zapis macierzy z krokiem (tutaj np. od 1 do 8
% z krokiem co 2)
a=
1 3 5 7
% Trzeba koniecznie przyzwyczaić się do tego, że komputer numeruje ciągi liczbowe
% indeksami od 1 w górę, podczas gdy w większości algorytmów indeksowanie rozpoczyna
% się od 0 w górę (np. przy zapisie dyskretnego sygnału przyczynowego). Z tego powodu
% początkujący programiści popełniają proste błędy, np. mylą się o 1 przy ocenie długości
% ciągu.
>> b=[zeros(1,3),[5:-1:3],ones(1,2)] %Łatwo można złożyć macierz z innych macierzy
b=
0 0 0 5 4 3 1 1
>> length(b) % Łatwo można obliczyć długość wektora
ans =
8
>> b(3:7)
% Łatwo można wyciąć macierz z macierzy
ans =
0 5 4 3 1
>> a(2:3)=b(5:6)
a=
1 4 3 7
>> fliplr(b) % Łatwo można odwrócić kolejność elementów (ang. flip left right)
ans =
1 1 3 4 5 0 0 0
>> a=[1,2,3]; b=[4,5,6]; %Można napisać kilka komend oddzielonych średnikami w jednym
%wierszu, ale programiści unikają tego, gdyż zmniejsza to czytelność
%programu
>> a.*b % Mnożenie element po elemencie, wymiary a i b muszą być identyczne,
% kropka
.
przed * jest tutaj niezwykle ważna
ans =
4 10 18
Adam Korzeniewski, Andrzej Leśnicki
Lab. PS, Ćw. 0. MATLAB jako narzędzie w przetwarzaniu sygnałów
>> a./b
%Dzielenie element po elemencie
ans =
0.2500 0.4000 0.5000
>> a=[1,2,3]; b=[4,5,6];
>> c=a*b' % Zwykłe mnożenie macierzy c(kxm)=a(kxl)*b(lxm).
% Znak „prim” oznaczał powyżej transpozycję macierzy.
c=
32
>> c=a'*b
c=
4 5 6
8 10 12
12 15 18
>> A=[2,3,5;1,3,2;3,1,4];
>> size(A)
% Łatwo można ustalić rozmiary macierzy
ans =
3 3
>> b=[4,0,6]';
>> x=A\b
% Rozwiązanie układu równań liniowych Ax=b
x=
1
-1
1
2/3
Rozmiary, format i wartości zmiennych warto obserwować w obszarze roboczym
MATLABa (Desktop
Workspace). Stamtąd można przekopiować wyniki obliczeń i wkleić
do innego programu. Oczywiście wszystko to co pisaliśmy do tej pory, ze znakami zachęty
włącznie, może być przekopiowane do dowolnego dokumentu lub programu. Trzeba
zachować ostrożność przy kopiowaniu w drugą stronę, tj. z innego dokumentu lub programu
do MATLABa, gdyż mogą być przekłamywane znaki lub pojawić się niewidoczne znaki jak
znak zmiany linii, itp. Na przykład przy kopiowaniu łańcucha z dokumentu .doc czy .pdf
zostaną przekłamane znaki „uszu” łańcucha (co bardzo trudno jest zauważyć) i trzeba je
poprawić. Najbezpieczniejsze pod tym względem (kopiowania) są pliki .txt z notatnika.
Pisząc programy w MATLABie należy preferować specjalne instrukcje MATLABowe i
unikać zwłaszcza instrukcji
for.
Przykład 4.
Na przykład dokonanie decymacji sygnału (np. odrzucenie co drugiej próbki) z
użyciem instrukcji MATLABowej y(1:N/2)=x(1:2:N) będzie trwało znacznie krócej niż
wykonanie decymacji z użyciem instrukcji
for.
Ilustruje to poniższy wykres uzyskany
poprzez wywołanie skryptu >>czasdecymacji. Czasy obliczeń będą różne w zależności od
szybkości danego egzemplarza komputera i wersji MATLABa.
Skrypt MATLABowy najdogodniej jest uruchamiać poprzez wpisanie jego nazwy w
linii poleceń, tak jak to zasugerowano powyżej. Dzięki temu kolejne uruchomienia tego
skryptu będą możliwe poprzez przywołanie nazwy skryptu znakiem
. Można też najechać
myszką na nazwę skryptu w skorowidzu, kliknąć prawym przyciskiem myszki i z
rozwiniętego menu wybrać Run. Niestety, w pośpiechu studenci wybierają często znajdujące
się na początku menu Open. Jest to najgorszy możliwy sposób uruchomienia skryptu, gdyż
otwiera się skrypt do edycji i nietrudno o nieświadome dopisanie przypadkowych znaków z
klawiatury, które zniszczą skrypt. Stosujmy Open zgodnie z przeznaczeniem, tj. tylko wtedy,
Adam Korzeniewski, Andrzej Leśnicki
Lab. PS, Ćw. 0. MATLAB jako narzędzie w przetwarzaniu sygnałów
3/3
gdy chcemy podglądnąć treść skryptu, czy też przekopiowaliśmy skrypt, zmieniliśmy jego
nazwę i edytujemy go jako własny skrypt.
Rys. 1. Wykres czasu decymacji sygnału dyskretnego w funkcji długości sygnału
Zgłoś jeśli naruszono regulamin