From 0a3e79aa11e3d11f288fb996f9623ed07b63028d Mon Sep 17 00:00:00 2001
From: Jean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Date: Mon, 7 Jan 2008 13:36:01 +1100
Subject: [PATCH] Pseudo-masking curve for the MDCT

---
 libcelt/psy.c | 18 ++++++++++++++++++
 libcelt/psy.h |  2 ++
 2 files changed, 20 insertions(+)

diff --git a/libcelt/psy.c b/libcelt/psy.c
index 3f5e6a8b4..0bc2f2380 100644
--- a/libcelt/psy.c
+++ b/libcelt/psy.c
@@ -61,6 +61,7 @@ static void spreading_func(float *psd, float *mask, int len, int Fs)
       decayR[i] = pow(.1f, deriv);
       /* decay corresponding to -25dB/Bark */
       decayL[i] = pow(0.0031623f, deriv);
+      //printf ("%f %f\n", decayL[i], decayR[i]);
    }
    /* Compute right slope (-10 dB/Bark) */
    mem=psd[0];
@@ -117,3 +118,20 @@ void compute_masking(float *X, float *mask, int len, int Fs)
    
 }
 
+void compute_mdct_masking(float *X, float *mask, int len, int Fs)
+{
+   int i;
+   float psd[len];
+   float mem;
+   for (i=0;i<len;i++)
+      mask[i] = X[i]*X[i];
+   for (i=1;i<len-1;i++)
+      psd[i] = .5*mask[i] + .25*(mask[i-1]+mask[i+1]);
+   //psd[0] = .5*mask[0]+.25*(mask[1]+mask[2]);
+   psd[0] = .5*mask[0]+.5*mask[1];
+   psd[len-1] = .5*(mask[len-1]+mask[len-2]);
+   /* TODO: Do tone masking */
+   /* Noise masking */
+   spreading_func(psd, mask, len, Fs);
+   
+}
diff --git a/libcelt/psy.h b/libcelt/psy.h
index bf2c9ffb3..06e9183a8 100644
--- a/libcelt/psy.h
+++ b/libcelt/psy.h
@@ -33,4 +33,6 @@
 
 void compute_masking(float *X, float *mask, int len, int Fs);
 
+void compute_mdct_masking(float *X, float *mask, int len, int Fs);
+
 #endif /* PSY_H */
-- 
GitLab