What is the window needed for Triangular puls before FFT ?

I have a triangular signal and need to do FFT. Do it directly would lead to many harmonics in the spectrum and leaks. I tried to window the signal before with no benefits. Is there anyway to workaround ?

Answers (2)

a window function is not going to eliminate the other peaks. They are the actual result of the transform since your signal is not sinusoidal. you could try a bandpass filter if you have a known frequency range; you will still have other peaks but they will be smaller. Are you trying to determine frequency, amplitude or phase?

3 Comments

I am trying to determine frequency. I have tried to interpolate with the spline in order to change the shape which did but again in the frequency domain there are a lot of nearby peaks. The data are running from 0:515 days and sampled each day. Max freq is 0.5 ( 0.5 cycle per day ). Since the data are real data retrieved so fs=1 and nfft=1024. Do you suggest to manipulate this?
Are you saying you sample once a day for 515 days? Really an fft or the pwelch function should get you what you need, the selected window function will not change the answer very much. with a sampling rate of 1/day, the maximum frequency you can determine is .5 cycle/day. As an example see the following code for a .3 cycle/day triangle wave.
t=1:1:100;
d=sawtooth(2*pi*.3*t,.5);
fs=1;
nfft=fs*20; %1 cycle / 20 days will be the lowest freq. we can measure, adjust as needed.
[P,F]=pwelch(d,ones(nfft,1),nfft/2,nfft,fs);
[~,i]=max(P);
F(i)
Let me show how the original signal look like ( See image). I have tried with FFT with no results at all. As i mention the discontinuity leads to peaks spreaded allover. If you zoom in the signal you can find that peak width is for 2 days which make sense ( in 2 days we have 3 samples since it has a one sample per day). I have tried the pwelch i get better results but can't be interpreted.

Sign in to comment.

oh ok, I missed the pulse aspect of this. a Fourier transform is not the way to go here. I would just do some basic logic to look for points > 0 and points < 0 and go from there.
lows=find(d<min(d)/2);
highs=find(d>max(d)/2);

2 Comments

Do you want me to eliminate zeros from the signal before processing ?
It is not really clear what you are trying to determine about the signal.

Sign in to comment.

Categories

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

Asked:

on 21 Oct 2013

Commented:

on 30 Oct 2013

Community Treasure Hunt

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

Start Hunting!