Learn how easy it is to sync an existing GitHub or Google Code repo to a SourceForge project!

## [5f391e]: fourier / dcti.m Maximize Restore History

 ``` 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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97``` ```function c=dcti(f,L,dim) %DCTI Discrete Cosine Transform type I % Usage: c=dcti(f); % c=dcti(f,L); % c=dcti(f,[],dim); % c=dcti(f,L,dim); % % `dcti(f)` computes the discrete cosine transform of type I of the % input signal *f*. If *f* is a matrix then the transformation is applied to % each column. For N-D arrays, the transformation is applied to the first % non-singleton dimension. % % `dcti(f,L)` zero-pads or truncates *f* to length *L* before doing the % transformation. % % `dcti(f,[],dim)` or `dcti(f,L,dim)` applies the transformation along % dimension *dim*. % % The transform is real (output is real if input is real) and % it is orthonormal. % % This transform is its own inverse. % % Let f be a signal of length *L*, let \$c=dcti(f)\$ and define the vector % *w* of length *L* by % % .. w = [1/sqrt(2) 1 1 1 1 ...1/sqrt(2)] % % % .. math:: w\left(n\right)=\begin{cases}\frac{1}{\sqrt{2}} & \text{if }n=0\text{ or }n=L-1\\1 & \text{otherwise}\end{cases} % % Then % % .. L-1 % c(n+1) = sqrt(2/(L-1)) * sum w(n+1)*w(m+1)*f(m+1)*cos(pi*n*m/(L-1)) % m=0 % % .. math:: c\left(n+1\right)=\sqrt{\frac{2}{L-1}}\sum_{m=0}^{L-1}w\left(n\right)w\left(m\right)f\left(m+1\right)\cos\left(\frac{\pi nm}{L-1}\right) % % The implementation of this functions uses a simple algorithm that require % an FFT of length *2L-2*, which might potentially be the product of a large % prime number. This may cause the function to sometimes execute slowly. % If guaranteed high speed is a concern, please consider using one of the % other DCT transforms. % % See also: dctii, dctiv, dsti % % References: rayi90 wi94 % AUTHOR: Peter Soendergaard % TESTING: TEST_PUREFREQ % REFERENCE: REF_DCTI error(nargchk(1,3,nargin)); if nargin<3 dim=[]; end; if nargin<2 L=[]; end; [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,L,dim,'DCTI'); if ~isempty(L) f=postpad(f,L); end; if L==1 c=f; else c=zeros(L,W); f2=[f;flipud(f(2:L-1,:))]/sqrt(2); f2(1,:)=f2(1,:)*sqrt(2); f2(L,:)=f2(L,:)*sqrt(2); % Do DFT. s1=fft(f2)/sqrt(2*L-2); % This could be done by a repmat instead. for w=1:W c(:,w)=s1(1:L,w)+[0;s1(2*L-2:-1:L+1,w);0]; end; c(2:L-1,:)=c(2:L-1,:)/sqrt(2); if isreal(f) c=real(c); end; end; c=assert_sigreshape_post(c,dim,permutedsize,order); ```