Home > NoiseTools > nt_phase_scramble.m

nt_phase_scramble

PURPOSE ^

y=nt_phase_scramble(x,allsameflag) - scramble time but preserve autocorrelation

SYNOPSIS ^

function y=nt_phase_scramble(x,allsameflag)

DESCRIPTION ^

y=nt_phase_scramble(x,allsameflag) - scramble time but preserve autocorrelation

  y: scrambled data

  x: data to scramble (time X channels, or time X channels X trials
  allsameflag: if true, same random phasor to all channels [default: true]

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function y=nt_phase_scramble(x,allsameflag)
0002 %y=nt_phase_scramble(x,allsameflag) - scramble time but preserve autocorrelation
0003 %
0004 %  y: scrambled data
0005 %
0006 %  x: data to scramble (time X channels, or time X channels X trials
0007 %  allsameflag: if true, same random phasor to all channels [default: true]
0008 %
0009 
0010 if nargin<1; error('!'); end
0011 if nargin<2||isempty(allsameflag); allsameflag=1; end
0012 
0013 
0014 
0015 
0016 [nsample,nchan,ntrial]=size(x);
0017 if rem(nsample,2)~=0 % pad to multiple of 2
0018     x(nsample+1,:,:)=x(nsample,:,:); 
0019 end
0020 
0021 for iTrial=1:ntrial
0022     xx=x(:,:,iTrial);
0023     yy=fft(xx);
0024     if allsameflag
0025          phasor=exp(-2*pi*j*rand(size(x,1)/2-1,1)); % same for all channels
0026          yy=yy.*repmat([1;phasor; 1; conj(flipud(phasor))],1,nchan);
0027     else
0028         phasor=exp(-2*pi*j*rand(size(x,1)/2-1,nchan)); % channel-specific
0029         yy=yy.*[ones(1,nchan);phasor; ones(1,nchan); conj(flipud(phasor))];
0030     end
0031     yy=real(ifft(yy));
0032     y(:,:,iTrial)=yy;
0033 end
0034 
0035 y=y(1:nsample,:,:); % remove padding if need
0036

Generated on Sat 29-Apr-2023 17:15:46 by m2html © 2005