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: Rick T
Subject: Re: How can I increase/decrease (frequency/pitch) and phase using fft/ifft tia sal22
Date: Mon, 4 Apr 2011 12:37:05 -1000

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')

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

reply via email to

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