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

📄 main.c

📁 CRC采用比特型算法
💻 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 + -