⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cht02.asv

📁 matlab在fpga中的应用的三个具体事例
💻 ASV
📖 第 1 页 / 共 3 页
字号:
>> r=roots(p) % 有实数根及复数根 

% 例4.由多项式的根构造原多项式(实数根情况)
>> r=[-2 -1]; % 多项式的根
>> pp=poly(r) % pp=(x+2)(x+1)=x^2+3x+2,由多项式的根构造的多项式

% 例5.验证由多项式的根构造原多项式(复数根情况)
>> p=[1 -4 6 -4]; 	% 多项式的系数
>> r=roots(p) 		% 求多项式的根
>> pp=poly(r) % 这个多项式的系数与原多项式p相同,poly函数没有产生复系数

% 例6.由多项式的根构造原多项式(产生复系数情况)
>> pp=[1 7 12 9]; 	% 多项式的系数
>> r=roots(pp) 		%求多项式的根
>> pp=poly(r) % 注意因poly函数的计算误差会产生复多项式系数 
>> pp=real(pp) % 可以用real函数将假虚部去除,将原多项式还原

% 2.5.4.1 极值、平均、总和、连乘及排序

% 例1.数据分析函数应用实例1
>> rains=[226.8 348.5 773.0 848.4 594.7 108.9;128.8 100.7 168.3 110.5 178.4 121.5] % 可把rains看成两个行向量
>> avg_rain=mean(rains)%计算rains行向量的每个对应位置上的元素的平均值
>> avg_rain=mean(avg_rain) % 计算上述运算所得到的向量的平均值
>> max_rain=max(rains) % 计算rains中两个行向量对应位置上的元素的最大值
>> [max_rain,x]=max(rains) % 计算rains中两个行向量对应位置上的元素的最大
%值,并列出该最大值所属的向量
>> min_rain=min(rains) % 计算rains中两个行向量对应位置上的元素的最小值
>> s_sort=sort(rains) %将rains中两个行向量对应位置上的元素由小到大做排序 

% 例2.数据分析函数应用实例2
>> x=[1 2 3 4 5]; % 输入一个一维数组
>> sum(x) % 计算数组x中数据元素的累加和 
>> prod(x) % 计算数组x中数据元素的连乘积
>> cumsum(x) % 将x向量运算的值累积后做总和 
>> cumprod(x) % 将x向量运算的值累积后做连乘 

% 2.5.4.2 长条分布函数

% 例1.长条分布函数应用实例
>> x=-3:0.1:3; % 输入自变量数组,注意x是用弧度表示的
>> y=sin(x); 
>> figure(1);stem(x,y); % 绘制y值的时域分布图
>> figure(2);
>> hist(y) % 画出sin(y)的长条分布图,横轴代表y的极值[-1,1],纵轴代表y
%在横轴长条区域内出现的次数,hist函数默认值为十个长条区域
>> figure(3);
>> hist(y,25) % 将默认的10个长条改为25个,注意纵轴的值改变,为什么? 
>> figure(4);
>> hist(y,x) % 将横轴上下限改为-3到3,注意纵轴的值也改变,为什么?

% 2.5.5.1 MATLAB常用统计分析函数

% 例1.MATLAB统计函数应用实例1
>> modelout_nonoise_range =[0 3 5 71 9 4 3 3 2 2];% 试验值
>> absout_xil =[4 4 6.0828 63.6003 6.7082 3.6056 2.2361 1.4142 1.4142 1.4142]; % 理论值
>> evalue=(modelout_nonoise_range-absout_xil)/128;
>> var_err=var(evalue) % 求误差数据的方差
>> cov(evalue) % 求误差数据的协方差
>> corrcoef(modelout_nonoise_range,absout_xil) % 求两个向量的协方差矩阵
>> std(evalue) % 求误差数据的标准差

% 2.5.5.2 用MATLAB产生随机数

% 例1.均匀分布随机数产生函数应用实例
>> rand(1,6) % 第一次使用随机数产生函数 
>> rand(1,6) % 第二次使用随机数产生函数,注意两次产生的随机数值是不同的

% 例2.带种子的均匀随机数产生方法
>> rand('seed',0) % 将随机数值的起始值重设,相当于是第一次产生随机数值 
>>rand('seed') % 显示现在使用的seed值=931316785 
>> rand(2,3) % 注意每个随机数的范围都在[0,1]区间内
>> rand('seed') % 显示第二次产生随机数时所用的seed=412659990 
>> rand('seed',0) 
>> rand(1,6) 
>> rand('seed',100) % 设定随机数值的起始值=100 
>> rand('seed') 
>> rand(2,5) 

% 例3.产生非[0,1]区间的均匀分布随机数
>> data_1 = 2*rand(1,500)+2; % 产生一个含有500个元素的随机数组
>> subplot(2,1,1);
>> plot(data_1)  % 画出这组随机数的图形
>> axis([1 500 0 6]) % 调整横轴/纵轴上下限
>> subplot(2,1,2);
>> hist(data_1) % 画出这组随机数据的分布图

