JvanKatwijk / qt-dab

Qt-DAB, a general software DAB (DAB+) decoder with a (slight) focus on showing the signal
http://www.sdr-j.tk
GNU General Public License v2.0
298 stars 61 forks source link

UEP Protection level 4 and 5 #89

Closed andimik closed 6 years ago

andimik commented 6 years ago

UEP Protection level 4 is shown as PL 0 and UEP Protection level 5 is shown as PL 1.

grafik

http://www.fmlist.org/sendertabelle/dab-ww_more.php?inputLand=BEL&inputEn=6005 (here you see, it's PL 4)

Tested with a self generated sample ETI file with ODR DabMod/DabMux:

Audio services
program name;country;serviceId;subchannelId;start address;length (CU); bit rate;DAB/DAB+; prot level; code rate; language; program type

Test PL 1 AT    ;          ;A501;1;0;208;192;DAB;UEP 1;2/5;German;News;
Test PL 2 HU    ;          ;B502;2;208;168;192;DAB;UEP 2;1/2;Hungarian;Education;
Test PL 3 HR    ;          ;C503;3;376;140;192;DAB;UEP 3;3/5;Croatian;Pop Music;
Test PL 4 DE    ;          ;D504;4;516;116;192;DAB;UEP 0;7/20;German;Other Music;
Test PL 5 RO    ;          ;E505;5;632;96;192;DAB;UEP 1;2/5;Romanian;Religion;
JvanKatwijk commented 6 years ago

Silly that no one notices that before, the protection level as such was correct, masking of the last 2 bits before displaying the value was obviously incorrect

2018-02-10 2:03 GMT+01:00 andimik notifications@github.com:

UEP Protection level 4 is shown as PL 0 and UEP Protection level 5 is shown as PL 1.

[image: grafik] https://user-images.githubusercontent.com/24510556/36056630-4210326e-0e06-11e8-98a7-2b65715677e8.png

http://www.fmlist.org/sendertabelle/dab-ww_more.php? inputLand=BEL&inputEn=6005 (here you see, it's PL 4)

Tested with a self generated sample ETI file with ODR DabMod/DabMux:

Audio services program name;country;serviceId;subchannelId;start address;length (CU); bit rate;DAB/DAB+; prot level; code rate; language; program type

Test PL 1 AT ; ;A501;1;0;208;192;DAB;UEP 1;2/5;German;News; Test PL 2 HU ; ;B502;2 https://maps.google.com/?q=B502;2&entry=gmail&source=g;208;168;192;DAB;UEP 2;1/2;Hungarian;Education; Test PL 3 HR ; ;C503;3;376;140;192;DAB;UEP 3;3/5;Croatian;Pop Music; Test PL 4 DE ; ;D504;4;516;116;192;DAB;UEP 0;7/20;German;Other Music; Test PL 5 RO ; ;E505;5;632;96;192;DAB;UEP 1;2/5;Romanian;Religion;

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/JvanKatwijk/qt-dab/issues/89, or mute the thread https://github.com/notifications/unsubscribe-auth/AITzwCc401HMXGZkG3ItCnHe9ylOD_ftks5tTOrwgaJpZM4SAu8e .

-- Jan van Katwijk

+31 (0)15 3698980 +31 (0) 628260355

pr2git commented 6 years ago

Jan, Be very careful the same bit masking is also applied elsewhere in the code for the protLevel. Exemple: in ensembleprint.cpp the same bit masking is applied so it is still not correct when you save ensemble info. And in there are 5 protLevel and in the case to handle it goes from 0 to 3 but protLevel is stored from 1 to 5, so I am quite sure that someprotLevel cases are not properly covered.

Pr2

JvanKatwijk commented 6 years ago

Not completely true. The EEP has two modes and 4 values per mode, the mode is encoded in the 04 bit, so there you see masking to extracting the mode and the value. I do not see much masking further there. The protlevels are passed on to the uep/eep protection handlers, they interpret

2018-02-10 23:41 GMT+01:00 Pr2 notifications@github.com:

Jan, Be very careful the same bit masking is also applied elsewhere in the code for the protLevel. And in there are 5 protLevel and in the case to handle it goes from 0 to 3 but protLevel is stored from 1 to 5, so I am quite sure that someprotLevel cases are not properly covered.

Pr2

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/JvanKatwijk/qt-dab/issues/89#issuecomment-364701746, or mute the thread https://github.com/notifications/unsubscribe-auth/AITzwJsLBsh0OXhmoH5fwJgeZsYFhJzqks5tThsxgaJpZM4SAu8e .

-- Jan van Katwijk

+31 (0)15 3698980 +31 (0) 628260355

pr2git commented 6 years ago

EEP has 4 possible values but UEP has 5 possible values and RTBF is using UEP that perhaps what confuse me. Be carefull that you need also to change the ensembleprint.cpp in various folder because it still reflect the wrong value when we save it.

andimik commented 6 years ago

ok, fixed in 04ce449

JvanKatwijk commented 6 years ago

I decider to clean up the mess

2018-02-12 18:21 GMT+01:00 andimik notifications@github.com:

