kexin 发表于 2008-8-12 11:45

用waterfall绘图出现问题

waterfall(x,y,z)
x,y均为列向量时,如x为1*10列向量,y为1*12列向量,z为12*10矩阵。
用waterfall命令可以绘出瀑布图,但是当我的x变成1*1000,y变成1*1024,z为1024*1000时,瀑布图就绘不出来了,请问是怎么回事?

sigma665 发表于 2008-8-12 12:07

程序和错误提示

kexin 发表于 2008-8-12 14:11

没有错误提示,程序运行正常,就是图像出不来。
x=load('200710070016ZHP.txt');
x1=detrend(x,'linear');
fs=100;
n=length(x);
t=0:1/fs:(n-1)/fs;
t=t';
nfft=2^nextpow2(n);
%FFT变换
S=fft(x1,nfft);
g=load('Gs(ZHPUD).txt');
G=fft(g,nfft);
G=G';
D=S./G;
%IFFT变换
y=ifft(D,nfft);
y=real(y(1:n));
y1=cumtrapz(y);
y1=y1';
WinLen = 10;
t=t';
= CWT_Morlet(y1,WinLen,1024);
FreqBins = FreqBins * fs;
Pyy=abs(WT).^2;
waterfall(t,FreqBins,Pyy); %三维谱图
colormap jet;

songzy41 发表于 2008-8-12 15:34

程序没有错误,只是waterfall计算需要很长的时间,似乎计算机死机了。可得图如下。在这种情况中可以用mesh来作图。

kexin 发表于 2008-8-12 17:58

恩,是的,我等了好久也终于等到机子把图绘出来了。还是很感谢帮助!还想请教一个问题,我想知道这个信号优势能量的分布时间区域及频率范围,而不只是单凭肉眼估计,如何做?拜托
我自己采用下面语句求最大优势频率:
f=(0:nfft/2)*fs/nfft;
%返回最大能量值对应的频率和周期值
=max(Pyy(1:n));
fprintf('\n傅立叶变换结果:\n')
fprintf('         FFT_f = %1.3f Hz\n',f(b))               %输出最大值对应的频率
fprintf('         FFT_T = %1.3f s\n',1/f(b))             %输出最大值对应的周期
但返回的计算结果好像与图像上所示的相差比较远,而且f 的表达式影响计算结果,我想请教一下,如何才能正确求得最大能量对应的频率?

[ 本帖最后由 ChaChing 于 2009-4-22 19:43 编辑 ]

songzy41 发表于 2008-8-12 18:21

实际上画出了3维图,由于立体的关系,要找出最大值的位置反而不太方便,建议用:
imagesc(t,FreqBins,Pyy);
axis('xy');
作图,用颜色反映出能量的大小,看起来比3维图更方便。又Pyy是一个2维数组,可以变成1维后求出最大值,再进一步对应相应的时间和频率,及周期。

kexin 发表于 2008-8-12 20:51

可是查了一下变换维数的帖子,好像都没有答案的。麻烦Songzy41再次指教如何变更数组维数,谢谢

Pyy为一个1024*1000的数组,如何才能转换成您说的可以求最大值的形式呢?
matlab中提供的reshape命令,可以用么?B=reshape(A,m,n),但要求m*n一定要等于A的元素个数。P=reshape(Pyy,1024000,1)????

[ 本帖最后由 ChaChing 于 2009-4-22 19:44 编辑 ]

songzy41 发表于 2008-8-12 21:19

PP=Pyy(:);
变后数据是按1列1列地顺序排列的.
页: [1]
查看完整版本: 用waterfall绘图出现问题