2 outputs from a function (pwelch) into a cell array

I am using the function pwelch to calculate the PSD of my signal. Currently, I am doing
[pxx,f] = pwelch(data,50000,[],[],Fs);
for a single window value. However, I need to test several window values so I created
pwelchvalues= [10000 50000 100000 250000 500000 750000];
But now I don't know how to modify the left side of the equation. I cannot use just
[pxx,f] =
because the pxx's and f's of each value will be of different length. I have tried for loops, cellfun and several combinations like
[pxx{:},f{:}] = pwelch(data, pwelchvalues,[],[],Fs);
but I keep getting error like: "Cell contents assignment to a non-cell array object." or "Error: Unbalanced or unexpected parenthesis or bracket."
What is the correct syntax?

 채택된 답변

Walter Roberson
Walter Roberson 2017년 7월 29일
[pxx, f] = arrayfun(@(W) pwelch(data, W, [], [], 2048), pwelchvalues, 'uniform', 0);

댓글 수: 4

ErikaZ
ErikaZ 2017년 7월 29일
편집: ErikaZ 2017년 7월 29일
I don't understand when and how to use arrayfun and cellfun. For example, now I need to plot the equivalent of
semilogx(f,20*log10(pxx));
In other words, I want to plot all 4 columns of each pxx (total of 24 PSDs) with their respective f in a single figure.
X = f;
Y = cellfun(@(p) 20*log10(p),pxx,'uniform', 0);
XY = [X(:); Y(:)] ;
semilogx(XY{:})
You might want to consider just using a loop.
I ended up using a for loop because the top code didn't quite work even with some changes. Thanks!
X = f;
Y = cellfun(@(p) 20*log10(p),pxx,'uniform', 0);
XY = [X(:).'; Y(:).'] ;
semilogx(XY{:})

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

질문:

2017년 7월 29일

댓글:

2017년 7월 31일

Community Treasure Hunt

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

Start Hunting!

Translated by