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

📄 modulator.cpp

📁 包括RS码的编码,硬(BM)/软(KV)译码,AWGN信道调制解调仿真. 具体采用何种编译码方案和调制解调方式可在Profile.txt文件中指定(内有详细说明). 且扩展性极好,容易向其中加入新的调
💻 CPP
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -