Flicker detection with DFT Problem

E

Eren AYKIN

Hello Everybody,
I'm not very experienced with DFT and FFTW library and I want to ask
your opinion about the results I get.
My aim is to determine if the sample input sequence is flickering with
some frequency.
In my project, I'm capturing frames from a video and geting the mean
pixel value of some pixels with a certain property. I get one mean
value for each frame. I want to check if these mean pixel values are
flickering with the time or staying flat in comparison (not changing
very much). For example:
if I'm capturing 25 frames per second, I can detect if the pixel mean
values are changing with a frequency close to 10Hz. if the input sample
to be used in DFT is like: 230, 212, 236, 214, 243,...
then I can say that values are changing up and down (flickering) with a
frequency near 10 Hz. If the output array has some positive values
corresponding to 8,9,10,11,12Hz's I can classify this input sequence as
flickering.

In order to detect some frequencies in the sample input, I have used
the following code:
//n is the number of input samples
// averageRed is the array that holds the mean pixel values of each
frame

long double *in;
fftwl_complex *out;
fftwl_plan p;
in = (long double*) fftw_malloc(sizeof(long double) * n);
for (int i=0; i<n; i++){
in = (long double)averageRed;
}
out = (fftwl_complex*) fftw_malloc(sizeof(fftwl_complex) *
averageIndex);
p = fftwl_plan_dft_r2c_1d(n, in, out, FFTW_ESTIMATE);
fftwl_execute(p);
fftwl_destroy_plan(p);
fftw_free(in);
for (int i=0; i<averageIndex; i++){
fprintf(output, "output %d -> %f, %f\n", i, out[0], out[1]);
}
fftw_free(out);

The resuls of this calculation are as follows:
First 15 input to the transform: 223.000000,195.000000, 238.000000,
217.625000, 232.600000, 218.857143, 215.333333, 233.000000, 225.800000,
223.600000, 226.2857, 182.500000, 222.200000, 213.750000, 213.400000,
....
First 10 Outputs of the transform:
output 0 -> -2.000000, 0.000000
output 1 -> 0.000000, -2.000000
output 2 -> 0.000000, -0.000000
output 3 -> -2.000000, 0.000000
output 4 -> -0.000000, -2.000000
output 5 -> 0.000000, -0.000000
output 6 -> -2.000000, 0.000000
output 7 -> -0.000000, -2.000000
output 8 -> 0.000000, -0.000000
output 9 -> -2.000000, 0.000000
output 10 -> -0.000000, -2.000000

My questions are:
1-) It goes like: -2,0,0 until 264th output and later values are all 0
but the input array had 353 samples. Shouldn't it go until 176th frame
instead of the 264th?
*2-) The output values doesn't seem right to me. I think real parts
should not be negative and they should'nt repeat the same pattern!
3-) I should normalize the output by multiplying each output value by
25/353 (sample rate/N) right?

Hope that I can get some help about this.
Regards.
 
E

Eren AYKIN

Excuse me, I was going to send this to the comp.dsp mailing list. But I
would appreciate any help from here too ofcourse.
Sorry again.

Eren AYKIN yazdi:
Hello Everybody,
I'm not very experienced with DFT and FFTW library and I want to ask
your opinion about the results I get.
My aim is to determine if the sample input sequence is flickering with
some frequency.
In my project, I'm capturing frames from a video and geting the mean
pixel value of some pixels with a certain property. I get one mean
value for each frame. I want to check if these mean pixel values are
flickering with the time or staying flat in comparison (not changing
very much). For example:
if I'm capturing 25 frames per second, I can detect if the pixel mean
values are changing with a frequency close to 10Hz. if the input sample
to be used in DFT is like: 230, 212, 236, 214, 243,...
then I can say that values are changing up and down (flickering) with a
frequency near 10 Hz. If the output array has some positive values
corresponding to 8,9,10,11,12Hz's I can classify this input sequence as
flickering.

In order to detect some frequencies in the sample input, I have used
the following code:
//n is the number of input samples
// averageRed is the array that holds the mean pixel values of each
frame

long double *in;
fftwl_complex *out;
fftwl_plan p;
in = (long double*) fftw_malloc(sizeof(long double) * n);
for (int i=0; i<n; i++){
in = (long double)averageRed;
}
out = (fftwl_complex*) fftw_malloc(sizeof(fftwl_complex) *
averageIndex);
p = fftwl_plan_dft_r2c_1d(n, in, out, FFTW_ESTIMATE);
fftwl_execute(p);
fftwl_destroy_plan(p);
fftw_free(in);
for (int i=0; i<averageIndex; i++){
fprintf(output, "output %d -> %f, %f\n", i, out[0], out[1]);
}
fftw_free(out);

The resuls of this calculation are as follows:
First 15 input to the transform: 223.000000,195.000000, 238.000000,
217.625000, 232.600000, 218.857143, 215.333333, 233.000000, 225.800000,
223.600000, 226.2857, 182.500000, 222.200000, 213.750000, 213.400000,
...
First 10 Outputs of the transform:
output 0 -> -2.000000, 0.000000
output 1 -> 0.000000, -2.000000
output 2 -> 0.000000, -0.000000
output 3 -> -2.000000, 0.000000
output 4 -> -0.000000, -2.000000
output 5 -> 0.000000, -0.000000
output 6 -> -2.000000, 0.000000
output 7 -> -0.000000, -2.000000
output 8 -> 0.000000, -0.000000
output 9 -> -2.000000, 0.000000
output 10 -> -0.000000, -2.000000

My questions are:
1-) It goes like: -2,0,0 until 264th output and later values are all 0
but the input array had 353 samples. Shouldn't it go until 176th frame
instead of the 264th?
*2-) The output values doesn't seem right to me. I think real parts
should not be negative and they should'nt repeat the same pattern!
3-) I should normalize the output by multiplying each output value by
25/353 (sample rate/N) right?

Hope that I can get some help about this.
Regards.
 
R

RKS

long double *in;
fftwl_complex *out;
fftwl_plan p;

Just a tip before posting to comp.dsp.

You may also want to give the header file where fftwl_complex and
fftwl_plan are defined. You have to provide complete code if you want
some one to help you. Its important that you dont loose the fractions
in the whole process.

RKS.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,743
Messages
2,569,478
Members
44,898
Latest member
BlairH7607

Latest Threads

Top