ok, fixed in 04ce449 https://github.com/JvanKatwijk/qt-dab/commit/04ce449b2f7442245ebdded44d158ab635a63468

— You are receiving this because you modified the open/close state. Reply to this email directly, view it on GitHub https://github.com/JvanKatwijk/qt-dab/issues/89#issuecomment-364995861, or mute the thread https://github.com/notifications/unsubscribe-auth/AITzwJv8Jr0NnfyTn8nNx7Nj7x99KEroks5tUHMXgaJpZM4SAu8e .

-- Jan van Katwijk

+31 (0)15 3698980 +31 (0) 628260355

andimik commented 6 years ago

Sure, no problem.

I just added the commit where I knew it was really fixed. In other github-projects they do so in order to track what bug was fixed when ...

andimik commented 4 years ago

Dear Jan, I fear, it has not completely fixed in 04ce449.

I found out, that in (obviously) all your dab_tables.cpp and ensemble-printer.cpp in all your projects there is a number missing in this line:

const char *uep_rates [] = {nullptr, "7/20", "2/5", "1/2", "3/5"};

(ensemble-printer.cpp in line 31)

static const char *uep_rates [] = {"7/20", "2/5", "1/2", "3/5"};

(dab_tables.cpp in line 35)

DAB (old) has 5 (five) protection levels, not 4. PL5 is around 0,75 = 3/4.

The content output (see below from my self-made eti) still has wrong fractions!! Because UEP 3 is 1/2, but in the txt-file it's UEP 2 and UEP 5 is repeated with the wrong value for UEP 1.

See page 10 in https://tech.ebu.ch/docs/tech/tech3310.pdf or page 19 in https://www.etsi.org/deliver/etsi_i_ets/300700_300799/300799/01_30_9733/ets_300799e01v.pdf

Audio services
program name;country;serviceId;subchannelId;start address;length (CU); bit rate;DAB/DAB+; prot level; code rate; language; program type

Test PL 1 AT    ;          ;A501;1;0;208;192;DAB;UEP 1;2/5;German;News;
Test PL 2 HU    ;          ;B502;2;208;168;192;DAB;UEP 2;1/2;Hungarian;Education;
Test PL 3 HR    ;          ;C503;3;376;140;192;DAB;UEP 3;3/5;Croatian;Pop Music;
Test PL 4 DE    ;          ;D504;4;516;116;192;DAB;UEP 4;7/20;German;Other Music;
Test PL 5 RO    ;          ;E505;5;632;96;192;DAB;UEP 5;2/5;Romanian;Religion;

I wanted to patch (and fix by myself) and add 3/4 to that lines

const char *uep_rates [] = {nullptr, "7/20", "2/5", "1/2", "3/5", "3/4"};

resp.

static const char *uep_rates [] = {"7/20", "2/5", "1/2", "3/5", "3/4"};

But it is still not showing the correct values.

JvanKatwijk commented 4 years ago

Hi Andreas

Is the decoding OK? If I read your mail correctly, the (bitRate, protection) = (192, UEP 5). The UEP table (in the protection directory) "knows" these values. If the decoding is correct, it is a matter of representation. Looking at the code for the ensemble printer, I see that the mapping from (internally) encoded UEP levels to table entries seems right for the first 4 elements, are they right?

