📄 main.c
字号:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include "FIRstruc.h"
#define SAMPLE_SIZE 1024
#define DELAY_SIZE 4 //2*pi*f0*(DELAY_SIZE/fcai) = 0.5*pi
/* simulation Input file */
FILE *f2InputSample;
/* simulation output file */
FILE *f2OutputSample;
SINT PcmInput[SAMPLE_SIZE];
//SINT PcmOutput[SAMPLE_SIZE];
SINT PcmInputBuf[16];
SINT PcmInputBufIndex = 0;
SINT PcmDemodBuf[SAMPLE_SIZE];
USINT PcmDemodIndex = 0;
SINT PcmOldSta = 0;
SINT PcmNewSta = 0;
SINT PcmOutput = 0;
/********************滤波器参数设置********************/
/* coef */
const USINT Coef_IF_GaussianFilter[FILTER_SIZE] =
{
/*0x0004,0x000F,0x0034,0x0097,0x017C,0x0340,0x062B,0x0A27,
0x0E7E,0x11F2,0x1345,0x11F2,0x0E7E,0x0A27,0x062B,0x0340,
0x017C,0x0097,0x0034,0x000F,0x0004,*/
0X00B8,0X0038,0X0037,0X002E,0X001E,0X0006,0XFFE8,0XFFC6,
0XFFA4,0XFF86,0XFF70,0XFF65,0XFF68,0XFF7B,0XFF9F,0XFFD2,
0X0011,0X0056,0X009C,0X00DA,0X0109,0X0122,0X011F,0X00FC,
0X00B8,0X0056,0XFFDB,0XFF50,0XFEC2,0XFE3E,0XFDD3,0XFD92,
0XFD87,0XFDBF,0XFE3F,0XFF0B,0X0020,0X0176,0X02FF,0X04A9,
0X065E,0X0807,0X098B,0X0AD5,0X0BCF,0X0C6C,0X0CA2,0X0C6C,
0X0BCF,0X0AD5,0X098B,0X0807,0X065E,0X04A9,0X02FF,0X0176,
0X0020,0XFF0B,0XFE3F,0XFDBF,0XFD87,0XFD92,0XFDD3,0XFE3E,
0XFEC2,0XFF50,0XFFDB,0X0056,0X00B8,0X00FC,0X011F,0X0122,
0X0109,0X00DA,0X009C,0X0056,0X0011,0XFFD2,0XFF9F,0XFF7B,
0XFF68,0XFF65,0XFF70,0XFF86,0XFFA4,0XFFC6,0XFFE8,0X0006,
0X001E,0X002E,0X0037,0X0038,0X00B8,
};
/* declare */
FIRStruct FirBuf;
SINT DlineBuf[FILTER_SIZE*2];
void FirInit(FIRStruct *pFir, SINT *pCoef, SINT *pDline, SINT FirNum);
SINT FirFilter(FIRStruct *pFir, SINT samplein);
void main(void)
{
SINT i,siTemp;
//f2InputSample = fopen("SingleIn.pcm","rb");
f2InputSample = fopen("FFSK.pcm","rb");
//f2InputSample = fopen("NFFSK.pcm","rb");
f2OutputSample = fopen("SingleOut.pcm","wb");
FirInit( &FirBuf, (SINT *)Coef_IF_GaussianFilter, DlineBuf, FILTER_SIZE);
printf("读取数据,读取文件 SingleIn.pcm!\n");
//将缓冲区清零
for(i=0; i<SAMPLE_SIZE; i++)
{
PcmInput[i] = 0;
PcmDemodBuf[i] = 0;
}
for(i=0; i<DELAY_SIZE; i++)
{
PcmInputBuf[i] = 0;
}
while(fread(&PcmInput[0],1, SAMPLE_SIZE*sizeof(signed short int),f2InputSample) == SAMPLE_SIZE*sizeof(signed short int))
{//while 1
for(i=0; i<SAMPLE_SIZE; i++)
{
PcmInputBuf[PcmInputBufIndex++] = PcmInput[i];
PcmInputBufIndex &= 0x0F;
siTemp = PcmInputBuf[(PcmInputBufIndex - 5) & 0x0f];
siTemp = (PcmInput[i] * siTemp) >> 12; //?
PcmDemodBuf[i] = siTemp;
/*PcmDemodBuf[i] = FirFilter(&FirBuf,siTemp);
PcmNewSta = PcmDemodBuf[i];*/
//PcmDemodIndex &= 0x00FF;
/*if(PcmSyn == 0)
{
//查找最大值,找到位同步
if(PcmDemodBuf[(i - 1) & 0x03FF] > PcmDemodBuf[(i - 2) & 0x03FF] && PcmDemodBuf[(i - 1) & 0x03FF] > PcmDemodBuf[i])
{
PcmSyn = 1;
PcmOutput = PcmDemodBuf[(i - 1) & 0x03FF];
PcmDemodIndex = 1;
fwrite(&PcmOutput,1, sizeof(signed short int),f2OutputSample);
}
}
//找到位同步后每20个点采样一个数据
else
{
if(++PcmDemodIndex == 20)
{
PcmDemodIndex = 0;
PcmOutput = PcmDemodBuf[i];
fwrite(&PcmOutput,1, sizeof(signed short int),f2OutputSample);
}
}*/
/*if( PcmOldSta >= 0 && PcmNewSta <= 0 ||
PcmOldSta <= 0 && PcmNewSta >= 0 )
{
if(PcmDemodIndex > 10)
PcmDemodIndex--;
else if(PcmDemodIndex < 10)
PcmDemodIndex++;
}
if(PcmDemodIndex++ >= 20)
{
PcmDemodIndex = 0;
PcmOutput = PcmDemodBuf[i];
PcmDemodBuf[i] = 0;
if(PcmOutput > 0)
PcmOutput = 1;
else
PcmOutput = 0;
fwrite(&PcmOutput,1, sizeof(signed short int),f2OutputSample);
}
PcmOldSta = PcmNewSta;*/
}
fwrite(&PcmDemodBuf[0],1, SAMPLE_SIZE*sizeof(signed short int),f2OutputSample);
}//end while 1
printf("完毕,保存到文件 SingleOut.pcm!\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -