MATLAB: I want to perform SVD on cell matrix. how to apply svd on bunch of matrix? or i have to apply svd on all single matrix? but I have so many matrix of different sizes. i have used cell function for that. now for apply svd please help me.

cellmatrixmfccmultiple wavreadsvd

  • here is my code:
  • Tw = 40 ; Ts = 20; alpha = 0.97; M = 20; C = 6; L = 22; LF = 300; HF = 3700;
  • filelist1=dir('*.wav');
  • n=size(filelist1);
  • P=cell(n);
  • for k1=1:n
  • filename1=filelist1(k1).name;
  • [l1,fs1]=wavread(filename1);
  • l1 = l1(:,1);
  • P{k1} = …
  • mfcc( l1, fs1, Tw, Ts, alpha, @hamming, [LF HF], M, C+1, L );
  • %[u s v]=svd(p); %[u s v]= svd(p(1))
  • end

Best Answer

Use numel instead of size, because the latter replies a vector and for k1=1:size(x) might not do what you expect.
n = numel(filelist1);
P = cell(1, n); % cell(n) is a cell(n, n)
for k1 = 1:n
...
Here you process the files in a loop already. Calculating the SVD in addition should be easy:
S = cell(1, n);
V = cell(1, n);
D = cell(1, n);
for k1 = 1:n
...
if all(isfinite(P{k1}(:)))
[S{k1}, V{k1}, D{k1}] = svd(P{k1});
else
??? What ever you want.
end
end
Related Question