⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 数字AGC仿真代码适合于基础的了解数字控制模块
💻 C
字号:
/******************************************************************************
**
** Function:         : main()
**
** Description       : This files reads the 16bit Signed data from a file 
**                     convert it into -1 to +1 range and calls the AGC 
**                     AGC function and again the output data in the range
**                     of -1 to +1 converts in to 16bit signed data and 
**                     write back in to the file.
**
** Programmer        : Jaydeep Appasaheb Dhole
**                   : Associate Software Engineer ( DSP )
**                   : Aparoksha Tech. Pvt. Ltd. ,Bangalore,INDIA.
**                   : http://www.aparoksha.com
**                   : <jaydeepdhole@gmail.com>
**
**
** Date              : 26 May 2006.
**
******************************************************************************/

#include<stdio.h>
#include<math.h>

#define L_FRAME      256         /* number of samples or frame length */
#define GAIN_LEVEL   -30         /* output power in db                */

void AGC(float *, float *, float, int);

void main(void)
{
    int      i,k;
    float    input_buff[L_FRAME];
    float    output_buff[L_FRAME];
    int      output_buff_16bit[L_FRAME];
    float    energy;
    double   P;
    FILE     *fs,*fd;

    fs = fopen("input.dat","r");
    if(fs==NULL)
        printf("\n Error in opening input file...");

    fd = fopen("output.dat","w");
    if(fd==NULL)
        printf("\n Error in opening output file...");

    /* Read the 16 bit input data from the file */
    /* convert it in to the range of -1 to +1 */
    for(i = 0; i < L_FRAME; i++)
    {
        fscanf(fs,"%d",&k);
        input_buff[i] = (float)k/32767;
    }

    /* input energy Calculation */
    energy = 0;
    for(i = 0; i < L_FRAME; i++)
        energy += input_buff[i] * input_buff[i];
    P = 10 * log10(energy/L_FRAME);
        printf("\n input power is %f\n",(float)P);

    AGC(input_buff,output_buff,GAIN_LEVEL,L_FRAME);

    /* output energy Calculation */
    energy = 0;
    for(i = 0; i < L_FRAME; i++)
        energy += output_buff[i] * output_buff[i];
    P = 10 * log10(energy/L_FRAME);
        printf("\n output power in floating point arithmetic is %f\n",(float)P);

    /* Output in the range of -1 to +1                  */
    /* Convert it in to -32768 to +32767 i.e.16 bit format */
    /* Make it round by adding 0.5 to reduce the error  */
    for(i = 0; i < L_FRAME; i++)
        output_buff_16bit[i] = (int)(output_buff[i] * 32767 + 0.5);

    /* Save the 16 bit output into file */
    for(i = 0; i < L_FRAME; i++)
        fprintf(fd,"%d\n",output_buff_16bit[i]);

    fclose(fs);
    fclose(fd);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -