Пример #1
0
class StationaryLoudnessIterator():
    def __init__(self, model, outputName, loudnessLevelFunction=None):

        self.outputName = outputName
        self.extractor = StationaryLoudnessExtractor(model, outputName)
        self.converged = False

        if loudnessLevelFunction is None:
            self.loudnessLevelFunction = asIs
        else:
            self.loudnessLevelFunction = loudnessLevelFunction

    def extractLoudness(self, frequencies, intensityLevels, gainInDecibels=0):
        self.extractor.process(frequencies, intensityLevels + gainInDecibels)
        loudness = self.extractor.outputDict[self.outputName]
        loudnessLevel = self.loudnessLevelFunction(loudness)
        return loudnessLevel

    def process(self,
                frequencies,
                intensityLevels,
                targetLoudnessFrequencies,
                targetLoudnessIntensityLevels,
                tol,
                nIters=5,
                alpha=1.0):

        if type(targetLoudnessIntensityLevels) is np.ndarray:
            targetLoudness = self.extractLoudness(
                targetLoudnessFrequencies, targetLoudnessIntensityLevels)
        else:
            targetLoudness = targetLoudnessIntensityLevels

        storedGain = 0

        self.converged = False
        for i in range(nIters):

            loudnessLevel = self.extractLoudness(frequencies, intensityLevels,
                                                 storedGain)

            error = targetLoudness - loudnessLevel

            print(('Gain: %0.3f, Loudness Level: %0.3f, ' + 'Error: %0.3f') %
                  (storedGain, loudnessLevel, error))

            if np.abs(error) < tol:
                self.converged = True
                break
            else:
                storedGain += error * alpha
                if (i == (nIters - 1)):
                    print "Reached iteration limit, not solved" \
                          "within desired error tolerance."

        return storedGain
Пример #2
0
    def __init__(self, model, outputName, loudnessLevelFunction=None):

        self.outputName = outputName
        self.extractor = StationaryLoudnessExtractor(model, outputName)
        self.converged = False

        if loudnessLevelFunction is None:
            self.loudnessLevelFunction = asIs
        else:
            self.loudnessLevelFunction = loudnessLevelFunction
Пример #3
0
class StationaryLoudnessIterator():

    def __init__(self, model, outputName, loudnessLevelFunction = None):
        
        self.outputName = outputName
        self.extractor = StationaryLoudnessExtractor(model, outputName)
        self.converged = False

        if loudnessLevelFunction is None:
            self.loudnessLevelFunction = asIs
        else:
            self.loudnessLevelFunction = loudnessLevelFunction

    def extractLoudness(self, frequencies, intensityLevels, gainInDecibels = 0):
        self.extractor.process(frequencies, intensityLevels + gainInDecibels)
        loudness = self.extractor.outputDict[self.outputName]
        loudnessLevel = self.loudnessLevelFunction(loudness)
        return loudnessLevel

    def process(self, frequencies, intensityLevels,
            targetLoudnessFrequencies, 
            targetLoudnessIntensityLevels, 
            tol, 
            nIters = 5,
            alpha = 1.0):

        if type(targetLoudnessIntensityLevels) is np.ndarray:
            targetLoudness = self.extractLoudness(targetLoudnessFrequencies,
                    targetLoudnessIntensityLevels)
        else:
            targetLoudness = targetLoudnessIntensityLevels

        storedGain = 0

        self.converged = False
        for i in range(nIters):

            loudnessLevel = self.extractLoudness(frequencies, intensityLevels, storedGain)

            error = targetLoudness - loudnessLevel

            print (('Gain: %0.3f, Loudness Level: %0.3f, ' +
                    'Error: %0.3f') % (storedGain, loudnessLevel, error))

            if np.abs(error) < tol:
                self.converged = True
                break
            else:
                storedGain += error * alpha
                if (i == (nIters-1)):
                    print "Reached iteration limit, not solved within desired error tolerance."

        return storedGain
Пример #4
0
    def __init__(self, model, outputName, loudnessLevelFunction = None):
        
        self.outputName = outputName
        self.extractor = StationaryLoudnessExtractor(model, outputName)
        self.converged = False

        if loudnessLevelFunction is None:
            self.loudnessLevelFunction = asIs
        else:
            self.loudnessLevelFunction = loudnessLevelFunction