29 views (last 30 days)

Product: Matlab 2017b

If we have data set "A" which consists of time versus light absorbance.There is another set of data "B". Both data are sampled at the same rate Fs.

The two sets are to be divided in the frequency domain. C= fft(A)/fft(B). Prior to division, in order to make the length of A and B equal, zero filling in done or one can use the fft(X, n). Sometimes there are odd number of data points and sometimes, even in A and B after zero filling.

In such a case, how do we make a frequency axis for C in MATLAB? The number of original data points have changed after zero filling in either A or B.

Example: The key question is, assume we had initially 1000 data points in A, and 800 data points in B. Let us use C= fft (A, 1024) ./ fft(B, 1024). We get a new vector C. How should we make a frequency scale for C now given that the number of data points were changed.

Thanks.

Star Strider
on 21 Apr 2019

I am not certain what you are doing. One way to make the frequencies equal would be to use the second argument, ‘n’, in the fft function, to be the same for all of them (and preferably relatively large, so that all your data have the same frequency vector). This has the effect of ‘zero-padding’ the argument vector, increasing the frequency resolution and equalising the frequencies of the various signals.

The only way to determine if this approach is appropriate to your data is to try it with them.

Star Strider
on 21 Apr 2019

As always, my pleasure.

Longer time-domain record lengths will be best to detect low-frequency signals, particularly if your data are noisy.

With a 250 Hz sampling frequency, a record of 1000 samples would be 4 seconds in length. A signal that would complete 1 cycle in 4 seconds would have a frequency of 0.25 Hz. For a record of 800 samples, that frequency would be about 0.3125 Hz. The lowest frequency signal that would complete 1 cycle in a given record length would then be:

at least as I calculate it.

Star Strider
on 21 Apr 2019

As always, my pleasure.

‘... whenever we do zero padding of the original data by using fft( X, n) option, our frequency axis should be made as per our chosen "n" rather than original length of t.’

Yes.

The ‘Fv’ vector should be:

Fv = linspace(0, 1, fix(numel(FTy1)/2)+1)*Fn;

My apologies for the error. (Since ‘FTy1’ and ‘FTy2’ are the same lengths here, there is no need to compute the ‘Fv’ vector separately for each one.) This also assumes the two are vectors. If not, use the length function instead of numel to calculate the correct length of ‘Fv’.

Opportunities for recent engineering grads.

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

Start Hunting!
## 0 Comments

Sign in to comment.