EFM Decoding research

Overview

This page contains notes about EFM decoding research. It will (hopefully) become more organised as the work progresses.

IEC 60857 and 60856 (Amendment 2)

The digital audio signal is optional for LaserDiscs and the encoding format is specified in detail by IEC 60908 (Audio recording – Compact disc digital audio system).

EFM Signal modulation onto LaserDiscs

The EFM signal (prior to modulation) is filtered by a low-pass filter and then a high-pass filter. The digital signal is a symmetrical double edge pulse width modulated onto the main carrier and recorded onto the disk. The level of the modulated EFM signal in the recorded frequency spectrum shall be -27 dB ± 1 dB with respect to the unmodulated main carrier when no audio signal is present during digital silence.

The following list shows the frequency response of the required low-pass filter:

  • Up to 1.6 MHz ±0.5 dB (ref. 0.5 MHz)
  • 1.75 MHz (-3 ± 0.5) dB
  • 2 MHz (-26 ± 2) dB
  • >2.3 MHz < -50 dB

The following list shows the required group delay (pre-distortion) of the low-pass filter:

  • <0.5 MHz (0 ± 20) ns (ref. 0.5 MHz)
  • 0.8 MHz (-50 ± 20) ns
  • 1 MHz (-100 ± 50) ns
  • 1.2 MHz (-180 ± 50) ns
  •  1.4 MHz (-350 ± 75) ns

The requirements for the high-pass filter are shown in the following diagram:

Block error rate (BLER)

The block error rate averaged over 10s shall be ≤ 8 x 10-2 with a recommendation of ≤ 3 x 10-2.

Sample rate

The NTSC audio sample frequency shall be:

FH is the line frequency corresponding to the video signal (60 Hz/525 lines – M/NTSC system).

The PAL audio sample frequency shall be:

FH is the line frequency corresponding to the video signal (50 Hz/625 lines – PAL system).

Time delay compensation

The digital audio decoder delays the audio signal by 15.3ms, therefore it is recommended to advance the audio signals prior to modulation relative to the video signal.

Analogue audio levels

The levels of the analogue audio sub-carriers in the recorded frequency spectrum shall be -30 dB ± 1 dB with respect to the unmodulated main carrier

Polarity of modulation

The polarity of the audio modulation shall be such that MSB=0 of encoded data words in the EFM signal corresponds with a positive instantaneous frequency deviation of the analogue audio sub-carriers

LD EFM Deviation from IEC 60908

Sub-code

The sub-code is according to IEC 60908, clause 17, with the following modifications:

Change “0001: ADR 1, mode 1 for DATA-Q” to “0100: ADR 4, mode 4 for DATA-Q”.

Change title “Mode 1 for DATA-Q” to “Mode 4 for DATA-Q”. In the first line, change “ADR = 1 = 0001)” to “ADR = 4 = (0100)” and, in the third line, change “mode 1” to “mode 4”.

Table of Contents (TOC)

The repetitive TOC shall be recorded in such a way that, at the end of the lead-in area, the table of content can be ended with any value of point.

The video system identification code shall be recorded according to IEC 60908-2 (12 cm CD-V).

For NTSC P frame is 12 = NTSC “LV disk” with digital stereo sound and P frame is 13 = NTSC “LV disk” with digital bilingual sound.

For PAL P frame is 22 = PAL “LV disk” with digital stereo sound and P frame is 23 = PAL “LV disk” with digital bilingual sound.

The following shall be in accordance to the LaserDisc standard:

  • Start of CD lead-in sub-code
  • Length of CD lead-in sub-code
  • Start of CD lead-out sub-code in accordance with start lead-out code
  • Length of CD lead-out sub-code

Relationship of track number (CD TNO) and LaserDisc chapter number

The chapter numbers shall be present in the video programme area. They should start with chapter “0” or “1” or a pre-set number of a previous disk with the same programme content. If they start with chapter “0”, the length of chapter “0” area should be within 1 min.

The track number (TNO) in CD shall be the same as the chapter number in LV with the exception of chapter “0” (see 13.6.3.1), chapter “0” is then a part of track number “1”.

The maximum track number CD in LV is 79.

The minimum length of a track (chapter) shall conform to the LaserDisc standard.

IEC 60908 notes

The lowest fundamental frequency of the modulation code is 196 kHz which corresponds to T(max). The peak-to-peak value of this component is A(11) and the peak value of the corresponding high-frequency signal before high-pass filtering is A(top). The highest fundamental frequency of the modulation code is 720 kHz which corresponds to T(min). Its peak-to-peak amplitude is A(3). See the following diagram for details:

EFM HF Signal

Pioneer LD-V4300D EFM out port

The Pioneer LD-V4300D provides an EFM out port which may provide clues and data about the EFM signal. Notes about the player are included here.

Physical connection

The physical connection is a 5 pin DIN connector as shown in the following diagram:

This pin-out translates to a male 5 pin DIN as shown in the following picture:

5 pin DIN male pin numbering

Circuit schematics

The raw RF output from the player’s laser is fed to a filter circuit shown in the following diagram:

LD-V4300D PAL AFM and EFM filter amplifier

