modulator.cpp

来自「包括RS码的编码,硬(BM)/软(KV)译码,AWGN信道调制解调仿真. 具体采」· C++ 代码 · 共 53 行

CPP
53
字号
#include <stdafx.h>
#include <stdlib.h>
#include "Modulator.h"

void ResetModulator(Modulator& m) {
	m.symbol=0;
	m.maskSym=m.masktop;	
}

void InitModulator(Modulator& m, ModMethod method) {	
	m.ModulateOneSym=ModuCores[method].ModulateOneSym;
	m.InitModCore=ModuCores[method].InitModCore;
	m.CloseModCore=ModuCores[method].CloseModCore;
	m.inW=ModuCores[method].symWid;
	m.outW=ModuCores[method].sigDim;
	if (ModuCores[method].ModCoreSize>0)
	{
		m.ModCoreRegs=(void*)malloc(ModuCores[method].ModCoreSize);
	}
	else m.ModCoreRegs=NULL;
	if (m.InitModCore!=NULL) m.InitModCore(m.ModCoreRegs);
	m.outbuf=(double*)malloc(sizeof(double)*(((m.inW+7)/m.inW)*m.outW));
	m.masktop=(1<<(m.inW-1));	
	ResetModulator(m);
}

void CloseModulator(Modulator& m) {
	free(m.outbuf);
	if (m.CloseModCore!=NULL)
	{
		m.CloseModCore(&m.ModCoreRegs);
		free(m.ModCoreRegs);
	}
}

/*接收一个字节,将调制输出的信号空间矢量输出到output中,返回总共调制的符号数*/
/*每输入inW比特,输出outW个信号矢量*/
int ModulateOneByte(byte b, double*& output, Modulator& m) {
	int io=0;
	for (byte mask=0x80; mask!=0; mask>>=1)
	{
		if ((mask & b)==0) m.symbol&=(~m.maskSym);  else m.symbol|=m.maskSym;
		if (m.maskSym==0x01)
		{
			m.ModulateOneSym(&m.outbuf[(io++)*m.outW], m.symbol, m.ModCoreRegs);
			m.maskSym=m.masktop;
		}
		else m.maskSym>>=1;
	}
	output=m.outbuf;
	return io;
}

⌨️ 快捷键说明

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