## FFT and IFFT: Random Phases

### Nycholas Maia (view profile)

on 21 Mar 2019
Latest activity Edited by Brittany Scheid

on 16 Jun 2019

### Brittany Scheid (view profile)

I imported a single audio file to MATLAB workspace.
After I apply the FFT:
Y = fft(signal)
How can I random change the audio phases before apply the Inverse FFT and get the 'new_signal'?
new_signal = ifft(Y)
How can I do it?

R2018b

### Brittany Scheid (view profile)

on 16 Jun 2019
Edited by Brittany Scheid

### Brittany Scheid (view profile)

on 16 Jun 2019

Following the comment by David Goodmanson above, here is what I used to randomize an array of timeseries data:
function randX = phaseRandomize(X)
% Returns a phase-randomized version of the input data X. If X is an array,
% each row is treated as an independant time series, and columns represent
% sample points.
[N,L]=size(X);
Y=fft(X,[],2); % Get spectrum
% Add random phase shifts (negative for conjugates), preserve DC offset
rnd_theta= -pi + (2*pi).*rand(N,L/2-1);
Y(:,2:L/2)=Y(:,2:L/2).*exp(1i*rnd_theta);
Y(:,L/2+2:L)=Y(:,L/2+2:L).*exp(-1i*flip(rnd_theta,2));
% return phase-randomized data
randX =ifft(Y,[],2);
end

### David Goodmanson (view profile)

on 22 Mar 2019

Hi Nycholas,
Assuming signal is real and of length n, n even, then
Y(1) is for frequency 0, the DC contribution, and it's real. Don't mess with that point.
Y(2) and Y(n) are complex conjugates. You can multiply one of that pair by exp(i*theta) and the other by exp(-i*theta), where theta is a random angle with 0 <= theta < 2*pi. the new Y(2) and Y(n) remain complex conugates.
In general from k = 2 to n/2, Y(k) and Y(n+2-k) form a complex conjugate pair. For each of those pairs, do the same kind of multiplcation as above, with a different random angle. Each pair remain complex conjugates.
Y(n/2+1) is real. Don't mess with that point either.
ifft back.
Here the random phases are totally uncorrelated from frequency to frequency, which may or may not be physically realistic.

Nycholas Maia

### Nycholas Maia (view profile)

on 22 Mar 2019
David,
I appreciate the good math background, and you are right.
Please, could you give me a MATLAB script example of this process?
Thanks!
David Goodmanson

### David Goodmanson (view profile)

on 23 Mar 2019
Hi NM, what have you tried so far?
David Daminelli

### David Daminelli (view profile)

on 1 Jun 2019
Hello NM and DG! I'm working on a project that needs this same function, and I've done an algorithm that does that. It is here https://www.mathworks.com/matlabcentral/answers/465112-help-with-sound-function, followed by a question I had during the project, if they can help it would be usefull!