mirror of
https://github.com/n5ac/mmvari.git
synced 2025-12-06 04:12:03 +01:00
128 lines
3.9 KiB
C++
128 lines
3.9 KiB
C++
//Copyright+LGPL
|
||
|
||
//-----------------------------------------------------------------------------------------------------------------------------------------------
|
||
// Copyright 2000-2013 Makoto Mori, Nobuyuki Oba
|
||
//-----------------------------------------------------------------------------------------------------------------------------------------------
|
||
// This file is part of MMVARI.
|
||
|
||
// MMVARI is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License
|
||
// as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||
|
||
// MMVARI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||
|
||
// You should have received a copy of the GNU Lesser General Public License along with MMTTY. If not, see
|
||
// <http://www.gnu.org/licenses/>.
|
||
//-----------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
|
||
|
||
/*=============================================================================
|
||
MFSK16‚ÌŽÀ‘• 2004/JUL/28‚É<E2809A>ì<EFBFBD>¬ŠJŽn by Mako JE3HHT
|
||
=============================================================================*/
|
||
#ifndef _MFSK_H
|
||
#define _MFSK_H
|
||
|
||
#include "CLX.h"
|
||
#include "ComLib.h"
|
||
|
||
#define MFSK_MAXBITS 5 // MFSK4
|
||
#define MFSK_MAXTONES 32 // MFSK4
|
||
#define MFSK_MINSPEED 3.90625 // MFSK4
|
||
|
||
#define MFSK_VITERBI_K 7 // Length = 7
|
||
#define MFSK_VITERBI_POLY1 0x006D // 01101101 (O1 + O3 + O4 + O6 + O7)
|
||
#define MFSK_VITERBI_POLY2 0x004F // 01001111 (O1 + O2 + O3 + O4 + O7)
|
||
|
||
typedef enum {
|
||
typMFSK16,
|
||
typMFSK8,
|
||
typMFSK31,
|
||
typMFSK11,
|
||
typMFSK22,
|
||
typMFSK32,
|
||
typMFSK64,
|
||
typMFSK4,
|
||
}MFSKTYPE;
|
||
|
||
int __fastcall MFSK_Speed2Type(double speed);
|
||
void __fastcall MFSK_SetPara(int type, int *pTones, double *pSpeed, int *pBits);
|
||
|
||
/*=============================================================================
|
||
CViterbiEncodeƒNƒ‰ƒX
|
||
=============================================================================*/
|
||
class CViterbiEncode
|
||
{
|
||
private:
|
||
UINT m_EncData;
|
||
|
||
int m_K;
|
||
int m_Poly1;
|
||
int m_Poly2;
|
||
public:
|
||
__fastcall CViterbiEncode(void);
|
||
void __fastcall Init(int k, int poly1, int poly2);
|
||
inline void __fastcall Reset(void){m_EncData = 0;};
|
||
|
||
BYTE __fastcall Do(BOOL bit);
|
||
};
|
||
|
||
/*=============================================================================
|
||
CViterbiƒNƒ‰ƒX
|
||
=============================================================================*/
|
||
#define VITERBI_PATHMAX 64
|
||
class CViterbi
|
||
{
|
||
private:
|
||
int m_TraceBack;
|
||
int m_BlockSize;
|
||
int m_States;
|
||
UINT m_CurPtr;
|
||
|
||
int *m_pPoly;
|
||
int *m_pMetrics[VITERBI_PATHMAX];
|
||
int *m_pHistory[VITERBI_PATHMAX];
|
||
int m_tSeq[VITERBI_PATHMAX];
|
||
int m_tMetrics[2][256];
|
||
private:
|
||
int __fastcall TraceBack(int *pMetric);
|
||
|
||
public:
|
||
__fastcall CViterbi(void);
|
||
__fastcall ~CViterbi(){Free();};
|
||
void __fastcall Free(void);
|
||
void __fastcall Init(int k, int poly1, int poly2);
|
||
|
||
BOOL __fastcall SetTraceBack(int traceback);
|
||
BOOL __fastcall SetBlockSize(int blocksize);
|
||
void __fastcall Reset(void);
|
||
int __fastcall Decode(int *pMetric, BYTE s[2]);
|
||
};
|
||
|
||
/*=============================================================================
|
||
CInterLeaverƒNƒ‰ƒX
|
||
=============================================================================*/
|
||
#define INTERLEAVER_STAGES 10
|
||
class CInterLeaver{
|
||
private:
|
||
int m_Stages;
|
||
int m_BitSize;
|
||
int m_BitSizeM;
|
||
BYTE m_tTable[INTERLEAVER_STAGES][MFSK_MAXBITS][MFSK_MAXBITS];
|
||
private:
|
||
void __fastcall Bits2Syms(BYTE *pSyms, int b);
|
||
int __fastcall Syms2Bits(BYTE *pSyms);
|
||
|
||
public:
|
||
__fastcall CInterLeaver(void);
|
||
|
||
void __fastcall Reset(void);
|
||
void __fastcall Init(int bitsize);
|
||
|
||
void __fastcall DecodeSyms(BYTE *pSyms);
|
||
void __fastcall EncodeSyms(BYTE *pSyms);
|
||
int __fastcall DecodeBits(int b);
|
||
int __fastcall EncodeBits(int b);
|
||
};
|
||
#endif
|