From b55f31761645d550526d2dfa0b55f86b07c3e9f1 Mon Sep 17 00:00:00 2001 From: stevie Date: Wed, 3 Dec 2008 06:55:07 +0000 Subject: [PATCH] Re-encode NAC using BCH after decoding. git-svn-id: http://op25.osmocom.org/svn/trunk@106 65a5c917-d112-43f1-993d-58c26a4786be --- decoder/src/lib/hdu.cc | 415 ++--------------------------- decoder/src/lib/hdu.h | 17 ++ decoder/src/lib/op25_decoder_ff.cc | 14 +- 3 files changed, 44 insertions(+), 402 deletions(-) diff --git a/decoder/src/lib/hdu.cc b/decoder/src/lib/hdu.cc index f3daf2e..8a7745b 100644 --- a/decoder/src/lib/hdu.cc +++ b/decoder/src/lib/hdu.cc @@ -22,6 +22,8 @@ */ #include +#include +#include hdu::hdu(const_bit_vector& frame_body) : abstract_data_unit(frame_body) @@ -41,402 +43,19 @@ hdu::max_size() const void hdu::correct_errors(bit_vector& frame) { -/* -0, FS, 0, 1 -1, FS, 0, 1 -2, FS, 0, 1 -3, FS, 0, 1 -4, FS, 0, 1 -5, FS, 1, 1 -6, FS, 0, 1 -7, FS, 0, 1 -8, FS, 1, 1 -9, FS, 1, 1 -10, FS, 0, 1 -11, FS, 0, 1 -12, FS, 1, 1 -13, FS, 1, 1 -14, FS, 1, 1 -15, FS, 1, 1 -16, FS, 0, 1 -17, FS, 1, 1 -18, FS, 0, 1 -19, FS, 1, 1 -20, FS, 1, 1 -21, FS, 1, 1 -22, FS, 1, 1 -23, FS, 1, 1 -24, NID, NAC(11), NAC(10) -25, NID, NAC(9), NAC(8) -26, NID, NAC(7), NAC(6) -27, NID, NAC(5), NAC(4) -28, NID, NAC(3), NAC(2) -29, NID, NAC(1), NAC(0) -30, NID, DUID(3), DUID(2) -31, NID, DUID(1), DUID(0) -32, NID, BCH_parity(47), BCH_parity(46) -33, NID, BCH_parity(45), BCH_parity(44) -34, NID, BCH_parity(43), BCH_parity(42) -35, Status 1, SS(1), SS(0) -36, NID, BCH_parity(41), BCH_parity(40) -37, NID, BCH_parity(39), BCH_parity(38) -38, NID, BCH_parity(37), BCH_parity(36) -39, NID, BCH_parity(35), BCH_parity(34) -40, NID, BCH_parity(33), BCH_parity(32) -41, NID, BCH_parity(31), BCH_parity(30) -42, NID, BCH_parity(29), BCH_parity(28) -43, NID, BCH_parity(27), BCH_parity(26) -44, NID, BCH_parity(25), BCH_parity(24) -45, NID, BCH_parity(23), BCH_parity(22) -46, NID, BCH_parity(21), BCH_parity(20) -47, NID, BCH_parity(19), BCH_parity(18) -48, NID, BCH_parity(17), BCH_parity(16) -49, NID, BCH_parity(15), BCH_parity(14) -50, NID, BCH_parity(13), BCH_parity(12) -51, NID, BCH_parity(11), BCH_parity(10) -52, NID, BCH_parity(9), BCH_parity(8) -53, NID, BCH_parity(7), BCH_parity(6) -54, NID, BCH_parity(5), BCH_parity(4) -55, NID, BCH_parity(3), BCH_parity(2) -56, NID, BCH_parity(1), BCH_parity(0) -57, Header Code Word, MI(71), MI(70) -58, Header Code Word, MI(69), MI(68) -59, Header Code Word, MI(67), MI(66) -60, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -61, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -62, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -63, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -64, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -65, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -66, Header Code Word, MI(65), MI(64) -67, Header Code Word, MI(63), MI(62) -68, Header Code Word, MI(61), MI(60) -69, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -70, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -71, Status 2, SS(1), SS(0) -72, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -73, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -74, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -75, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -76, Header Code Word, MI(59), MI(58) -77, Header Code Word, MI(57), MI(56) -78, Header Code Word, MI(55), MI(54) -79, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -80, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -81, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -82, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -83, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -84, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -85, Header Code Word, MI(53), MI(52) -86, Header Code Word, MI(51), MI(50) -87, Header Code Word, MI(49), MI(48) -88, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -89, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -90, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -91, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -92, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -93, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -94, Header Code Word, MI(47), MI(46) -95, Header Code Word, MI(45), MI(44) -96, Header Code Word, MI(43), MI(42) -97, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -98, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -99, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -100, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -101, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -102, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -103, Header Code Word, MI(41), MI(40) -104, Header Code Word, MI(39), MI(38) -105, Header Code Word, MI(37), MI(36) -106, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -107, Status 3, SS(1), SS(0) -108, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -109, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -110, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -111, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -112, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -113, Header Code Word, MI(35), MI(34) -114, Header Code Word, MI(33), MI(32) -115, Header Code Word, MI(31), MI(30) -116, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -117, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -118, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -119, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -120, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -121, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -122, Header Code Word, MI(29), MI(28) -123, Header Code Word, MI(27), MI(26) -124, Header Code Word, MI(25), MI(24) -125, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -126, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -127, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -128, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -129, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -130, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -131, Header Code Word, MI(23), MI(22) -132, Header Code Word, MI(21), MI(20) -133, Header Code Word, MI(19), MI(18) -134, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -135, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -136, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -137, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -138, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -139, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -140, Header Code Word, MI(17), MI(16) -141, Header Code Word, MI(15), MI(14) -142, Header Code Word, MI(13), MI(12) -143, Status 4, SS(1), SS(0) -144, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -145, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -146, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -147, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -148, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -149, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -150, Header Code Word, MI(11), MI(10) -151, Header Code Word, MI(9), MI(8) -152, Header Code Word, MI(7), MI(6) -153, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -154, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -155, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -156, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -157, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -158, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -159, Header Code Word, MI(5), MI(4) -160, Header Code Word, MI(3), MI(2) -161, Header Code Word, MI(1), MI(0) -162, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -163, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -164, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -165, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -166, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -167, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -168, Header Code Word, MFID(7), MFID(6) -169, Header Code Word, MFID(5), MFID(4) -170, Header Code Word, MFID(3), MFID(2) -171, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -172, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -173, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -174, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -175, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -176, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -177, Header Code Word, MFID(1), MFID(0) -178, Header Code Word, ALGID(7), ALGID(6) -179, Status 5, SS(1), SS(0) -180, Header Code Word, ALGID(5), ALGID(4) -181, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -182, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -183, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -184, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -185, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -186, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -187, Header Code Word, ALGID(3), ALGID(2) -188, Header Code Word, ALGID(1), ALGID(0) -189, Header Code Word, KID(15), KID(14) -190, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -191, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -192, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -193, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -194, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -195, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -196, Header Code Word, KID(13), KID(12) -197, Header Code Word, KID(11), KID(10) -198, Header Code Word, KID(9), KID(8) -199, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -200, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -201, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -202, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -203, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -204, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -205, Header Code Word, KID(7), KID(6) -206, Header Code Word, KID(5), KID(4) -207, Header Code Word, KID(3), KID(2) -208, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -209, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -210, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -211, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -212, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -213, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -214, Header Code Word, KID(1), KID(0) -215, Status 6, SS(1), SS(0) -216, Header Code Word, TGID(15), TGID(14) -217, Header Code Word, TGID(13), TGID(12) -218, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -219, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -220, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -221, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -222, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -223, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -224, Header Code Word, TGID(11), TGID(10) -225, Header Code Word, TGID(9), TGID(8) -226, Header Code Word, TGID(7), TGID(6) -227, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -228, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -229, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -230, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -231, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -232, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -233, Header Code Word, TGID(5), TGID(4) -234, Header Code Word, TGID(3), TGID(2) -235, Header Code Word, TGID(1), TGID(0) -236, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -237, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -238, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -239, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -240, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -241, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -242, Header Code Word, RS_parity_15(5), RS_parity_15(4) -243, Header Code Word, RS_parity_15(3), RS_parity_15(2) -244, Header Code Word, RS_parity_15(1), RS_parity_15(0) -245, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -246, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -247, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -248, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -249, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -250, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -251, Status 7, SS(1), SS(0) -252, Header Code Word, RS_parity_14(5), RS_parity_14(4) -253, Header Code Word, RS_parity_14(3), RS_parity_14(2) -254, Header Code Word, RS_parity_14(1), RS_parity_14(0) -255, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -256, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -257, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -258, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -259, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -260, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -261, Header Code Word, RS_parity_13(5), RS_parity_13(4) -262, Header Code Word, RS_parity_13(3), RS_parity_13(2) -263, Header Code Word, RS_parity_13(1), RS_parity_13(0) -264, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -265, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -266, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -267, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -268, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -269, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -270, Header Code Word, RS_parity_12(5), RS_parity_12(4) -271, Header Code Word, RS_parity_12(3), RS_parity_12(2) -272, Header Code Word, RS_parity_12(1), RS_parity_12(0) -273, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -274, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -275, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -276, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -277, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -278, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -279, Header Code Word, RS_parity_11(5), RS_parity_11(4) -280, Header Code Word, RS_parity_11(3), RS_parity_11(2) -281, Header Code Word, RS_parity_11(1), RS_parity_11(0) -282, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -283, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -284, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -285, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -286, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -287, Status 8, SS(1), SS(0) -288, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -289, Header Code Word, RS_parity_10(5), RS_parity_10(4) -290, Header Code Word, RS_parity_10(3), RS_parity_10(2) -291, Header Code Word, RS_parity_10(1), RS_parity_10(0) -292, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -293, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -294, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -295, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -296, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -297, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -298, Header Code Word, RS_parity_9(5), RS_parity_9(4) -299, Header Code Word, RS_parity_9(3), RS_parity_9(2) -300, Header Code Word, RS_parity_9(1), RS_parity_9(0) -301, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -302, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -303, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -304, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -305, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -306, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -307, Header Code Word, RS_parity_8(5), RS_parity_8(4) -308, Header Code Word, RS_parity_8(3), RS_parity_8(2) -309, Header Code Word, RS_parity_8(1), RS_parity_8(0) -310, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -311, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -312, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -313, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -314, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -315, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -316, Header Code Word, RS_parity_7(5), RS_parity_7(4) -317, Header Code Word, RS_parity_7(3), RS_parity_7(2) -318, Header Code Word, RS_parity_7(1), RS_parity_7(0) -319, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -320, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -321, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -322, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -323, Status 9, SS(1), SS(0) -324, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -325, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -326, Header Code Word, RS_parity_6(5), RS_parity_6(4) -327, Header Code Word, RS_parity_6(3), RS_parity_6(2) -328, Header Code Word, RS_parity_6(1), RS_parity_6(0) -329, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -330, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -331, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -332, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -333, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -334, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -335, Header Code Word, RS_parity_5(5), RS_parity_5(4) -336, Header Code Word, RS_parity_5(3), RS_parity_5(2) -337, Header Code Word, RS_parity_5(1), RS_parity_5(0) -338, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -339, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -340, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -341, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -342, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -343, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -344, Header Code Word, RS_parity_4(5), RS_parity_4(4) -345, Header Code Word, RS_parity_4(3), RS_parity_4(2) -346, Header Code Word, RS_parity_4(1), RS_parity_4(0) -347, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -348, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -349, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -350, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -351, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -352, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -353, Header Code Word, RS_parity_3(5), RS_parity_3(4) -354, Header Code Word, RS_parity_3(3), RS_parity_3(2) -355, Header Code Word, RS_parity_3(1), RS_parity_3(0) -356, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -357, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -358, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -359, Status 10, SS(1), SS(0) -360, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -361, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -362, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -363, Header Code Word, RS_parity_2(5), RS_parity_2(4) -364, Header Code Word, RS_parity_2(3), RS_parity_2(2) -365, Header Code Word, RS_parity_2(1), RS_parity_2(0) -366, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -367, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -368, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -369, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -370, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -371, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -372, Header Code Word, RS_parity_1(5), RS_parity_1(4) -373, Header Code Word, RS_parity_1(3), RS_parity_1(2) -374, Header Code Word, RS_parity_1(1), RS_parity_1(0) -375, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -376, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -377, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -378, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -379, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -380, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -381, Header Code Word, RS_parity_0(5), RS_parity_0(4) -382, Header Code Word, RS_parity_0(3), RS_parity_0(2) -383, Header Code Word, RS_parity_0(1), RS_parity_0(0) -384, Header Code Word, Short_Golay_parity(11), Short_Golay_parity(10) -385, Header Code Word, Short_Golay_parity(9), Short_Golay_parity(8) -386, Header Code Word, Short_Golay_parity(7), Short_Golay_parity(6) -387, Header Code Word, Short_Golay_parity(5), Short_Golay_parity(4) -388, Header Code Word, Short_Golay_parity(3), Short_Golay_parity(2) -389, Header Code Word, Short_Golay_parity(1), Short_Golay_parity(0) -390, Nulls, 0, 0 -391, Nulls, 0, 0 -392, Nulls, 0, 0 -393, Nulls, 0, 0 -394, Nulls, 0, 0 -395, Status 11, SS(1), SS(0) -*/ + apply_golay_correction(frame); + apply_rs_correction(frame); +} + +void +hdu::apply_golay_correction(bit_vector& frame) +{ + static itpp::Extended_Golay golay; + +} + +void +hdu::apply_rs_correction(bit_vector& frame) +{ + // static itpp::Reed_Solomon rs(63, 47, 17, true); } diff --git a/decoder/src/lib/hdu.h b/decoder/src/lib/hdu.h index 70395b1..c43580f 100644 --- a/decoder/src/lib/hdu.h +++ b/decoder/src/lib/hdu.h @@ -65,6 +65,23 @@ protected: */ virtual void correct_errors(bit_vector& frame_body); + /** + * Apply Golay error correction code to the specified bit_vector. + * + * \param frame_body The bit vector to decode. + * \return + */ + virtual void apply_golay_correction(bit_vector& frame_body); + + /** + * Apply Reed-Solomon error correction code to the specified + * bit_vector. + * + * \param frame_body The bit vector to decode. + * \return + */ + virtual void apply_rs_correction(bit_vector& frame_body); + }; #endif /* INCLUDED_HDU_H */ diff --git a/decoder/src/lib/op25_decoder_ff.cc b/decoder/src/lib/op25_decoder_ff.cc index 1bb18f2..017da67 100644 --- a/decoder/src/lib/op25_decoder_ff.cc +++ b/decoder/src/lib/op25_decoder_ff.cc @@ -89,6 +89,9 @@ op25_decoder_ff::op25_decoder_ff(gr_msg_queue_sptr msgq) : { } +#include +using namespace std; + bool op25_decoder_ff::correlates(dibit d) { @@ -115,16 +118,19 @@ op25_decoder_ff::receive_symbol(dibit d) d_frame_hdr[2 * d_symbol] = d & 2; d_frame_hdr[2 * d_symbol + 1] = d & 1; if(56 == d_symbol) { + static itpp::BCH bch(63, 16, 11,"6 3 3 1 1 4 1 3 6 7 2 3 5 4 5 3", true); itpp::bvec b(63); swab(d_frame_hdr, 63, 47, b, 0); swab(d_frame_hdr, 112, 71, b, 16); swab(d_frame_hdr, 69, 63, b, 57); - bch.decode(b); + itpp::bvec bd = bch.decode(b); + itpp::bvec be = bch.encode(bd); // ToDo compute/check parity bit? - swab(b, 57, d_frame_hdr, 69, 63); - swab(b, 16, d_frame_hdr, 112, 71); - swab(b, 0, d_frame_hdr, 63, 47); + swab(be, 57, d_frame_hdr, 69, 63); + swab(be, 16, d_frame_hdr, 112, 71); + swab(be, 0, d_frame_hdr, 63, 47); + d_data_unit = data_unit::make_data_unit(d_frame_hdr); if(d_data_unit) { d_state = READING;