% 例4.二种不同分布随机数的分布图
>> x=-2.9:0.2:2.9; 	% x轴坐标范围
>> y=randn(1,5000);	% 产生5000个正态分布的随机数
>> subplot(2,1,1);
>> hist(y,x)	    % 绘制正态分布随机数的分布图
>> title('正态分布随机数的分布图') 
>> y1=rand(1,5000); % 产生5000个均匀分布的随机数
>> subplot(2,1,2);	
>> hist(y1,x) 		% 绘制均匀分布随机数的分布图
>> title('均匀分布随机数的分布图')

% 例5. 非标准正态分布随机数的产生
>> data_2 = randn(1,500)+3; % 产生500个随机数
>> figure(1);
>> subplot(2,1,1);
>> plot(data_2); % 绘制随机数的时域图
>> axis([1 500 0 6]); 
>> subplot(2,1,2);
>> hist(data_2); % 绘制随机数的分布图

% 2.5.6 快速傅立叶变换函数

% 例1.用FFT运算估计信号的傅立叶变换结果
>> N=128;   			%  输入数据的点数
>> t=linspace(0, 3, N); %  产生在[0,3]之间均匀分布的输入数据
>> f=2*exp(-3*t);  	    %  按输入信号的表达式产生输入离散数据
>> Ts=t(2)-t(1);  		%  计算采样周期
>> Ws=2*pi/Ts; 			%  计算采样频率,用弧度/秒做单位(角频率)
>> F=fft(f);  			%  计算输入数据的FFT结果
>> Fp=F(1 : N/2+1)*Ts; 	% 因为输入信号为实信号,所以傅立叶变换结果具有对
%称性,作图只画结果的一半。
>> W=Ws*(0 : N/2)/N;	% 频率轴范围,0到1/2奈奎斯特采样频率
>> Fa=2./(3+j*w); 	 	%  输入信号傅立叶变换的理论值
>> plot(W,abs(Fa),W,abs(Fp), '+' )  %  在一张图上做出理论结果与FFT结果
>> xlabel('频率, 弧度/秒'),ylabel('|F(w)|');

% 2.6.1  简易绘图功能

% 例1.简单的绘图实例
% 下面的代码来自一个名为fig2.m的MATLAB程序,读者可以把这个程序拷贝到一个文本编辑器中,或MATLAB程序编辑器中,然后保存,即可按照本书前面介绍的方法来调试验证该程序,以便能够更方便的记忆这些绘图函数。
v1=linspace(0,2*pi,20); % 建立一个线性数组
v2=sin(v1); % 求v1数组的正弦值,并把结果放在v2数组中
v3=cos(v1); % 求v1数组的余弦值,并把结果放在v3数组中
figure(1); 	% 第一副图
%------- 绘制第一个子图 -------%
subplot(2,2,1);	% 将第一副图分割
plot(v1,v2) % 利用plot函数绘图,第一个输入变量表示x轴,第二个输入变量表
%示y轴
title('子图1'); % 为子图加一个标题
%------- 绘制第二个子图 -------%
subplot(2,2,2);
plot(v1,v2,v1,v3) % 在一幅图中画两条曲线,一条代表v1-v2函数关系,另一条
%代表v1-v3函数关系 
title('子图2');
%------- 绘制第三个子图 -------%
subplot(2,2,3);
plot(v1,v2,v1,v2,'+') % 同样画两条曲线,不过第二条曲线以符号“+”在图中标
%示
title('子图3');
%------- 绘制第四个子图 -------%
subplot(2,2,4);
plot(v1,v2,v1,v2.*v3,'--') % 画两条曲线,一条代表v1-v2函数关系,另一条代 
%表v1-(v2.*v3)函数关系且以虚线标示
xlabel('x-axis') % 加上x轴的说明,在两个单引号“’”之间键入说明文字
ylabel('y-axis') % 加上y轴的说明
title('子图4'); % 给图加上标题
figure(2);% 第二副图
plot3(v2,v3,v1), grid % 将v2、v1、v3分别作为x轴y轴及z轴绘制三维图(也
%就是将v1看着是v2、v3的函数),并加上格线。
xlabel('x');
ylabel('y');
zlabel('z');

% 2.6.2.1 图形分隔

% 例1.图形分隔演示程序
cen=[2000,2000]; % 圆心坐标
radius=600; % 半径
res=0.001;  % 分辨率
x=-1:res:1;  y=sqrt(1-x.^2);
x=x*radius+cen(1);   y=y*radius;
y1=y+cen(2);         y2=-y+cen(2);
out=[x',y1';fliplr(x)',y2']; % out矩阵中存放圆的x、y坐标值
x=out(:,1);
y=out(:,2);
subplot(2,2,1), plot(x,y),axis('square'); % 画左上角的图 
subplot(2,2,2), semilogx(x,y),axis('square'); % 画右上角的图 
subplot(2,2,3), semilogy(x,y),axis('square'); % 画左下角的图 
subplot(2,2,4), loglog(x,y),axis('square'); % 画右下角的图 

