# Truncated SVD returns unexpected 1*1 result

3 views (last 30 days)
Christopher McCausland on 28 Jan 2022
Hi,
I am currently prefoming SVD on six channels varying in time of the same type of biometric data. The recorded channels are similar as therefore they feature high correlation.
I want to take these six channels and reduce them to a single channel using SVD, I take my data, rescale it and then preform the svd, so far so good. Where I run into problems is the reconstruction. If I want the orignal data X = U*S*V '.Instead I am trying to preform a truncation by only taking the first PC as this accounts for over 95% of the information anyways.
Instead of PC1 returning a vector (1 channel * given number of samples) I am returned a single value (1*1). I am assuming I have a matrix the wrong way around but I can't see how I am getting this result (Though I know that I am the likely problem). I will attach some open source data too.
data = rescale(data(1:6,:),0,1); % Rescale the data for reobustness between patients
[U,S,V] = svd(data(:,:),'econ'); % Preform SVD
PC1 = V(:,1)'*data(1,:)'; % Atempt to eqivilent single channel
I also know I can compute something similar with the code below, but I would just really like to know where I am going wrong now!
[coeff,score,latent] = pca(data');
new_matrix_for_classification = score(:,1);
Thank you,
Christopher

Matt J on 28 Jan 2022
Edited: Matt J on 28 Jan 2022
Well, you're multiplying a row vector by a column vector, so a scalar is the only result that is possible.
Shouldn't a 1-component reconstruction be,
PC1=data*V(:,1);
Christopher McCausland on 30 Jan 2022
Hi Matt,
Thank you so much! I had forgotten to remove the additional transpose in my third line. So I was transposing the data back to its orignal orientation. This is now working as I would expect, thank you!!
One additional thing that cropped up is a large negitive DC offset was added to the waveform, I can remove this with DSP techniques (which is what I am much more comfortable with), however I was wondering if you had any idea for what would cause such a shift post svd processing? (Probably) more out of intrest than usefulness.
Thank you again for all your help!
Christopher

### Categories

Find more on Logical in Help Center and File Exchange

R2021b

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by