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

📄 bpsk_sim.c

📁 DSP tms320c6713: PSK modulation
💻 C
字号:
//BPSK_sim.c BPSK simulation Mod/Demod. DSK Output sequence-->Input
#include "dsk6713_aic23.h"					//codec-DSK support file
#include <math.h>
#include <stdio.h>
Uint32 fs=DSK6713_AIC23_FREQ_16KHZ;		//set sampling rate
#define PI 3.1415926
#define N 16									//# samples per symbol
#define MAX_DATA_LENGTH 10					//size of mod/demod vector
#define STABILIZE_LEN 10000				//# samples for stabilization
float phi_1[N];								//basis function 1
short r[N] = {0};								//received signal
int rNum=0,   beginDemod=0;			   //# of received samples/demod flag
short encSeqNum=0,  decSeqNum=0;			//# encoded/decoded bits
short encSymbolVal=0,decSymbolVal=0;	//encoder/decoder Symbol Index
short encodeSeq[MAX_DATA_LENGTH]={1,0,1,1,0,0,0,1,0,1};//encoded sequence
short decodeSeq[MAX_DATA_LENGTH];		//decoded sequence
short sigAmp[2] = {-10000, 10000};  	//signal amplitude
short buffer[N*(MAX_DATA_LENGTH+3)];	//received vector for debugging
short buflen=0,   stabilizeOutput=0;
interrupt void c_int11()            	//interrupt service routine
{
 int i,  outval= 0;
 short X = 0;
 if(stabilizeOutput++ < STABILIZE_LEN) //delay start to Stabalize
 {
  r[0] = input_sample();
  output_sample(0);
  return;
  }
 if(encSeqNum < MAX_DATA_LENGTH) 		//modulate data sequence
 {
  outval = (int) sigAmp[encodeSeq[encSeqNum]]*phi_1[encSymbolVal++];
  if(encSymbolVal>=N) {encSeqNum++;   encSymbolVal=0; }
  output_sample(outval);
 }
 else	output_sample(0);						//0if MAX_DATA_LENGTH exceeded
 r[rNum++] = (short) input_sample(); 	//input signal
 buffer[buflen++] = r[rNum - 1];
 if(beginDemod)				    			//demod received signal
 {
  if(decSeqNum<2 && rNum==N)  {			//account for delay in signal
		decSeqNum ++;   rNum = 0; }
  if(rNum == N)								//synchronize to symbol length
  {
   rNum = 0;
   for(i=0; i<N; i++)						//correlate with basis function
		X += r[i]*phi_1[i];
	decodeSeq[decSeqNum-2] = (X >= 0) ? 1: 0;	//do detection
	if(++decSeqNum == MAX_DATA_LENGTH+2)		//print received sequence
	{
	 for(i=0; i<decSeqNum-2; i++)
		printf("Received Value: %d\n", decodeSeq[i]);
	 exit(0);
	}
  }
 }
 else  { beginDemod = 1; rNum = 0; }
}
void main()
{
	int i;
  	comm_intr();                  		//init DSK, codec, McBSP
  	for(i=0; i<=N; i++)
		phi_1[i] = sin(2*PI*i/N);			//basis function
	while(1);                     		//infinite loop
}


 

⌨️ 快捷键说明

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