|
@@ -3838,8 +3838,50 @@ cmReal_t _cmSpecDistCentMode( cmSpecDist_t* p, cmReal_t* X1m )
|
3838
|
3838
|
return spcUnit;
|
3839
|
3839
|
}
|
3840
|
3840
|
|
3841
|
|
-void _cmSpecDistFlipAbove( cmSpecDist_t* p, cmReal_t* X1m)
|
|
3841
|
+void _cmSpecDistBump( cmSpecDist_t* p, cmReal_t* x, unsigned binCnt, double thresh)
|
3842
|
3842
|
{
|
|
3843
|
+ /*
|
|
3844
|
+ thresh *= -1;
|
|
3845
|
+ minDb = -100;
|
|
3846
|
+
|
|
3847
|
+ if db < minDb
|
|
3848
|
+ db = minDb;
|
|
3849
|
+ endif
|
|
3850
|
+
|
|
3851
|
+ if db > thresh
|
|
3852
|
+ y = 1;
|
|
3853
|
+ else
|
|
3854
|
+ x = (minDb - db)/(minDb - thresh);
|
|
3855
|
+
|
|
3856
|
+ y = x + (x - (x.^coeff));
|
|
3857
|
+ endif
|
|
3858
|
+
|
|
3859
|
+ y = minDb + abs(minDb) * y;
|
|
3860
|
+ */
|
|
3861
|
+ unsigned i=0;
|
|
3862
|
+
|
|
3863
|
+ double minDb = -100.0;
|
|
3864
|
+ thresh = -thresh;
|
|
3865
|
+
|
|
3866
|
+ for(i=0; i<binCnt; ++i)
|
|
3867
|
+ {
|
|
3868
|
+ double y;
|
|
3869
|
+
|
|
3870
|
+ if( x[i] < minDb )
|
|
3871
|
+ x[i] = minDb;
|
|
3872
|
+
|
|
3873
|
+ if( x[i] > thresh )
|
|
3874
|
+ y = 1;
|
|
3875
|
+ else
|
|
3876
|
+ {
|
|
3877
|
+ y = (minDb - x[i])/(minDb - thresh);
|
|
3878
|
+ y += y - pow(y,p->lwrSlope);
|
|
3879
|
+ }
|
|
3880
|
+
|
|
3881
|
+ x[i] = minDb + (-minDb) * y;
|
|
3882
|
+
|
|
3883
|
+ }
|
|
3884
|
+
|
3843
|
3885
|
|
3844
|
3886
|
}
|
3845
|
3887
|
|
|
@@ -3915,7 +3957,10 @@ cmRC_t cmSpecDistExec( cmSpecDist_t* p, const cmSample_t* sp, unsigned sn )
|
3915
|
3957
|
break;
|
3916
|
3958
|
|
3917
|
3959
|
case 4:
|
3918
|
|
- _cmSpecDistFlipAbove(p,X1m);
|
|
3960
|
+ _cmSpecDistBump(p,X1m, p->pva->binCnt, p->thresh);
|
|
3961
|
+ break;
|
|
3962
|
+
|
|
3963
|
+ case 5:
|
3919
|
3964
|
break;
|
3920
|
3965
|
|
3921
|
3966
|
default:
|