forked from ltfat/ltfat
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
large patch: converted all files to Unix lineendings
- Loading branch information
Showing
121 changed files
with
11,060 additions
and
11,060 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,32 +1,32 @@ | ||
function classname = assert_classname(varargin) | ||
% ASSERT_CLASSNAME | ||
% | ||
% Returns name of the "simplest" data type. | ||
|
||
% Array of data types to be checked. Ordered from the "simplest" to the | ||
% most "complex". | ||
typesToTest = {'single','double'}; | ||
|
||
if nargin==0 || isempty(varargin) | ||
classname = 'double'; | ||
return; | ||
end | ||
|
||
if ~all(cellfun(@(vEl) isnumeric(vEl),varargin)) | ||
error('%s: Parameters are not numeric types. ',upper(mfilename)); | ||
end | ||
|
||
% Shortcut to double | ||
if all(cellfun(@(vEl) isa(vEl,'double'),varargin)) | ||
classname = 'double'; | ||
return; | ||
end | ||
|
||
% Go trough all the types, halt if any of the inputs is of the specified | ||
% type. | ||
for ii=1:numel(typesToTest) | ||
if any(cellfun(@(vEl) isa(vEl,typesToTest{ii}),varargin)) | ||
classname = typesToTest{ii}; | ||
return; | ||
end | ||
end | ||
function classname = assert_classname(varargin) | ||
% ASSERT_CLASSNAME | ||
% | ||
% Returns name of the "simplest" data type. | ||
|
||
% Array of data types to be checked. Ordered from the "simplest" to the | ||
% most "complex". | ||
typesToTest = {'single','double'}; | ||
|
||
if nargin==0 || isempty(varargin) | ||
classname = 'double'; | ||
return; | ||
end | ||
|
||
if ~all(cellfun(@(vEl) isnumeric(vEl),varargin)) | ||
error('%s: Parameters are not numeric types. ',upper(mfilename)); | ||
end | ||
|
||
% Shortcut to double | ||
if all(cellfun(@(vEl) isa(vEl,'double'),varargin)) | ||
classname = 'double'; | ||
return; | ||
end | ||
|
||
% Go trough all the types, halt if any of the inputs is of the specified | ||
% type. | ||
for ii=1:numel(typesToTest) | ||
if any(cellfun(@(vEl) isa(vEl,typesToTest{ii}),varargin)) | ||
classname = typesToTest{ii}; | ||
return; | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,26 +1,26 @@ | ||
function cout=comp_col2diag(cin); | ||
%COMP_COL2DIAG transforms columns to diagonals (in a special way) | ||
% | ||
% This function transforms the first column to the main diagonal. The | ||
% second column to the first side-diagonal below the main diagonal and so | ||
% on. | ||
% | ||
% This way fits well the connection of matrix and spreading function, see | ||
% spreadfun. | ||
% | ||
% This function is its own inverse. | ||
|
||
% AUTHOR : Peter L. Søndergaard. | ||
% TESTING: OK | ||
% REFERENCE: OK | ||
|
||
L=size(cin,1); | ||
cout=zeros(L,assert_classname(cin)); | ||
|
||
jj=(0:L-1).'; | ||
for ii=0:L-1 | ||
cout(ii+1,:)=cin(ii+1,mod(ii-jj,L)+1); | ||
end; | ||
|
||
|
||
|
||
function cout=comp_col2diag(cin); | ||
%COMP_COL2DIAG transforms columns to diagonals (in a special way) | ||
% | ||
% This function transforms the first column to the main diagonal. The | ||
% second column to the first side-diagonal below the main diagonal and so | ||
% on. | ||
% | ||
% This way fits well the connection of matrix and spreading function, see | ||
% spreadfun. | ||
% | ||
% This function is its own inverse. | ||
|
||
% AUTHOR : Peter L. Søndergaard. | ||
% TESTING: OK | ||
% REFERENCE: OK | ||
|
||
L=size(cin,1); | ||
cout=zeros(L,assert_classname(cin)); | ||
|
||
jj=(0:L-1).'; | ||
for ii=0:L-1 | ||
cout(ii+1,:)=cin(ii+1,mod(ii-jj,L)+1); | ||
end; | ||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,92 +1,92 @@ | ||
function [coef]=comp_dgt_fb(f,g,a,M) | ||
%COMP_DGT_FB Filter bank DGT | ||
% Usage: c=comp_dgt_fb(f,g,a,M); | ||
% | ||
% This is a computational routine. Do not call it directly. | ||
% | ||
% See help on DGT. | ||
|
||
% AUTHOR : Peter L. Søndergaard. | ||
|
||
% Calculate the parameters that was not specified. | ||
L=size(f,1); | ||
N=L/a; | ||
gl=length(g); | ||
W=size(f,2); % Number of columns to apply the transform to. | ||
glh=floor(gl/2); % gl-half | ||
|
||
|
||
% Conjugate the window here. | ||
g=conj(fftshift(g)); | ||
|
||
coef=zeros(M,N,W,assert_classname(f,g)); | ||
|
||
% ----- Handle the first boundary using periodic boundary conditions. --- | ||
for n=0:ceil(glh/a)-1 | ||
|
||
% Periodic boundary condition. | ||
fpart=[f(L-(glh-n*a)+1:L,:);... | ||
f(1:gl-(glh-n*a),:)]; | ||
|
||
fg=bsxfun(@times,fpart,g); | ||
|
||
% Do the sum (decimation in frequency, Poisson summation) | ||
coef(:,n+1,:)=sum(reshape(fg,M,gl/M,W),2); | ||
|
||
end; | ||
|
||
% ----- Handle the middle case. --------------------- | ||
for n=ceil(glh/a):floor((L-ceil(gl/2))/a) | ||
|
||
fg=bsxfun(@times,f(n*a-glh+1:n*a-glh+gl,:),g); | ||
|
||
% Do the sum (decimation in frequency, Poisson summation) | ||
coef(:,n+1,:)=sum(reshape(fg,M,gl/M,W),2); | ||
end; | ||
|
||
% ----- Handle the last boundary using periodic boundary conditions. --- | ||
for n=floor((L-ceil(gl/2))/a)+1:N-1 | ||
|
||
% Periodic boundary condition. | ||
fpart=[f((n*a-glh)+1:L,:);... % L-n*a+glh elements | ||
f(1:n*a-glh+gl-L,:)]; % gl-L+n*a-glh elements | ||
|
||
fg=bsxfun(@times,fpart,g); | ||
|
||
% Do the sum (decimation in frequency, Poisson summation) | ||
coef(:,n+1,:)=sum(reshape(fg,M,gl/M,W),2); | ||
end; | ||
|
||
% --- Shift back again to make it a frequency-invariant system. --- | ||
for n=0:N-1 | ||
coef(:,n+1,:)=circshift(coef(:,n+1,:),n*a-glh); | ||
end; | ||
|
||
|
||
coef=fft(coef); | ||
|
||
|
||
|
||
% Simple code using a lot of circshifts. | ||
% Move f initially so it lines up with the initial fftshift of the | ||
% window | ||
%f=circshift(f,glh); | ||
%for n=0:N-1 | ||
% Do the inner product. | ||
%fg=circshift(f,-n*a)(1:gl,:).*gw; | ||
|
||
% Periodize it. | ||
%fpp=zeros(M,W); | ||
%for ii=0:gl/M-1 | ||
% fpp=fpp+fg(ii*M+1:(ii+1)*M,:); | ||
%end; | ||
% fpp=sum(reshape(fg,M,gl/M,W),2); | ||
|
||
% Shift back again. | ||
% coef(:,n+1,:)=circshift(fpp,n*a-glh); %),M,1,W); | ||
|
||
%end; | ||
|
||
|
||
|
||
|
||
function [coef]=comp_dgt_fb(f,g,a,M) | ||
%COMP_DGT_FB Filter bank DGT | ||
% Usage: c=comp_dgt_fb(f,g,a,M); | ||
% | ||
% This is a computational routine. Do not call it directly. | ||
% | ||
% See help on DGT. | ||
|
||
% AUTHOR : Peter L. Søndergaard. | ||
|
||
% Calculate the parameters that was not specified. | ||
L=size(f,1); | ||
N=L/a; | ||
gl=length(g); | ||
W=size(f,2); % Number of columns to apply the transform to. | ||
glh=floor(gl/2); % gl-half | ||
|
||
|
||
% Conjugate the window here. | ||
g=conj(fftshift(g)); | ||
|
||
coef=zeros(M,N,W,assert_classname(f,g)); | ||
|
||
% ----- Handle the first boundary using periodic boundary conditions. --- | ||
for n=0:ceil(glh/a)-1 | ||
|
||
% Periodic boundary condition. | ||
fpart=[f(L-(glh-n*a)+1:L,:);... | ||
f(1:gl-(glh-n*a),:)]; | ||
|
||
fg=bsxfun(@times,fpart,g); | ||
|
||
% Do the sum (decimation in frequency, Poisson summation) | ||
coef(:,n+1,:)=sum(reshape(fg,M,gl/M,W),2); | ||
|
||
end; | ||
|
||
% ----- Handle the middle case. --------------------- | ||
for n=ceil(glh/a):floor((L-ceil(gl/2))/a) | ||
|
||
fg=bsxfun(@times,f(n*a-glh+1:n*a-glh+gl,:),g); | ||
|
||
% Do the sum (decimation in frequency, Poisson summation) | ||
coef(:,n+1,:)=sum(reshape(fg,M,gl/M,W),2); | ||
end; | ||
|
||
% ----- Handle the last boundary using periodic boundary conditions. --- | ||
for n=floor((L-ceil(gl/2))/a)+1:N-1 | ||
|
||
% Periodic boundary condition. | ||
fpart=[f((n*a-glh)+1:L,:);... % L-n*a+glh elements | ||
f(1:n*a-glh+gl-L,:)]; % gl-L+n*a-glh elements | ||
|
||
fg=bsxfun(@times,fpart,g); | ||
|
||
% Do the sum (decimation in frequency, Poisson summation) | ||
coef(:,n+1,:)=sum(reshape(fg,M,gl/M,W),2); | ||
end; | ||
|
||
% --- Shift back again to make it a frequency-invariant system. --- | ||
for n=0:N-1 | ||
coef(:,n+1,:)=circshift(coef(:,n+1,:),n*a-glh); | ||
end; | ||
|
||
|
||
coef=fft(coef); | ||
|
||
|
||
|
||
% Simple code using a lot of circshifts. | ||
% Move f initially so it lines up with the initial fftshift of the | ||
% window | ||
%f=circshift(f,glh); | ||
%for n=0:N-1 | ||
% Do the inner product. | ||
%fg=circshift(f,-n*a)(1:gl,:).*gw; | ||
|
||
% Periodize it. | ||
%fpp=zeros(M,W); | ||
%for ii=0:gl/M-1 | ||
% fpp=fpp+fg(ii*M+1:(ii+1)*M,:); | ||
%end; | ||
% fpp=sum(reshape(fg,M,gl/M,W),2); | ||
|
||
% Shift back again. | ||
% coef(:,n+1,:)=circshift(fpp,n*a-glh); %),M,1,W); | ||
|
||
%end; | ||
|
||
|
||
|
||
|
Oops, something went wrong.