1% computes product B*temp with B = L(b)+L(c1)L(Zr1)
'+L(c2)L(Zr2)'
2% temp has m columns, the result
is stored in temp.
3% STEP 1: L(Zr1)
'*temp in temp1a, thus (temp'*L(Zr1))
'
8temp1t=reshape(temp,m^2,N)
';
9temp1b=[zeros(m,m); r1(1:m*(N-1),:)]'; % Zr1
'
10temp1b=reshape(temp1b,m^2,N)';
11temp1b=flipud(temp1b); % termen in omgekeerde volgorde
13dim=2*2^ceil(log2(size(temp1t,1)));
14temp1t=fft(temp1t,dim).
';
15temp1b=fft(temp1b,dim).';
17% now reblock
for products
18temp1t=reshape(temp1t,m,m*dim);
19temp1b=reshape(temp1b,m,m*dim).
';
22 temp1b((i-1)*m+1:i*m,1:m)=temp1t(1:m,(i-1)*m+1:i*m)*...
23 temp1b((i-1)*m+1:i*m,1:m);
27temp1b=reshape(temp1b,m^2,dim).
';
29temp1b=real(ifft(temp1b))';
30temp1b=reshape(temp1b,m,m*dim)
';
33 temp1a(1:m,(lus1-1)*m+1:lus1*m)=temp1b((lushelp-2+lus1)*m+1:(lushelp-1+lus1)*m,:);
38% STEP 2: L(c1)L(Zr1)
'temp in temp1a
42temp1t=reshape(temp1t,m^2,N)
';
44temp1b=reshape(temp1b,m^2,N)
';
46dim=2*2^ceil(log2(size(temp1t,1)));
47temp1t=fft(temp1t,dim).';
48temp1b=fft(temp1b,dim).
';
50% now reblock for products
51temp1t=reshape(temp1t,m,m*dim).';
52temp1b=reshape(temp1b,m,m*dim).
';
55 temp1b((i-1)*m+1:i*m,1:m)=temp1b((i-1)*m+1:i*m,1:m)*...
56 temp1t((i-1)*m+1:i*m,1:m);
61temp1b=reshape(temp1b,m^2,dim).
';
63temp1b=real(ifft(temp1b))';
64temp1b=reshape(temp1b,m,m*dim)
';
66temp1a=temp1b(1:m*N,:);
69% STEP 3: LZr2'*temp in temp2a
72temp1t=reshape(temp,m^2,N)
';
73temp1b=[zeros(m,m); r2(1:m*(N-1),:)]'; % Zr1
'
74temp1b=reshape(temp1b,m^2,N)';
75temp1b=flipud(temp1b); % termen in omgekeerde volgorde
77dim=2*2^ceil(log2(size(temp1t,1)));
78temp1t=fft(temp1t,dim).
';
79temp1b=fft(temp1b,dim).';
81% now reblock
for products
82temp1t=reshape(temp1t,m,m*dim);
83temp1b=reshape(temp1b,m,m*dim).
';
86 temp1b((i-1)*m+1:i*m,1:m)=temp1t(1:m,(i-1)*m+1:i*m)*...
87 temp1b((i-1)*m+1:i*m,1:m);
91temp1b=reshape(temp1b,m^2,dim).
';
93temp1b=real(ifft(temp1b))';
94temp1b=reshape(temp1b,m,m*dim)
';
97 temp2a(1:m,(lus1-1)*m+1:lus1*m)=temp1b((lushelp-2+lus1)*m+1:(lushelp-1+lus1)*m,:);
102% STEP 4: (L(c1)*L(Zr1)
'+L(c2)*L(Zr2)')*temp in temp1a
107temp1t=reshape(temp1t,m^2,N)';
109temp1b=reshape(temp1b,m^2,N)';
111dim=2*2^ceil(log2(size(temp1t,1)));
112temp1t=fft(temp1t,dim).
';
113temp1b=fft(temp1b,dim).';
115% now reblock
for products
116temp1t=reshape(temp1t,m,m*dim).
';
117temp1b=reshape(temp1b,m,m*dim).';
120 temp1b((i-1)*m+1:i*m,1:m)=temp1b((i-1)*m+1:i*m,1:m)*...
121 temp1t((i-1)*m+1:i*m,1:m);
126temp1b=reshape(temp1b,m^2,dim).';
128temp1b=real(ifft(temp1b))
';
129temp1b=reshape(temp1b,m,m*dim)';
131temp1a=temp1a+temp1b(1:m*N,:);
134% STEP 5: B*temp in temp.
136temp=temp
'; % transposing of step 1 is restored
140temp1t=reshape(temp1t,m^2,size(temp,1)/m)
';
142temp1b=reshape(temp1b,m^2,size(b,1)/m)
';
144dim=2*2^ceil(log2(size(temp1t,1)));
145temp1t=fft(temp1t,dim).';
146temp1b=fft(temp1b,dim).
';
148% now reblock for products
149temp1t=reshape(temp1t,m,m*dim).';
150temp1b=reshape(temp1b,m,m*dim).
';
153 temp1b((i-1)*m+1:i*m,1:m)=temp1b((i-1)*m+1:i*m,1:m)*...
154 temp1t((i-1)*m+1:i*m,1:m);
159temp1b=reshape(temp1b,m^2,dim).
';
161temp1b=real(ifft(temp1b))';
162temp1b=reshape(temp1b,m,m*dim)
';
164temp=temp1a+temp1b(1:size(temp,1),:);