Matlab error using imagesc()

5 ビュー (過去 30 日間)
Iffat Arisa
Iffat Arisa 2021 年 10 月 15 日
コメント済み: Walter Roberson 2021 年 10 月 21 日
I am trying to plot frequency-wavenumber from Das strain data. Error is found when I use imagesc to get the graph.
Error using image
Image XData and YData must be vectors.
Error in imagesc (line 52)
hh = image(varargin{:}, 'CDataMapping', 'scaled');
Error in a6 (line 52)
imagesc(k,f,abs(st));
The Matlab script is given below. Any help would be appreciated.
Dasdata_folder = 'C:\Users\dan24\Documents\MATLAB\Flow Loop Fiber Strain Readings\DAS Data\2.5 Lpm Step Test for 2 inch pipe with 0 insulation/';
testName = '2.5 Lpm';
file_start = [];
plot_title = '2.5 Lpm flow';
save_plot = true; %saves plots as png files if true
channels = 55:67; %define specific channels you want plots of
folder_path = [Dasdata_folder testName '/'];
figure_save_name = [testName '_' file_start];
Dasdata = ReadDasLogV4(folder_path, file_start);
Fs = 15625; %sampling frequency
i = 1:length(channels);
y = Dasdata.Strain(channels(i),:);
L = length(y); data=abs(y/L);
T=Dasdata.Time(channels);
dt=T(2:end)-T(1:end-1);
Nt=length(T);
X=Dasdata.Position(channels);
dx=X(2:end)-X(1:end-1);
Nx=length(X);
fn=1./2./dt;
kn=1./2./dx;
df=1./Nt./dt;
dk=1./Nx./dx;
f=[-fliplr(1:(Nt/2)) 0 (1:(Nt/2-1))].*df;
k=[-fliplr(1:(Nx/2)) 0 (1:(Nx/2-1))].*dk;
st=fftshift(fft2(data))./Nx./Nt;
figure(1);
%xticks = get(gca,'XTick')/Fs;
%for i = 1:length(xticks)
% xticklabels{i} = num2str(xticks(i),3);
%end
%set(gca,'XTickLabels',xticklabels);
imagesc(k,f,abs(st));
colorbar;
%title('FFT2');
%xlabel('k (1/m)')
%ylabel('f (Hz)')
%spec=st.*conj(st)./df./dk;
%figure(2)
%imagesc(f,k,log10(spec)); axis xy
%colormap(jet)
%shg
%xlabel('k (1/m)')
%ylabel('f (Hz)')
  1 件のコメント
Image Analyst
Image Analyst 2021 年 10 月 15 日
You forgot to attach any data or the ReadDasLogV4() function:
Unrecognized function or variable 'ReadDasLogV4'.
Error in test8 (line 16)
Dasdata = ReadDasLogV4(folder_path, file_start);
We'll check back later for it. In the meantime, check very carefully the three inputs your sending to imagesc() and validate that it can take those types of arguments.

サインインしてコメントする。

採用された回答

Walter Roberson
Walter Roberson 2021 年 10 月 16 日
T=Dasdata.Time(channels);
Your T is a column vector.
dt=T(2:end)-T(1:end-1);
That makes dt a column vector, because indexing a column vector with a vector index returns a column vector no matter whether the index itself is row or column.
Nt=length(T);
Scalar.
df=1./Nt./dt;
Nt is scalar, 1./Nt is scalar. dt is column vector, scalar ./ column vector gives column vector.
f=[-fliplr(1:(Nt/2)) 0 (1:(Nt/2-1))].*df;
1:(Nt/2) is a row vector. fliplr() of a row vector is a row vector. 1:(Nt/2-1) is a row vector. [row vector, 0, row vector] gives a row vector.
Then you .* the row vector with a column vector. Implicit expansion is used, and you get a result which is length() of the column vector, by length() of the row vector -- a 2D array.
You then try to pass in f as the YData parameter to imagesc(), but the YData parameter to imagesc() must be one of:
  1. Empty
  2. A scalar
  3. A vector with two or more elements. In this case, the first and last entries are used and the rest are ignored
Your 2D array is not empty or a scalar or a vector with two elements, so you are given an error message.
You have the same problem with construction of k: it will be a 2D array as well, for the same reason: you are combining row vectors and column vectors with implicit expansion.
Easiest fix:
T = Dasdata.Time(channels) .';
X = Dasdata.Position(channels) .';
  6 件のコメント
Walter Roberson
Walter Roberson 2021 年 10 月 21 日
I suspect that what you need is gradient() rather than slope.

サインインしてコメントする。

その他の回答 (1 件)

Iffat Arisa
Iffat Arisa 2021 年 10 月 15 日
I've attached ReadDasLogV4.m
  2 件のコメント
Iffat Arisa
Iffat Arisa 2021 年 10 月 16 日
I tried to attach das file, but it is not attached here.
After running the script, I found the attached section. Please see it.

サインインしてコメントする。

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by