y@0: GEA = cell(nbInstrument,nbBandPassFilters); y@0: y@0: y@0: xHat = sparse(zeros(HFFTS,len)); y@0: y@0: % Model Spectrogram y@0: for ins = 1:nbInstrument y@0: for filterInd = 1:nbBandPassFilters y@0: GEA{ins,filterInd} = sparse(zeros(HFFTS, len)); y@0: for frame = first:curFrame y@0: GEA{ins,filterInd}(:,frame-first+1) = (filterBasis(:,filterInd)*gains(ins,frame)).*(excitationSpectrums{ins,frame}*partialsWeights(:,ins)); y@0: end y@0: xHat = xHat + GEA{ins,filterInd}*filterCoefficients(filterInd,ins); y@0: end y@0: end y@0: y@0: %Compute distance and r y@0: distFilter(nbUpdates) = sum(sum( tmpMaskedSpectrogram .* log((tmpMaskedSpectrogram+eps) ./ (xHat+eps)) - tmpMaskedSpectrogram + xHat)); y@0: r = (currentMag+eps)./(xHat+eps); y@0: updateFilterCoeff = ones(nbBandPassFilters,nbInstrument); y@0: y@0: %Update Filter Coefficients y@0: for ins = 1:nbInstrument y@0: for filterInd = 1:nbBandPassFilters y@0: updateFilterCoeff(filterInd,ins) = (sum(sum(GEA{ins,filterInd}.*r))+eps)/(sum(sum(GEA{ins,filterInd}))+eps); y@0: end y@0: end y@0: clear GEA; y@0: filterCoefficients = filterCoefficients.*updateFilterCoeff; y@0: for ins=1:nbInstrument y@0: maxValue = max(filterCoefficients(:,ins)); y@0: filterCoefficients(:,ins) = filterCoefficients(:,ins) / maxValue; y@0: gains(ins,:) = gains(ins,:) * maxValue; y@0: end y@0: outlook = filterBasis * filterCoefficients; y@0: % figure, plot(outlook(1:blockSize/8,:));