else { protL = "UEP "; protL. append (QString::number (h)); codeRate = uep_rates [h + 1];

Best jan

Op do 16 apr. 2020 om 18:00 schreef andimik notifications@github.com:

Dear Jan, I fear, it has not completely fixed in 04ce449 https://github.com/JvanKatwijk/qt-dab/commit/04ce449b2f7442245ebdded44d158ab635a63468 .

I found out, that in (obviously) all your dab_tables.cpp and ensemble-printer.cpp in all your projects there is a number missing in this line:

const char *uep_rates [] = {nullptr, "7/20", "2/5", "1/2", "3/5"};

(ensemble-printer.cpp in line 31)

static const char *uep_rates [] = {"7/20", "2/5", "1/2", "3/5"};

(dab_tables.cpp in line 35)

DAB (old) has 5 (five) protection levels, not 4. PL5 is around 0,75 = 3/4.

The content output (see below from my self-made eti) still has wrong fractions!! Because UEP 3 is 1/2, but in the txt-file it's UEP 2 and UEP 5 is repeated with the wrong value for UEP 1.

See page 10 in https://tech.ebu.ch/docs/tech/tech3310.pdf

Audio services program name;country;serviceId;subchannelId;start address;length (CU); bit rate;DAB/DAB+; prot level; code rate; language; program type

Test PL 1 AT ; ;A501;1;0;208;192;DAB;UEP 1;2/5;German;News; Test PL 2 HU ; ;B502;2;208;168;192;DAB;UEP 2;1/2;Hungarian;Education; Test PL 3 HR ; ;C503;3;376;140;192;DAB;UEP 3;3/5;Croatian;Pop Music; Test PL 4 DE ; ;D504;4;516;116;192;DAB;UEP 4;7/20;German;Other Music; Test PL 5 RO ; ;E505;5;632;96;192;DAB;UEP 5;2/5;Romanian;Religion;

I wanted to patch (and fix by myself) and add 3/4 to that lines

const char *uep_rates [] = {nullptr, "7/20", "2/5", "1/2", "3/5", "3/4"};

resp.

static const char *uep_rates [] = {"7/20", "2/5", "1/2", "3/5", "3/4"};

But it is still not showing the correct values.

— You are receiving this because you modified the open/close state. Reply to this email directly, view it on GitHub https://github.com/JvanKatwijk/qt-dab/issues/89#issuecomment-614741762, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACCPHQHQQ2EHAT6XG5PJS73RM4TQPANCNFSM4EQC54PA .

-- Jan van Katwijk

andimik commented 4 years ago

Decoding is ok, but the mapping is wrong

UEP 1 should be value 1 (= 7/20), but value 2 (= 2/5) is used UEP 2 should be value 2 (= 2/5), but value 3 (= 1/2) is used UEP 3 should be value 3 (= 1/2), but value 4 (= 3/5) is used UEP 4 should be value 4 (= 3/5), but value 1 (= 7/20) is used UEP 5 (which has to be added) should be value 5 (= 3/4), but value 2 (= 2/5) is used

So, it is +1 and breaks after the 3rd value.

JvanKatwijk commented 4 years ago

Well, one thing in the ensemblePrinter

the value for "h" is in the range 1 .. 5, so the h+1 should be h (line 143) protL = "UEP "; protL. append (QString::number (h)); codeRate = uep_rates [h];

Op do 16 apr. 2020 om 19:34 schreef andimik notifications@github.com:

Decoding is ok, but the mapping is wrong

UEP 1 should be value 1 (= 7/20), but value 2 (= 2/5) is used UEP 2 should be value 2 (= 2/5), but value 3 (= 1/2) is used UEP 3 should be value 3 (= 1/2), but value 4 (= 3/5) is used UEP 4 should be value 4 (= 3/5), but value 1 (= 7/20) is used UEP 5 (which has to be added) should be value 5 (= 3/4), but value 2 (= 2/5) is used

So, it is +1 and breaks after the 3rd value.

— You are receiving this because you modified the open/close state. Reply to this email directly, view it on GitHub https://github.com/JvanKatwijk/qt-dab/issues/89#issuecomment-614792663, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACCPHQCIM2LRPVZDVU7FCGDRM46UBANCNFSM4EQC54PA .

-- Jan van Katwijk

JvanKatwijk commented 4 years ago

second issue:

In the file dab_tables.cpp (in directory /src/support) a. In function getCodeRate there still is the line return uep_rates [h & 03]; // UEP

Which is wrong, since h takes value 1 .. 5

In the same file, the uep table should be adapted static const char *uep_rates [] = {nullptr, "7/20", "2/5", "1/2", "3/5", "3/4"}; (since the smallest value for h is 1, a dummy zero-th element should be added)

If these mods improve the results I'll upload the version with these mods

Op do 16 apr. 2020 om 20:12 schreef jan van katwijk <j.vankatwijk@gmail.com

:

Well, one thing in the ensemblePrinter

the value for "h" is in the range 1 .. 5, so the h+1 should be h (line 143) protL = "UEP "; protL. append (QString::number (h)); codeRate = uep_rates [h];

Op do 16 apr. 2020 om 19:34 schreef andimik notifications@github.com:

Decoding is ok, but the mapping is wrong

UEP 1 should be value 1 (= 7/20), but value 2 (= 2/5) is used UEP 2 should be value 2 (= 2/5), but value 3 (= 1/2) is used UEP 3 should be value 3 (= 1/2), but value 4 (= 3/5) is used UEP 4 should be value 4 (= 3/5), but value 1 (= 7/20) is used UEP 5 (which has to be added) should be value 5 (= 3/4), but value 2 (= 2/5) is used

So, it is +1 and breaks after the 3rd value.

— You are receiving this because you modified the open/close state. Reply to this email directly, view it on GitHub https://github.com/JvanKatwijk/qt-dab/issues/89#issuecomment-614792663, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACCPHQCIM2LRPVZDVU7FCGDRM46UBANCNFSM4EQC54PA .

-- Jan van Katwijk

-- Jan van Katwijk

andimik commented 4 years ago

I'll do some tests and will send you some PRs.

andimik commented 4 years ago

return uep_rates [h & 03]; // UEP

should be

return uep_rates [h-1]; // UEP

then it works :-)

Test PL 1 AT    ;          ;A501;1;0;208;192;DAB;UEP 1;7/20;German;News;
Test PL 2 HU    ;          ;B502;2;208;168;192;DAB;UEP 2;2/5;Hungarian;Education;
Test PL 3 HR    ;          ;C503;3;376;140;192;DAB;UEP 3;1/2;Croatian;Pop Music;
Test PL 4 DE    ;          ;D504;4;516;116;192;DAB;UEP 4;3/5;German;Other Music;
Test PL 5 RO    ;          ;E505;5;632;96;192;DAB;UEP 5;3/4;Romanian;Religion;

@hayguen I've also tested it with fmlist_scan https://patch-diff.githubusercontent.com/raw/JvanKatwijk/qt-dab/pull/163.patch