📄 modulator.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 + -