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 ?

Risposte (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 Commenti

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.

Accedi per commentare.

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 Commenti

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.

Accedi per commentare.

Richiesto:

il 21 Ott 2013

Commentato:

il 30 Ott 2013

Community Treasure Hunt

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

Start Hunting!

Translated by