Velocity Reviews > C++ > Flicker detection with DFT Problem

# Flicker detection with DFT Problem

Eren AYKIN
Guest
Posts: n/a

 01-10-2007
Hello Everybody,
I'm not very experienced with DFT and FFTW library and I want to ask
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[i] = (long double)averageRed[i];
}
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[i][0], out[i][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
*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?

Regards.

Eren AYKIN
Guest
Posts: n/a

 01-10-2007
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
> 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[i] = (long double)averageRed[i];
> }
> 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[i][0], out[i][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
> *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?
>
> Regards.

RKS
Guest
Posts: n/a

 01-12-2007
> 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.

 Posting Rules You may not post new threads You may not post replies You may not post attachments You may not edit your posts BB code is On Smilies are On [IMG] code is On HTML code is OffTrackbacks are On Pingbacks are On Refbacks are Off Forum Rules

 Similar Threads Thread Thread Starter Forum Replies Last Post nisheethg@gmail.com VHDL 0 02-08-2007 05:48 AM stuart@talentlab.com VHDL 0 03-14-2005 07:25 PM Roberto Dias C++ 8 05-28-2004 02:53 PM Lukasz Indyk Java 1 01-14-2004 04:03 PM