 |
School of Computer Science
Computer Science COMP 199 (Winter term)
Excursions in Computing Science
%MATLABpak09: cosine, makeDFT, makeDiag, unmakeDiag, binarize, gaussian
%cosine.m THM 060802
%function Cn = cosine(n,f) generates n-point cosine vector of frequency f
function Cn = cosine(n,f)
for j=1:n, Cn(j) = cos(2*pi*(j-1)*f/n); end;
%makeDFT.m THM 060704
%function Fn = makeDFT(n) generates n*n Fourier transform matrix
function Fn = makeDFT(n)
for j=1:n, for k=1:n, En(j,k)=mod((j-1)*(k-1),n); end; end;
Fn = exp((i*2*pi/n).*En)./sqrt(n);
%makeDiag.m THM 060704
%function Dn = makeDiag(n,Mn)
%converts n*n matrix Mn into 1*n diagonal Dn 00,01,10,02,11,20, ..
%e.g. j\k 0 1 2 3
% 0 0 1 3 5
% 1 2 4 7 10
% 2 5 8 11 13
% 3 9 12 14 15
function Dn = makeDiag(n,Mn)
j = 0; startNextLev = 1; levlen = 1; lev = 0;
for pos = 0:n^2 - 1
if pos==startNextLev % levels defined by j+k = 0, 1, 2, 3, ..
lev = lev + 1;
levlen = (lev=n)*(2*n-1-lev);
% if lev=n % this will happen when row 0 is full; starts are now in col n-1
j = k+1-n;
k = n-1;
end
Dn(pos+1) = Mn(j+1,k+1); % reset origins from 0 to 1
j = j + 1;
end
%unmakeDiag.m THM 060704
%function Mn = unmakeDiag(n,Dn)
%converts 1*n diagonal Dn into n*n matrix Mn 00,01,10,02,11,20, ..
function Mn = unmakeDiag(n,Dn) % <-- this line differs from makeDiag
j = 0; startNextLev = 1; levlen = 1; lev = 0;
for pos = 0:n^2 - 1
if pos==startNextLev % levels defined by j+k = 0, 1, 2, 3, ..
lev = lev + 1;
levlen = (lev=n)*(2*n-1-lev);
% if lev=n % this will happen when row 0 is full; starts are now in col n-1
j = k+1-n;
k = n-1;
end
Mn(j+1,k+1) = Dn(pos+1); % <-- this line differs from makeDiag
j = j + 1;
end
%binarize.m THM 060704
%function B = binarize(A) converts A elements to 0 if abs < .5 or 1 otherwise
function B = binarize(A)
s = size(A); % assume 2D array
for j = 1:s(1)
for k = 1:s(2)
B(j,k) = abs(A(j,k))>=0.5;
end
end
%gaussian.m THM 060803
%function Gn = gaussian(n,s) generates n-point gaussian vector of std dev s
function Gn = gaussian(n,s)
%c = ceil(n/2); % symmetrize about zero: 1,2,3->-1,0,1; 1,2,3,4->-1,0,1,2
%for j=1:n, Gn(j) = exp(-(j-c)^2/2/s^2)/s/sqrt(2*pi); end; %mean is mid-range
for j=1:n, Gn(j) = exp(-(j-1)^2/2/s^2)/s/sqrt(2*pi); end; %mean is zero