matlab基礎語法筆記(二)
linspace:
函式形式:X=linspace(a,b,n)
在a,b之間以均勻間隔產生一個具有n個數的行向量。預設n為100。
eg:
X=linspace(1,5,5)
執行結果:
X =
1 2 3 4 5
reshape
函式形式B=reshape(A,m,n)
將矩陣A轉換為m*n的矩陣。m*n必須與矩陣A中的數的個數一致。B中的元素是按照A中的元素以m為間隔的列抽樣排列的。
eg:
A=[1 2 3
4 5 6
7 8 9
10 11 12];
B=reshape(A,2,6)
C=reshape(A,6,2)
執行結果:
B =
1 7 2 8 3 9
4 10 5 11 6 12
C =
1 8
4 11
7 3
10 6
2 9
5 12
若A是一個矩陣,A(:)是將矩陣按列的順序轉換為一個列向量。
A(:,n)是取A矩陣的第n列,n必須在矩陣列的範圍內。
A(n:m)是將矩陣按A(:)排序後取的從第n個數到第m個數,是一個行向量。
A(:,M),其中M是一個行向量,將矩陣A的列按照M中的數進行重排。
A(n:m,:) 是矩陣A的n到m行
eg:
A=[1 2 3
4 5 6
7 8 9];
M=[3 2 1];
B=A(:)
C=A(:,2)
D=A(3:6)
E=A(:,M)
F=A(2:3,:)
執行結果:
B =
1
4
7
2
5
8
3
6
9
C=
2
5
8
D=
7 2 5 8
E=
3 2 1
6 5 4
9 8 7
F =
4 5 6
7 8 9
persistent:
用來在函式中申明持久變數。
作用:為了避免每次呼叫函式時建立和釋放系統物件,函式內的系統物件可申明為persistent,這樣可支援只在函式第一次呼叫時建立系統物件。
poly2trellis:
trellis = poly2trellis(ConstraintLength,CodeGenerator)trellis = poly2trellis(ConstraintLength,CodeGenerator,... FeedbackConnection)
作用:將卷積編碼器的多項式輸入轉化為matlab中的網格形式。第一種用於普通轉化,第二種用於前向反饋的轉化。 下圖是一個R=2/3的卷積編碼器,經過S/P轉換變成兩路資料,兩路輸入在暫存器中進行卷積編碼,三路並行的輸出。那麼ConstraintLength就是描述每一路輸入的長度,本編碼器有兩路輸入,對應著下圖第一行暫存器,四個暫存器+一個輸入一共5個輸入;同樣對與第二行一共就有4個輸入。那麼ConstraintLength就應該是[5,4]。
那麼對於函式的第二個引數CodeGenerator的引數比較複雜。如果有n路輸入,m路輸出話,那麼CodeGenerator就是一個n×m的一個矩陣,矩陣的元素是一個比較特殊。Octal number,8進位制的數。在n×m的矩陣中的第(i,j)個元素,其表示第i路的輸入和第j路的連線情況。當第i路的資料和第j路的加法器連線是就將該暫存器的輸出處標為1,如(1,1)連線情況是第一、第四和第五個相連所以用向量表示為"10011"用八進位制表示為"23"(1,2)="11,101"="35";(1,3)="0000"="0";(2,1)="0000"="0";(2,2)="0,101"="05";(2,3)="1,011"="13",最後得到CodeGenerator=[23,35,0;0,05,13]。
這裡的到了產生卷積編碼器的編碼器的表示方法,那麼生成相應的trellis就能在系統中使用了。在命令列中鍵入trellis=poly2trellis([5,4],[23,35,0;0,05,13])得到如下輸出。
>>trellis=poly2trellis([5,4],[23,35,0;0,05,13])
trellis =
numInputSymbols: 4 【兩個輸入2^2=4】
numOutputSymbols: 8 【三個輸出2^3=8】
numStates: 128 【說明:128=2^3*2^4(3是第一級暫存器的個數,4第二級暫存器的個數】
nextStates: [128x4 double] 【輸入乘以中間狀態】
outputs: [128x4 double]