总目录
/fx/3e870d81-b01c-4e72-a224-838688d33f28
Matlab学习
/fx/3e5ecb5e-28f2-4492-848d-baaaa8df0e1c
一,10.1,用电量。
1,导入ele.mat数据,用2-5之间随机数代替
2,创建prices,usage变量
3,res包含usage第一列数据
4,comm表示usage第二列
5,ind 表示usage第三列
6,yrs 表示1991-
7,蓝色b虚线绘制res对yrs图
8,黑色k点线绘制comm对yrs图
9,红色m点划线绘制ind对yrs图
二,10.2,音频频率
1,fs=10
2,t=0~20,间隔为1/fs
3,y=sin(1.8*2Πt)+sin(2.1*2Πt)
4,y对t的图
5,yfft变量,表示y的离散傅里叶变换
6,n表示y中元素数目(numel)
7,f表示向量,0开头,fs*(n-1)/n结尾,间距为fs/n
8,绘制abs(yfft)对f的图
三,14.1行星运动。
1,算出lambdaEnd=start-delta
2,创建lambda范围start到end,步长delta
3, spectra第六列提取到s向量
4,s与lambda的函数,对数刻度,点标实线。
tip:
这里因为定义S的变量失误。我将stardata的数据(357*10),赋值给s,用s=s(:,6),结果会得到一个只有一列的向量(357*1)。运行一次,s结果正确。
修改了之后的代码后,重新运行,这时候报错了。就是因为,此时的s已经由一个十列的向量,变成了一列的向量,当然不会有第六列了。所以报错的内容是,此处的索引超出数组边界(不能超出1)。
接着,跟视频里一样定义spectra,讨论群里问了一下数据类型转换的方法。这里因为导入的问题,将stardata的数据导入成了table类型,不能参与计算,用了table2array命令,将table类型转换成double类型。
之后便解决了’s‘处的索引超出数组边界的问题。
之后意识到自己导入数据时出错,重新导入数据,改变一下输出类型,也就解决了table类型变成double类型问题。
四,用Matlab绘制波形
原文链接: /question/1988193710240575547.html
到此处,发现与网页中图差距太大,发现是坐标轴范围不合适。用昨天用到的axis命令设置坐标轴范围。
原始波形
1,定义变量t=0到(N-1)/fs,间隔为1/fs
2,x=sin(200Πt)
3,绘出x对t的图像
4,改为合适的坐标范围(0~0.2,-1.3~1.3)
频谱分析
5,求x的离散傅里叶变换,赋值于a
6,fft的输出值为复数,要绘制它们的模(幅值),可以用abs函数。
给a赋值为abs(a)*2/N
7,定义f的范围是0~(N-1)*fs/N,间隔为fs/N
8,绘出a对f的图像
逆变换后时域图
9,定义变量b=a的傅里叶变换值*N/2
10,绘出b对t的图像
11,改为合适的坐标范围(0~0.2,-1.3~1.3)
N=1024;
fs=1024;
t=0:1/fs:(N-1)/fs;
x=sin(200*pi*t);
%原始波形
figure
plot(t,x)%%%波形
set(gca,'xlim',[0,0.2],'ylim',[-1.3,1.3])
title('原始波形图')
%频谱分析
a=fft(x);
a=abs(a)*2/N;
f=0:fs/N:(N-1)*fs/N;
figure
plot(f,a)
title('幅频谱图')
%逆变换后时域图
b=ifft(a)*N/2;
figure
plot(t,b)
set(gca,'xlim',[0,0.2],'ylim',[-1.3,1.3])
举报/反馈
如果觉得《matlab的m文件画波形 matlab绘制波形图》对你有帮助,请点赞、收藏,并留下你的观点哦!