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

📄 demodulator.cpp

📁 包括RS码的编码,硬(BM)/软(KV)译码,AWGN信道调制解调仿真. 具体采用何种编译码方案和调制解调方式可在Profile.txt文件中指定(内有详细说明). 且扩展性极好,容易向其中加入新的调
💻 CPP
字号:
#include <stdafx.h>
#include <stdlib.h>
#include "Demodulator.h"

void ResetDemodulator(Demodulator& m) {
	m.ib=0;
	m.masko=0x80;
//	m.iSym=0;
}

void InitDemodulator(Demodulator& m, DemodMethod method, AWGN* gauss) {
	m.DemodOneSig=DemodCores[method].DemodOneSig;
	m.InitDemCore=DemodCores[method].InitDemCore;
	m.CloseDemCore=DemodCores[method].CloseDemCore;
	m.Reliability=DemodCores[method].GetReliability;

	if (DemodCores[method].CoreStructSize>0)
	{
		m.DemCoreRegs=(void*)malloc(DemodCores[method].CoreStructSize);
	}
	else m.DemCoreRegs=NULL;
	if (m.InitDemCore!=NULL) m.InitDemCore(m.DemCoreRegs);
	m.inW=DemodCores[method].sigDim;
	m.outW=DemodCores[method].symWid;
	m.masktop=(1<<(m.outW-1));
	m.outbuf=(byte*)malloc(sizeof(byte)*(1+(m.outW+7)/8));
	//:上一步缓存中最多余7bits,每步至多产生outWidth bits
	m.reliabuf=(double*)malloc(sizeof(double)*m.outW);//可信度信息的输出不以字节为单位
	m.gauss=gauss;
	ResetDemodulator(m);
}

void CloseDemodulator(Demodulator& m) {
	free(m.outbuf);
	free(m.reliabuf);
//	free(m.symbol);
	if (m.CloseDemCore!=NULL)
	{
		m.CloseDemCore(&m.DemCoreRegs);
		free(m.DemCoreRegs);
	}
}

int DemodOneSignal(const double* sig, byte*& output, Demodulator& m) {
	m.outbuf[0]=m.outbuf[m.ib];  m.ib=0;
	UINT s;
	m.DemodOneSig(s, sig, m.gauss, m.DemCoreRegs);
	for (UINT mask=m.masktop; mask!=0; mask>>=1)
	{
		if ((s & mask)==0) m.outbuf[m.ib]&=(~m.masko); else m.outbuf[m.ib]|=m.masko;
		if (m.masko==0x01)
		{
			m.ib++;
			m.masko=0x80;
		}
		else m.masko>>=1;
	}
	output=m.outbuf;
	return m.ib;
}

/*输入Modulator.outW个信号矢量,输出Modulator.inW个比特可信度数值*/
int DemodOneSignal(const double* sig, double*& output, Demodulator& m) {
	int outWidth=m.Reliability(m.reliabuf, sig, m.gauss, m.DemCoreRegs);
	output=m.reliabuf;
	byte* meanless;
	DemodOneSignal(sig, meanless, m);
	return outWidth;
}

⌨️ 快捷键说明

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