[97fff8]: comp / comp_dwilt_long.m Maximize Restore History

Download this file

comp_dwilt_long.m    71 lines (45 with data), 1.5 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
function [coef]=comp_dwilt_long(f,g,M,L)
%COMP_DWILT_LONG Compute Discrete Wilson transform.
%
a=M;
N=L/a;
W=size(f,2);
coef=zeros(2*M,N/2,W,assert_classname(f,g));
if (isreal(f) && isreal(g))
coef2=comp_dgt_long(f,g,a,2*M);
% If the input coefficients are real, the calculations can be
% be simplified. The complex case code also works for the real case.
% Unmodulated case.
coef(1,:,:)=coef2(1,1:2:N,:);
% cosine, first column.
coef(3:2:M,:,:)=sqrt(2)*real(coef2(3:2:M,1:2:N,:));
% sine, second column
coef(M+3:2:2*M,:,:)=-sqrt(2)*imag(coef2(3:2:M,2:2:N,:));
% sine, first column.
coef(2:2:M,:,:)=-sqrt(2)*imag(coef2(2:2:M,1:2:N,:));
% cosine, second column
coef(M+2:2:2*M,:,:)=sqrt(2)*real(coef2(2:2:M,2:2:N,:));
% Nyquest case
if mod(M,2)==0
coef(M+1,:,:) = coef2(M+1,1:2:N,:);
else
coef(M+1,:,:) = coef2(M+1,2:2:N,:);
end;
else
% Complex valued case
coef2=comp_dgt_long(f,g,a,2*M);
% Unmodulated case.
coef(1,:,:)=coef2(1,1:2:N,:);
% odd value of m
coef(2:2:M,:,:)=1/sqrt(2)*i*(coef2(2:2:M,1:2:N,:)-coef2(2*M:-2:M+2,1:2:N,:));
coef(M+2:2:2*M,:,:)=1/sqrt(2)*(coef2(2:2:M,2:2:N,:)+coef2(2*M:-2:M+2,2:2:N,:));
% even value of m
coef(3:2:M,:,:)=1/sqrt(2)*(coef2(3:2:M,1:2:N,:)+coef2(2*M-1:-2:M+2,1:2:N,:));
coef(M+3:2:2*M,:,:)=1/sqrt(2)*i*(coef2(3:2:M,2:2:N,:)-coef2(2*M-1:-2:M+2,2:2:N,:));
% Nyquest case
if mod(M,2)==0
coef(M+1,:,:) = coef2(M+1,1:2:N,:);
else
coef(M+1,:,:) = coef2(M+1,2:2:N,:);
end;
end;