liutian 发表于 2007-7-22 13:28

使用plot画图时横坐标为何不能改变

我想把采集的信号导入matlab中处理,采集的1.txt文件导入matlab后,生成一个相对应的变量X1,程序如下:

load('c:\1.txt'); s=X1; plot(x1);

我研究了一下,发现plot()函数画出的波形,横坐标为采集的点数,纵坐标为测试的信号幅值。但是,我想把横坐标变为时间(t)。我又思考了一下,只要把现在的横坐标值除以采样频率,横坐标就会变为时间。程序如下:
fs=500000;%采样频率
x=s(:,1);   % 横坐标
y=s(:,2);   % 纵坐标
b=;
x=x*b;% 现在的横坐标除以采样频率,希望把横坐标变为时间
s1=;% 横坐标变为时间后的信号文件
plot(s1);%画出对横坐标处理后的信号波形

但是,plot(s1)画出的波形横坐标仍然没有改变,还是采集的数据点数。
请高手指教,以上的程序哪里出了问题。 :@) :@) :@)

[ 本帖最后由 ChaChing 于 2009-8-1 12:27 编辑 ]

geoer 发表于 2007-7-22 14:00

概念错误:"横坐标值除以采样频率,横坐标就会变为时间".

花如月 发表于 2007-7-22 14:01

同样问题请不要开新帖(违反版规),这次就不说了。下次定罚!要有耐心,不要催帖
你的问题,类似的讨论很多。最简单的方法,在plot后边加个
set(gca,'xtick',0:时间间隔:结束时刻);
另外plot(x,y)个人觉得要比plot(s1)准确点,你换过来试试看。

[ 本帖最后由 花如月 于 2007-7-22 14:05 编辑 ]

liutian 发表于 2007-7-22 14:04

To 沙发 geoer
因为,在这里横坐标是采样点数,采样点数除以采样频率,也就是采样点数乘以采集一个数据点所用的时间,这样得到时间,有错吗?

To 板凳 花如月
哦,知道啦!不好意思!

[ 本帖最后由 ChaChing 于 2009-8-1 13:22 编辑 ]

VibrationMaster 发表于 2007-7-22 14:24

plot(x,y)
plot()是画两条曲线,可能x相对与y太小了,于是你认为画了一条曲线

liutian 发表于 2007-7-22 14:31

请高手指教啊!

我刚才按照花如月说得做了,用函数set(gca,XTick,0:1000:51200),不行啊,还是跟原图一样,横坐标依然是采样点数,而不是我想要的时间。我觉得我刚才的处理是正确的,采样点数乘以采集一个点所用时间=时间。
      有没有做过这方面东西的朋友啊,请多多指教啊!:handshake :handshake :handshake

spano 发表于 2007-7-22 14:57

2个图本来是没有本质区别的,你的第一个图只要改变x轴的指示量就可以了。
你将x轴乘以一个量仅仅改变了x轴的长度,而在matlab中默认情况下画出的界面大小是一样的,你仔细看看x轴的大小是不是有了变化

geoer 发表于 2007-7-22 15:01

你怎么知道横坐标仍然是采样点数啊,就看着写着1 2 3.....

liutian 发表于 2007-7-22 15:03

请版主指教

附件中有我上传的原始数据,请版主指教,期待您的回复!

回复geoer
当然知道啦,重画的图跟原图相比,波形和坐标都一样啊!

我的采样频率采样频率为500K,采样点数为102400,请大家多多出谋划策啊!:@) :@) :@)

[ 本帖最后由 ChaChing 于 2009-8-1 13:20 编辑 ]

geoer 发表于 2007-7-22 15:12

x=s(:,1);   % 横坐标
y=s(:,2);   % 纵坐标
你的第一列哪是采样点数啊.

liutian 发表于 2007-7-22 15:23

回复spano

我看过了,横坐标没有变化。我也尝试了用函数set(gca,XTick,0:1000:51200)来限制,并没有奏效。

回复geoer
单从txt文件中第一列数据看,第一列不像横坐标,你可以copy到Excel看一下,TXT文件中有25600行数据,这也是画出来的波形的横坐标。所以我认为横坐标是采集点数。
纯属个人看法,请指教。

补充我文件中数据的采样时间为51.2ms,采样频率为500k,采样点数为1024000。

[ 本帖最后由 ChaChing 于 2009-8-1 13:19 编辑 ]

花如月 发表于 2007-7-22 15:41

clear
fs=500000;%采样频率
x1=load('1.txt');
x=x1(:,1);
y=x1(:,2);
t=1:max(size(x1));
subplot(211),plot(x1),title('plot(x1)')
subplot(212),plot(t,x,t,y),title('plot(t,x,t,y)')
figure(2)
subplot(211),plot(t./fs,x),title('第一列信号')
subplot(212),plot(t./fs,y),title('第二列信号')
第二张图的横坐标的单位为秒,可以看出采样时间为50毫秒多点
矩阵的2列似乎都是信号,第二列只有8和-56。第一张图说明了plot
在绘制矩阵数据时候的操作机理。

[ 本帖最后由 花如月 于 2007-7-22 15:45 编辑 ]

liutian 发表于 2007-7-22 15:54

谢谢大家!

按照花如月的程序运行了一下,果然可以,太谢谢了!请教花如月请问:
(1)我的数据中第一列和第二列分别是什么啊? 好像不像我认为的那样,第一列是横坐标,第二列是纵坐标。
(2)在你的程序中,plot(x1)与plot(t./fs,x)画出的图形看起来一样,请问有没有区别啊?

[ 本帖最后由 ChaChing 于 2009-8-1 13:11 编辑 ]

花如月 发表于 2007-7-22 16:08

回复 #18 liutian 的帖子

问题1:具体数据含义,只有你知道因为是你测量的。
问题2:你不是想让横坐标显示时间而非采样点数么?plot(x1)是按照采样点数同时画出2列数据;plot(t./fs,x)和plot(t./fs,y)是按照采样时刻分别画出的2列数据。你说采样时间是51毫秒多点,这点从横坐标上也可以看到,信号在0.051秒左右结束。

geoer 发表于 2007-7-22 16:44

错误的地方就在于把第一列采样数据当成采样点数(1:length(x)).采样数据值除以采样率,还拿来当采样时刻.

fs=500000;%采样频率
x=s(:,1);   % 横坐标--------------------------------->这里得到的是数据采样值.
y=s(:,2);   % 纵坐标
b=;
x=x*b;% 现在的横坐标除以采样频率,希望把横坐标变为时间--------------->数据采样值除以采样频率,怎么会得到时间,x已经含义不明.
s1=;% 横坐标变为时间后的信号文件
plot(s1);%画出对横坐标处理后的信号波形

但是,plot(s1)画出的波形横坐标仍然没有改变,还是采集的数据点数。-------------->画的是两条曲线,横坐标标是(1:length(x)),所以依然是采样点数,不是你以为的(x=x*b)时间
请高手指教,以上的程序哪里出了问题。--------------------->程序概念,含义

[ 本帖最后由 ChaChing 于 2009-8-1 13:13 编辑 ]
页: [1] 2
查看完整版本: 使用plot画图时横坐标为何不能改变