The RF signal enters the circuit from the top left and exits from the bottom right. The filtered signal is then fed to the output stage shown in the following schematic:

LD-V4300D EFM output stage

The test traces (indicated by 4 and 5 in the schematic diagrams above) are as follows:

Oscilloscope traces of EFM output

The following diagram shows the eye pattern produced by the LD-V4300D’s EFM output signal which is 200mV P-P:

The following diagram shows a FFT analysis of the EFM output (note that the scale is mV rather than dB for clarity):

As can be seen in the FFT the majority of the signal energy is present in the expected range of 196 to 720 KHz.

EFM 14-bit to decimal conversion

The following C/C++ code snippet provides a look up table from a number (array position) to the 14-bit EFM code:

// The following table provides the 14-bit EFM code (padded with leading
// zeros to 16-bit) corresponding to 0 to 255.  The represented number is
// given by the position in the array (i.e. position 0 = EFM code for
// decimal 0 and so on).
const quint16 efm2number[] = {
    0x1220, 0x2100, 0x2420, 0x2220, 0x1100, 0x0110, 0x0420, 0x0900, //   8
    0x1240, 0x2040, 0x2440, 0x2240, 0x1040, 0x0040, 0x0440, 0x0840, //  16
    0x2020, 0x2080, 0x2480, 0x0820, 0x1080, 0x0080, 0x0480, 0x0880, //  24
    0x1210, 0x2010, 0x2410, 0x2210, 0x1010, 0x0210, 0x0410, 0x0810, //  32
    0x0020, 0x2108, 0x0220, 0x0920, 0x1108, 0x0108, 0x1020, 0x0908, //  40
    0x1248, 0x2048, 0x2448, 0x2248, 0x1048, 0x0048, 0x0448, 0x0848, //  48
    0x0100, 0x2088, 0x2488, 0x2110, 0x1088, 0x0088, 0x0488, 0x0888, //  56
    0x1208, 0x2008, 0x2408, 0x2208, 0x1008, 0x0208, 0x0408, 0x0808, //  64
    0x1224, 0x2124, 0x2424, 0x2224, 0x1124, 0x0024, 0x0424, 0x0924, //  72
    0x1244, 0x2044, 0x2444, 0x2244, 0x1044, 0x0044, 0x0444, 0x0844, //  80
    0x2024, 0x2084, 0x2484, 0x0824, 0x1084, 0x0084, 0x0484, 0x0884, //  88
    0x1204, 0x2004, 0x2404, 0x2204, 0x1004, 0x0204, 0x0404, 0x0804, //  96
    0x1222, 0x2122, 0x2422, 0x2222, 0x1122, 0x0022, 0x1024, 0x0922, // 104
    0x1242, 0x2042, 0x2442, 0x2242, 0x1042, 0x0042, 0x0442, 0x0842, // 112
    0x2022, 0x2082, 0x2482, 0x0822, 0x1082, 0x0082, 0x0482, 0x0882, // 120
    0x1202, 0x0248, 0x2402, 0x2202, 0x1002, 0x0202, 0x0402, 0x0802, // 128
    0x1221, 0x2121, 0x2421, 0x2221, 0x1121, 0x0021, 0x0421, 0x0921, // 136
    0x1241, 0x2041, 0x2441, 0x2241, 0x1041, 0x0041, 0x0441, 0x0841, // 144
    0x2021, 0x2081, 0x2481, 0x0821, 0x1081, 0x0081, 0x0481, 0x0881, // 152
    0x1201, 0x2090, 0x2401, 0x2201, 0x1090, 0x0201, 0x0401, 0x0890, // 160
    0x0221, 0x2109, 0x1110, 0x0121, 0x1109, 0x0109, 0x1021, 0x0909, // 168
    0x1249, 0x2049, 0x2449, 0x2249, 0x1049, 0x0049, 0x0449, 0x0849, // 176
    0x0120, 0x2089, 0x2489, 0x0910, 0x1089, 0x0089, 0x0489, 0x0889, // 184
    0x1209, 0x2009, 0x2409, 0x2209, 0x1009, 0x0209, 0x0409, 0x0809, // 192
    0x1120, 0x2111, 0x2490, 0x0224, 0x1111, 0x0111, 0x0490, 0x0911, // 200
    0x0241, 0x2101, 0x0244, 0x0240, 0x1101, 0x0101, 0x0090, 0x0901, // 208
    0x0124, 0x2091, 0x2491, 0x2120, 0x1091, 0x0091, 0x0491, 0x0891, // 216
    0x1211, 0x2011, 0x2411, 0x2211, 0x1011, 0x0211, 0x0411, 0x0811, // 224
    0x1102, 0x0102, 0x2112, 0x0902, 0x1112, 0x0112, 0x1022, 0x0912, // 232
    0x2102, 0x2104, 0x0249, 0x0242, 0x1104, 0x0104, 0x0422, 0x0904, // 240
    0x0122, 0x2092, 0x2492, 0x0222, 0x1092, 0x0092, 0x0492, 0x0892, // 248
    0x1212, 0x2012, 0x2412, 0x2212, 0x1012, 0x0212, 0x0412, 0x0812  // 256
};