コード例 #1
0
ファイル: sdft.c プロジェクト: havardh/TDT4295
/* 
 * Updates the fourier transform of a sample window of N samples.
 * Uses a sample cache to update the frequencies.
 */
void sdft(uint8_t new_sample, complex *freq, complex *coefficients) 
{
  uint8_t old = get_old_sample();
  insert_sample(new_sample);

  int8_t delta = (int8_t)(new_sample - old);
  for (uint8_t i=0; i<N; i++) {
    freq[i] = mul(addi(freq[i], delta), coefficients[i]);
  }

}
コード例 #2
0
ファイル: sidc.c プロジェクト: sorki/sidc
void process_signal( void)
{
   char *buff = malloc( CF_nread * CF_chans * CF_bytes);

   if( !buff) bailout( "not enough memory for input buffer");

   while( 1)
   {
      int i, q;
      double f;

      q = read_soundcard( buff);

      //  Unpack the input buffer and scale to -1..+1 for further processing.
      if( CF_bytes == 1)
      {
         unsigned char *dp = (unsigned char *) buff;

         if( CF_chans == 1)
            for( i=0; i<q; i++)
            {
               f = *dp++;
               insert_sample( &left, (f - 127)/128);
               maybe_do_fft();
            }
         else  // CF_chans == 2
            for( i=0; i<q; i++)
            {
               f = *dp++;
               insert_sample( &left, (f - 127)/128);

               f = *dp++;
               insert_sample( &right, (f - 127)/128);
               maybe_do_fft();
            }
      }
      else
      if( CF_bytes == 2)
      {
         short *dp = (short *) buff;

         if( CF_chans == 1)
            for( i=0; i<q; i++)
            {
               f = *dp++;
               insert_sample( &left, f/32768);
               maybe_do_fft();
            }
         else  // CF_chans == 2
            for( i=0; i<q; i++)
            {
               f = *dp++;
               insert_sample( &left, f/32768);

               f = *dp++;
               insert_sample( &right, f/32768);
               maybe_do_fft();
            }
      }
      else
      if( CF_bytes == 3)
      {
         char *dp = buff;

         if( CF_chans == 1)
            for( i=0; i<q; i++)
            {
               f = (* (int *) dp) & 0xffffff;  dp += 3;
               insert_sample( &left, f/8388608);
               maybe_do_fft();
            }
         else  // CF_chans == 2
            for( i=0; i<q; i++)
            {
               f = (* (int *) dp) & 0xffffff;  dp += 3;
               insert_sample( &left, f/8388608);

               f = (* (int *) dp) & 0xffffff;  dp += 3;
               insert_sample( &right, f/8388608);
               maybe_do_fft();
            }
      }
      else
      if( CF_bytes == 4)
      {
         int *dp = (int *) buff;

         if( CF_chans == 1)
            for( i=0; i<q; i++)
            {
               f = *dp++;
               insert_sample( &left, f/2147483648UL);
               maybe_do_fft();
            }
         else  // CF_chans == 2
            for( i=0; i<q; i++)
            {
               f = *dp++;
               insert_sample( &left, f/2147483648UL);

               f = *dp++;
               insert_sample( &right, f/2147483648UL);
               maybe_do_fft();
            }
      }
   }
}