% 2.6.2.2 图形中标注的设置

>> x=linspace(-2*pi,2*pi,60); 
>> y=sin(x).^2./(x+eps); % 注意加上eps可避免当x趋近零时,y无法定义 
>> plot(x,y) 
>> [a,b]=ginput(8); %依次从图形窗口中输入8点的座标值,可以用鼠标依次点选
>> hold on 
>> plot(a,b,'blacko') % 依据鼠标点选的输入座标值将符号画在图上适当位置
>> hold off

% 2.6.2.3 为图形加上图例

>> x = -pi:pi/20:pi; % 设置x坐标的范围
>> plot(x,cos(x),'-ro',x,sin(x),'-.b') % 在一幅图上绘制两条曲线
>> h = legend('cos','sin',2); % 为图形加上图例,并将图例放置在图的左上角

% 2.6.2.4 图形显示比例控制参数

% 例1.axis参数设置演示程序
 x=linspace(0,2*pi,30); y=sin(x); z=cos(x); % 输入数据
 plot(x,y,x,z);	% 按默认参数绘制图形
 axis off;	% 不显示图形坐标
 axis on;	% 显示图形坐标
 axis('square','equal');% 将横轴、纵轴的尺度比例设成相同值
 axis('xy','normal');	% 与MATLAB默认值相同的尺度参数设置

% 2.6.2.5 图形放大及缩小

% 例1.图形缩放演示实例
M=peaks(25); % peaks是MATLAB的内部函数,用来生成一个山峰状的函数,25 
%是这个函数矩阵的大小,数值愈大则画出的山峰图愈平滑
plot(M)
zoom on  % 开始放大图形,每按一次Enter键图形就放大一次 
zoom out % 开始缩小图形,每按一次Enter键图形就缩小一次 
zoom off % 停止图形放大或缩小功能

% 2.6.2.6 函数分布的快速绘图

% 例1.fplot绘图函数演示实例
% 本例中将一函数f(x)=sin(x)/x在x为[-20 20]区间、y为[-0.4 1.2]区间内,画出其分布图。
>> fplot('sin(x)./x',[-20 20 -0.4 1.2]) 
>> title('函数f(x)=sin(x)/x的分布图') 
>> xlabel('x'), ylabel('f(x)')

% 2.6.3.1 三维曲线绘图

% 例1.三维曲线绘图实例
>> t = 0:pi/50:10*pi;
>> plot3(sin(t),cos(t),t)
>> grid on
>> axis square
>> title('Helix');xlabel('sin(t)');ylabel('cos(t)');zlabel('t');
>> axis('ij') % 加上这个指令,注意图的y轴及曲线方向改变了

% 2.6.3.2 三维曲面及等值线绘图

% 例1.三维曲面绘图实例
>> x=-7.5:0.5:7.5; y=x; % 产生x及y两个运算数组变量 
>> [X,Y]=meshgrid(x,y); % 用meshgrid函数形成二维的网格数据 
>> R=sqrt(X.^2+Y.^2)+eps; % 加上eps可避免当R在分母时趋近零时无法定义
>> Z=sin(R)./R; % 产生z轴的数据 
>> figure(1);
>> subplot(2,2,1);
>> plot(Z(15,:)) % 绘制Z的破面图(从中间对称轴处破开)
>> title('Z的破面图形')
>> subplot(2,2,2);
>> mesh(X,Y,Z) % 将z轴的变化值以网格方式画出 
>> title('Z的网格图形')
>> subplot(2,2,3);
>> surf(X,Y,Z) % 将z轴的变化值以曲面方式画出
>> title('Z的曲面图形')
>> subplot(2,2,4);
>> meshc(peaks) % 直接将MATLAB自定义的peaks函数以网格方式画出 
>> title('peaks 函数的网格图形')

% 例2.等值线绘图实例 
>> [X,Y,Z]=peaks; % x,y及z轴的数据由peaks函数产生 
>> subplot(2,2,1) 
>> contour(Z,20) % 画出peaks的Z轴二维等值线图,20为等值线的数目 
>> subplot(2,2,2) 
>> contour(X,Y,Z,10) % 画出peaks的二维等值线图,注意x,y轴与前一幅图不同
>> subplot(2,2,3) 
>> contour3(Z,20) % 画出peaks的Z轴二维等值线图
>> subplot(2,2,4) 
>> contour3(X,Y,Z,10) % 画出peaks的三维等值线图,注意x,y轴与前一幅图不同


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -