position_file_pointer

Signal Processing Library

Program name: position_file_pointer

Language: C

In file: window_lib.c

Objective: Position file pointer to read next window.

Usage: int position_file_pointer(int window_number, int window_size, int data_size, int header_length, int sample_rate, int overlap, FILE *input_file);

Parameters:

  • window_number - The number of the window to be read
  • window_size - The size of the frame (window)
  • data_size - The length of the data (typically 2 bytes)
  • header_length - The length of the header
  • sample_rate - Number of data samples per second (25K or 50K)
  • overlap - The window overlap (1 - no overlap; 2 - 50% overlap)
  • input_file - The (open) input file pointer
Return
  • current file offset if all OK; -1 otherwise

Mathematical Description:

Comments: Routine is used to position the file pointer at start of desired window of data

User Comments

Code:

int position_file_pointer(int window_number, int window_size, int data_size,
 int header_length, int sample_rate, int overlap, FILE *input_file)
{
        int file_pos;

        /* The position takes into account the file header size, the window number and size */
        /* In our specific case, we use 50% overlapping windows */

        /*
        ** Overlap values:
        ** 1 -> no overlap
        ** 2 -> 50% overlap
        */

        if(sample_rate == 50000) {
                file_pos = (window_number*window_size*data_size*2) / overlap;
        } else {
                file_pos = (window_number*window_size*data_size) / overlap;
        }
        if(fseek(input_file, (file_pos+header_length), SEEK_SET) == -1) {
                return(-1);
        }
        return(ftell(input_file));
}