matlab下标赋值维度不匹配,Matlab 带有下标的赋值维度不匹配

>> main

正在计算语音参数

第1遍训练

计算样本参数...

1 2 3 4 5 6 7 8 9 10

重估转移概率矩阵A...

重估混合高斯的参数...

1,1 带有下标的赋值维度不匹配。

出错 baum (line 52)

hmm.mix(l).mean(j,:) = nommean / denom;

出错 train (line 24)

hmm = baum(hmm, samples);

出错 main (line 7)

hmm{i}=train(sample,[3 3 3 3]);

function hmm = baum(hmm, samples)

mix  = hmm.mix;                        %高斯混合

N    = length(mix);                %HMM状态数

K    = length(samples);        %语音样本数

SIZE = size(samples(1).data,2); %参数阶数

% 计算前向, 后向概率矩阵, 考虑多观察序列和下溢问题

disp('计算样本参数...');

for k = 1:K

fprintf('%d ',k)

param(k) = getparam(hmm, samples(k).data);

end

fprintf('\n')

% 重估转移概率矩阵A: trans

disp('重估转移概率矩阵A...')

for i = 1:N-1

denom = 0;

for k = 1:K

tmp   = param(k).ksai(:,i,:);

denom = denom + sum(tmp(:));

end

for j = i:i+1

nom = 0;

for k = 1:K

tmp = param(k).ksai(:,i,j);

nom = nom   + sum(tmp(:));

end

hmm.trans(i,j) = nom / denom;

end

end

% 重估混合高斯的参数

disp('重估混合高斯的参数...')

for l = 1:N

for j = 1:hmm.M(l)

fprintf('%d,%d ',l,j)

% 计算各pdf的均值和方差

nommean = zeros(1,SIZE);

nomvar  = zeros(1,SIZE);

denom   = 0;

for k = 1:K

T = size(samples(k).data,1);

for t = 1:T

x            = samples(k).data(t,:);

nommean = nommean + param(k).gama(t,l,j) * x;

nomvar  = nomvar  + param(k).gama(t,l,j) * (x-mix(l).mean(j,:)).^2;

denom   = denom   + param(k).gama(t,l,j);

end

end

hmm.mix(l).mean(j,:) = nommean / denom;

hmm.mix(l).var (j,:) = nomvar  / denom;

% 计算各pdf的权

nom   = 0;

denom = 0;

for k = 1:K

tmp = param(k).gama(:,l,j);    nom   = nom   + sum(tmp(:));

tmp = param(k).gama(:,l,:);    denom = denom + sum(tmp(:));

end

hmm.mix(l).weight(j) = nom/denom;

end

fprintf('\n')

end