WMW
  NEWS     ABOUT     PARTNERS     CONTACT  
  HELP
WATERMARKING
  • Biography
  • FAQ
MAILINGLIST
  • Management
  • Archive
CONFERENCES
  • Calls
BENCHMARKING
  • Stirmark
  • CheckMark
  • Optimark
BOOKS
LINKS
  • Companies
  • Research
  • Others
WEBRING
DISCLAIMER

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [WM]: MATLAB implementation of psycho acoustic model



Dear Michael,

Thank you very much for looking into details at this code. I can only
comment that I agree with all you say!!!

Set 2 and 9 of page 109 were included because they are described as part
of the "Psychoacoustic model 1" in the annex. Whether they are required
or not is another issue so when I wrote the code, I preferred to include
everything. The corrected code which is at
http://www.cl.cam.ac.uk/~fapp2/software/mpeg/ still contains them.

Best

Fabien.

-----Original Message-----
From: Michael Arnold [mailto:arnold@igd.fhg.de] 
Sent: 27 June 2001 09:14
To: watermarking@watermarkingworld.org
Cc: busch@igd.fhg.de; arnold@igd.fhg.de
Subject: [WM]: MATLAB implementation of psycho acoustic model

Dear Watermarker,

I am using the MATLAB implementation of the psycho acoustic model MPEG 1
Layer I from Fabien Peticolas and Teddy Furon for prototyping. During
the development of our audio watermarking algorithm I tested the
implementation in order to verify the correctness according to the
standard ISO/IEC 11172-3:1993.

I have heavily commented the code and extract only the relevant parts of
it for the watermarking algorithm. During the MPEG compression the
signal-to-mask ratio is computed.  To use it in an audio watermarking
algorithm only the computation of the minimum masking threshold is of
interest. It is required in order to shape the power of the watermark
below the masking threshold. Therefore I removed step 2 and step 9
according to the standard  ISO/IEC 11172-3:1993 (page 109).

In the remaining steps I found some (at least from my point of view)
errors I would like to discuss. The pages refer to the corresponding
pages in the standard ISO/IEC 11172-3:1993.

The calculation of the signal-to-mask ratio is based on the following
steps:
Step 1:
Calculation of the FFT for time to frequency conversion.
The standard specifies a hann window. The default hanning window used in
MATLAB is the symmetric one.
window = sqrt(8/3)*hanning(512, 'symmetric') = sqrt(8/3)*hann(512,
'symmetric')
But to be correct one has to use the 'periodic' one (p.110 )
window = sqrt(8/3)*hanning(512), 'periodic')

(Removed) Step2:
Determination of sound pressure level in each subband.

Step 3:
Determination of the threshold in quiet.
The code stores the threshold in quiet in the column TH(:, ATH). This
table was not the same as the one specified in the standard.
I generated the column from the ISO sources containing the values as
ASCII files and stored it in Tables_fs_44100.mat.

Step 4:
Finding of the tonal and non-tonal components of the audio signal.
To calculate index number k (non-tonal component) of the spectral line
nearest to geometrical mean one has to compute the weight
in each critical band (p.110, 111). Therefore the index of the critical
band has to be used not the loop variable i.
 % OLD calculation
 % weight = sum( 10.^(X(Kf)/10).*( TH(Map(Kf), BARK)' - i ) );

 % NEW calculation
 weight = sum( 10.^(X(Kf)/10).*( TH(Map(Kf), BARK)' - TH(CB(i), BARK)' )
);

Step 5:
Decimation of tonal and non-tonal masking components.
(p. 111)
b) In order to implement the sliding window correctly during the
decimation of the
tonal components the increment loop index i should only be incremented
if distance
of tonal components is NOT in the range of  0.5 BARK.

% loop over the decimated tonal maskers list
while (i < length(DTonal_list(:, 1)))
  k      = DTonal_list(i, INDEX);
  k_next = DTonal_list(i + 1, INDEX);

  if (TH(Map(k_next), BARK) - TH(Map(k), BARK) < 0.5)
     .....
    % NEW code for index increment in order to implement sliding window.

   % Increment loop index i only if tonal components are not within a
range
    % of 0.5 BARK!
 else
   i = i + 1;
 end

 % OLD code
 % i = i + 1;
end % End while loop over DTonal_list

The Map table (mapping linear to non-linear) used in the MATLAB code
contained a
wrong index 105 at position 232. According to the standard this value
has to be 106.

Step 6 - Step 8
I found no other errors but changed the implementation a little bit.

(Removed) Step 9:
Calculation of the signal-to-mask ratio.

The code can be found at the web site:
http://syscop.igd.fhg.de/technologies.html
at
http://syscop.igd.fhg.de/PsychoAcoustic_MPEG_1_Layer_I_Matlab.zip

I would appreciate to receive some response concerning my comments
above.

Thanks,

Michael Arnold
-- 
Michael Arnold        Phone:  +49-6151-155-535
Rundeturmstr. 6       Fax:    +49-6151-155-499
64283 Darmstadt       email: arnold@igd.fhg.de
Germany               http://www.igd.fhg.de/www/igd-a8/




________________________________________________________________________
______

Watermarking Mailing List - http://www.watermarkingworld.org/ml.html
To unsubscribe send email to "majordomo@watermarkingworld.org" with
"unsubscribe watermarking YOURMAIL" in the body.
________________________________________________________________________
______





______________________________________________________________________________

Watermarking Mailing List - http://www.watermarkingworld.org/ml.html
To unsubscribe send email to "majordomo@watermarkingworld.org" with
"unsubscribe watermarking YOURMAIL" in the body.
______________________________________________________________________________


© 2000-2002 by WatermarkingWorld
Design and Concept by Martin Kutter