help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How can I increase/decrease (frequency/pitch) and phase using fft/if


From: Sergei Steshenko
Subject: Re: How can I increase/decrease (frequency/pitch) and phase using fft/ifft tia sal22
Date: Mon, 4 Apr 2011 16:17:17 -0700 (PDT)

--- On Mon, 4/4/11, Rick T <address@hidden> wrote:

From: Rick T <address@hidden>
Subject: Re: How can I increase/decrease (frequency/pitch) and phase using 
fft/ifft tia sal22
To: "Sergei Steshenko" <address@hidden>
Cc: address@hidden
Date: Monday, April 4, 2011, 3:37 PM

I need fft/ifft due to the fact that I have to alter various cells in the array 
the signal is stored in (in the frequency domain.  The script is very long.  In 
my experience if you post hundreds of lines of code people will not look at it. 
 That's why I kept it simple and basic.  And asked How can I increase/decrease 
(frequency/pitch) and phase using fft/ifft.  



PS: Unfortunately Sergei the nice solution you sent won't work, I'm dealing 
with large arrays that are exported back out as audio files and fft/ifft seems 
to be the fastest. 
 



On Mon, Apr 4, 2011 at 11:33 AM, Sergei Steshenko <address@hidden> wrote:




--- On Mon, 4/4/11, Rick T <address@hidden> wrote:



From: Rick T <address@hidden>

Subject: How can I increase/decrease (frequency/pitch) and phase using fft/ifft 
tia sal22

To: address@hidden

Date: Monday, April 4, 2011, 2:11 PM



How can I increase/decrease (frequency/pitch) and phase using fft/ifft

 I think I have the basic code but I’m not sure what to do next



PS: Thanks for the help on the last question everyone I decided not to use the 
FOR loop and sin/cos values and just use fft/ifft





to see if this will work.

Example I have a signal that repeats 1 time every second and I want to

 have it repeat 3 times a second instead.

  %Voiceprint raise lower freq phase conjugate signal

 tic





 clear all, clc,clf,tic

 %% Sound /beep calculation complete

 filerawbeepStr='calculations_complete.wav';

 filerawbeeppathStr='/home/rat/Documents/octave/raw/';

 filevoiceprepathStr='/home/rat/Documents/octave/eq_research/main/





 transform/voice/';

 filewavpathStr='/home/rat/Documents/octave/eq_research/main/transform/

 wav/';

 [ybeep, Fsbeep, nbitsbeep] =

 wavread(strcat(filerawbeeppathStr,filerawbeepStr));

 %addpath(”/home/rat/Documents/octave/eq_research/main/transform/”);





 %add path to location of functions

 %1a voice print import

 [vp_sig_orig, fs_rate, nbitsraw] =

 wavread(strcat(filevoiceprepathStr,'voice8000fs.wav'));

 %vp_sig_orig=vp_sig_orig’;





 vp_sig_len=length(vp_sig_orig);

 %2a create frequency domain

 ya_fft = fft(vp_sig_orig);

 vp_sig_phase_orig = unwrap(angle(ya_fft));

 %get Magnitude

 ya_fft_mag = abs(ya_fft);





%3a frequency back to time domain

 ya_ifft=real(ifft(ya_fft));

 %adjust frequency/phase here? How?

 vp_sig_new=real(ifft(ya_fft_mag.*exp(i*vp_sig_phase_orig)));

 subplot(3,1,1), plot(vp_sig_orig),title('1 original time domain')





 subplot(3,1,2), plot(ya_ifft),title('2 rebuild time domain')

 subplot(3,1,3), plot(vp_sig_new),title('3 adjusted time')









-----Inline Attachment Follows-----



_______________________________________________

Help-octave mailing list

address@hidden

https://mailman.cae.wisc.edu/listinfo/help-octave



So, regarding your





"

Example I have a signal that repeats 1 time every second and I want to

 have it repeat 3 times a second instead.

"



- why do you need FFT in the first place ?



I.e. if 'x' is your signal, why not simply write



x = linspace(0, 1, 10); % or whatever other way to generate your signal

y = [x x x]; % repeat x 3 times

plot(y);





?



Regards,

  Sergei.




-- 
-- 
|======================================================|
|http://www.onewithall.net/                            


|======================================================|
|"Knowledge may be the Key"
|"But wisdom unlocks the door"
|"Absolute Power demands absolutely nothing"

"The bourgeois today burns as heretics and hangs as criminals those to whom he 
erects monuments tomorrow" ('Steppenwolf')



|======================================================|

Sorry, but this is mostly nonsense. FFT can't be faster than just moving
data in memory - the latter is my solution.

If your audio comes in frequency domain, then by just _one_ 'ifft' you
convert it into time domain, and then my solution works.

You have already been given a link to 'resample' function.

You appear not to understand fundamental things regarding pitch shift. If
your signal gets repeated a number of times, it is not pitch shift.

Pitch shift does not imply signal repetitions and does not imply change
of number of output samples.

AFAIK pitch shift is implemented through overlapping relatively (compared
to the length of the whole musical piece) short FFTs, and the spectrum is
shifted (rather, scaled - you typically need all spectral componenets to be 
multiplied by the same factor) in order to achieve pitch shift - number of 
samples, as I said, does _not_ change.

Start from http://en.wikipedia.org/wiki/Audio_timescale-pitch_modification -> 
http://en.wikipedia.org/wiki/Audio_timescale-pitch_modification#Pitch_scaling .

Regards,
  Sergei.







reply via email to

[Prev in Thread] Current Thread [Next in Thread]