FFT on a segment of a signal

5 views (last 30 days)
tanlc
tanlc on 5 Feb 2011
hi, i am trying to analyse a signal in a .wav file by performing FFT on the signal. however i only want to perform the FFT on a particular segment of the signal at the range around the maximum point of the signal. have tried google-ing around for help on the code to segment out the signal but cant seem to work. can anyone guide mi on this?
  1 Comment
Andreas Goser
Andreas Goser on 5 Feb 2011
There are 2 aspects of your code - findinf a maximum and the doing the fft. Without an example, it is difficult to say what fails.

Sign in to comment.

Accepted Answer

José Goulart
José Goulart on 5 Feb 2011
Function findpeaks() finds all the local maxima on your data. After that you would have to find the largest of the points returned.
In this case, if you just want to take the neighbourhood around the maximum point of the data, it is simpler to use max() function.
First note that, as your data is an audio signal, you should call it passing absolute values of your data as argument in order to consider both positive and negative peaks.
Here is the code:
>> abdata = abs(DataArray);
>> [mx,pmx] = max(DataArray);
>> N = 1024; %for instance
>> dataToFFT = DataArray(pmx-N:pmx+N-1);
After that, just compute the FFT normally.

More Answers (1)

tanlc
tanlc on 5 Feb 2011
the following are the codes for performing FFT.
L = length(DataArray);
NFFT = 2^nextpow2(L);
FrameLength_2 = NFFT/2 ;
f = Fs/2*linspace(0,1,FrameLength_2/2+1);
Y = abs(fft(DataArray));
for the part to find the maximum, i have tried using the function findpeaks(), realmax but none seems to work.
correct me if i am wrong, how i plan to approach this is that 1. find the maximum point in the signal 2. from the maximum point, take +/- N numbers of samples to perform FFT

Categories

Find more on Fourier Analysis and Filtering in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!