V_RFFT Calculate the DFT of real data Y=(X,N,D) Data is truncated/padded to length N if specified. N even: (N+2)/2 points are returned with the first and last being real N odd: (N+1)/2 points are returned with the first being real In all cases floor(1+N/2) points are returned D is the dimension along which to do the DFT
0001 function y=v_rfft(x,n,d) 0002 %V_RFFT Calculate the DFT of real data Y=(X,N,D) 0003 % Data is truncated/padded to length N if specified. 0004 % N even: (N+2)/2 points are returned with 0005 % the first and last being real 0006 % N odd: (N+1)/2 points are returned with the 0007 % first being real 0008 % In all cases floor(1+N/2) points are returned 0009 % D is the dimension along which to do the DFT 0010 0011 % Copyright (C) Mike Brookes 1998 0012 % Version: $Id: v_rfft.m 10865 2018-09-21 17:22:45Z dmb $ 0013 % 0014 % VOICEBOX is a MATLAB toolbox for speech processing. 0015 % Home page: http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html 0016 % 0017 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0018 % This program is free software; you can redistribute it and/or modify 0019 % it under the terms of the GNU General Public License as published by 0020 % the Free Software Foundation; either version 2 of the License, or 0021 % (at your option) any later version. 0022 % 0023 % This program is distributed in the hope that it will be useful, 0024 % but WITHOUT ANY WARRANTY; without even the implied warranty of 0025 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0026 % GNU General Public License for more details. 0027 % 0028 % You can obtain a copy of the GNU General Public License from 0029 % http://www.gnu.org/copyleft/gpl.html or by writing to 0030 % Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA. 0031 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0032 0033 s=size(x); 0034 if prod(s)==1 0035 y=x 0036 else 0037 if nargin <3 || isempty(d) 0038 d=find(s>1,1); 0039 if nargin<2 0040 n=s(d); 0041 end 0042 end 0043 if isempty(n) 0044 n=s(d); 0045 end 0046 y=fft(x,n,d); 0047 y=reshape(y,prod(s(1:d-1)),n,prod(s(d+1:end))); 0048 s(d)=1+fix(n/2); 0049 y(:,s(d)+1:end,:)=[]; 0050 y=reshape(y,s); 0051 end