#algorithm #matlab #signal-processing
#алгоритм #matlab #обработка сигналов
Вопрос:
В настоящее время я провожу обучение в matlab по матрице образцов logspecrum, я постоянно сталкиваюсь с проблемами недостаточного потока.Я понял, что мне нужно работать с журналами, чтобы справиться с недостаточным потоком. Я все еще борюсь с uderflow, хотя, когда я вычисляю среднее значение (mue), потому что это отрицательно, я не могу работать с журналами, поэтому мне нужны реальные значения, которые уменьшаются. Это уравнения, с которыми я работаю:
В коде MATLAB я вычисляю log_tau, чтобы избежать недостаточного потока, но при вычислении mue мне нужен exp(log (tau)), который стремится к нулю. Я прилагаю соответствующий код MATLAB ** в коде, который я назвал переменной alpha, является tau …
for i = 1 : 50
log_c = Logsum(log_alpha,1) - log(N);
c = exp(log_c);
mue = DataMat*alpha./(repmat(exp(Logsum(log_alpha,1)),FrameSize,1));
log_abs_mue = log(abs(mue));
log_SigmaSqr = log((DataMat.^2)*alpha) - repmat(Logsum(log_alpha,1),FrameSize,1) - 2*log_abs_mue;
SigmaSqr = exp(log_SigmaSqr);
for j=1:N
rep_DataMat(:,:,j) = repmat(DataMat(:,j),1,M);
log_gamma(j,:) = log_c - 0.5*(FrameSize*log(2*pi) sum(log_SigmaSqr)) sum((rep_DataMat(:,:,j) - mue).^2./(2*SigmaSqr));
end
log_alpha = log_gamma - repmat(Logsum(log_gamma,2),1,M);
alpha = exp(log_alpha);
end
c = exp(log_c);
SigmaSqr = exp(log_SigmaSqr);
кто-нибудь видит, как я могу этого избежать? или что нужно исправить в коде?
Ответ №1:
Что я сделал, так это добавил эту строку в код MATLAB:
mue(isnan(mue))=0; %fix 0/0 problem
и этот:
SigmaSqr(SigmaSqr==0)=1;%fix if mue_k = x_k
не уверен, что это лучшее решение, но, похоже, работает…
у кого-нибудь есть идея получше?