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

📄 cht02.asv

📁 FPGA开发光盘各章节实例的设计工程与源码
💻 ASV
📖 第 1 页 / 共 3 页
字号:
[data_in]=fscanf(fid,'%d',[1,inf]); % 用MATLAB内部函数fscanf将输入数据
%文件中的数据读入到一个MATLAB变量中。
fclose(fid); % 关闭数据文件
fir_coef=0.5;
fs=1000;
dets=1/fs;
%-------低通滤波-------------------%
b=fir1(15,fir_coef); 
b32767=b*32767*0.5;
for j=16:161
    y(j-15)=0;
    for k=1:16
        y(j-15)=y(j-15)+b32767(k)*data_in(j-k+1);
    end;
end;
%-------绘制滤波后的时域和频域图-----------%
t=0:145;
t=t*dets;
subplot(2,2,3);
plot(t,y*2/32767/1024,'-r');
axis([0,0.1,-2,2])
title ('滤波后的时域图','fontsize',8);
xlabel ('时间t(秒)','fontsize',8);
ylabel ('幅度y','fontsize',8);
subplot(2,2,4);
stem(abs(fft(y*2/32767/1024)),'*r');
axis([0,80,0,80])
title  ('滤波后的频域图','fontsize',8);
xlabel ('频率(赫兹)','fontsize',8);
ylabel ('幅度Y','fontsize',8);

% 例2.一个完整的MATLAB小程序
% M-file, tutex1.m 
% Simple plot for illustration of using M-file. 
% 简易绘图以做为示范使用的m文件 
x=linspace(0,2*pi,20); y=sin(x); 
plot(x,y,'r+') 
xlabel('x轴坐标值') 
ylabel('y轴坐标值') 
title('两维绘图小程序运行结果图') 

% 例3.MATLAB路径切换命令
>> cd F:\国防工业出版社\程序\FPGA-MATLAB\w_fir\matlab % 切换至目录“F:\ 
%国防工业出版社\程序\FPGA-MATLAB\w_fir\matlab”
>> cd % 如果只用 cd 则会显示当前的目录 
>> dir % 列出当前目录下的所有文件 

% 2.5.2.1 MATLAB循环结构的实现

% 例1.用for循环计算缆车控制速度
        d=[0.2 0.5 0.8 2 3.5 6.3 8.6 12 13.5 15 16.8 20 23.2]; % 距离数组
        for k = 1:length(d) % length(d)=13用来计算数组的长度,也就是数组中含
            %有的元素个数,这里循环的计数k的步长为1(默认值),循环次数为13
            if d(k) <= 10 % 如果数组d中某一元素小于10则按第一个公式计算速度
                velocity = 0.425 + 0.00175*d(k)^2; 
            else % 否则按第二个公式计算缆车的控制速度
                velocity = 0.625 + 0.12*d - 0.00025*d(k)^2; 
            end 
            fprintf('d= %f velocity= %f\n',d(k),velocity)% 每次循环都输出计算结果
        end%一次循环结束,返回到前面for关键字处,k增加1,继续执行下一次循环。

% 例2.步长不一样的for循环
        for n=1:10 
            x(n)=sin(n*pi/10); 
        end % 第一个循环结束
        disp(x) % 在MATLAB命令窗口中显示数组x的值
        for n=1:5 
            for m=5:-1:1 
                A(n,m)=n^2+m^2; 
            end % 第三个循环结束
            disp(n) 
         end % 第二个循环结束 
        disp(A)

>> n=1:10; 
>> x=sin(n*pi/10);

% 例3.用while循环求数组中所有正元素的和
        x=[0.2 0.3 –0.1 0.5 –0.8 –0.9 1.2 1.3];
        sum = 0;
        k = 1;
        while (x(k)>=0 & k<=length(x))% while循环判别条件
            sum = sum + x(k);
            k = k+1;
        end % 循环结束

% 例4.计算MATLAB可以计算的最小正值
        num=0; EPS=1; 
        for num=1:1000 
            EPS=EPS/2; 
            if (1+EPS) <= 1 
                break 
            end  
        end  
        EPS, num  

% 2.5.2.2 MATLAB分支结构的实现

% 例1.MATLAB逻辑运算关系符应用举例 
>> a=1:5, b=5-a
>> tf=a>4 
>> tf=a==b
>> tf=b-(a>2) 
>> tf= ~(a>4)
>> tf=(a>2)&(a<6)

% 例2.MATLAB逻辑运算符在程序计算中的应用 
>> x=linspace(0,10,100); % 产生0到10之间间隔均匀的100个数据 
>> y=sin(x); % 产生sine函数
>> z=(y>=0).*y; % 将sin(x)的负值设为零
>> z=z + 0.5*(y<0); % 再将y中小于0的数用常数0.5代替,然后加在z上 
>> z=(x<8).*z; % 将大于8的x值设为零
>> plot(x,y,'black:') % 绘制原始的正弦信号y
>> hold on % 保留这次绘图结果不被下次绘图冲掉
>> plot(x,z) % 绘制经变换后的y
>> xlabel('x'),ylabel('y=sin(x),z=f(x)') % 为图形加上坐标
>> title('关系运算符在MATLAB程序运算中的应用') % 为图形加上标题
>> hold off % 结束在同一张图上的绘图

% 例3.IF-END分支结构举例
>> apples=10;         %  苹果的个数
>> cost=apples*25     %  苹果的价钱
>> 	 if apples>5      %  如果买苹果的个数大于5,就打8折
	    cost=(1-20/100)*cost;
	 end
>> cost

% 例4.mmono函数的使用
>> x=1:12;
>> mmono(x)     % 数组x是严格单调递增的

y=[1:12  12  13:24];
>> mmono(y)     % 数组y是非严格单调递增的(中间有两个元素值相等)

>> z=[1  3  2  -1];
>> mmono(z)     % 数组z既非严格单调递增也非严格单调递减

>> p=[12:-1:0  0  -1];
>> mmono(p)     % 数组p是非严格单调递减的(中间有两个元素值相等)

>> q=12:-1:0;
>> mmono(q) 	% 数组q是严格单调递减的

% 例5.mmono函数源码
	function f=mmono(x)
	%  MMONO Test for monotonic vector.
	%  MMONO(x) where x is a vector return:
	%    2 if x is strictly increasing,
	%    1 if x is non decreasing,
	%   -1 if x is non increasing,
	%   -2 if x is strictly decreasing,
	%    0 otherwise.

	% Copyright (c) 1984-94 by The MathWorks, Inc.

	x=x(:);        	%  make x a column vector
	y=diff(x);      %  find differences between consecutive elements

	if all(y>0)     %  test for strict first 
		f=2;
	elseif all(y>=0)
		f=1;
	elseif all(y<0)  %  test for strict first 
		f=-2;
	elseif all(y<=0)  
		f=-1;
	else 
	 	f=0;   		 %  otherwise response
	end

% 2.5.2.3 MATLAB用户自定义函数的编写

% 例1.MATLAB用户自定义函数cir_area
% M-file function, cir_area.m 
% Calculate the area of a circle with raduis r 
% r can be a scalar or an array 
function c=cir_area(r) 
c=pi*r.^2;

>> cir_area(2)
>> cir_area([2,5,8])

% 例2.MATLAB内部函数linspace
function y = linspace(d1, d2, n) 
% LINSPACE Linearly spaced vector. 
% LINSPACE(x1, x2) generates a row vector of 100 linearly 
% equally spaced points between x1 and x2. 
% LINSPACE(x1, x2, N) generates N points between x1 and x2. 
% 
% See also LOGSPACE.
% Copyright (c) 1984-94 by The MathWorks, Inc.
if nargin == 2 
n = 100; 
end 
y = [d1+(0:n-2)*(d2-d1)/(n-1) d2];

% 例3.MATLAB用户函数的调用
>> r=1:3; 
>> ar=cir_area(r) % 调用用户定义的cir_area()函数,函数的输入值为圆的半径,
%函数返回值为圆的面积 
>> disp(ar) % disp指令可以将变量的值直接列出来

% 2.5.2.4 MATLAB用户自定义函数的调试

% 例1.空矩阵的传播性
>>x=pi*(1:4)    %  输入x数组的值为1~4π
>>i=find(x>20)  %  将数组x中大于20的元素的序号赋给I(因为x中无大于20 
%的元素,所以I所得到的值将是一个空矩阵(数组))
>>y=2*x(i)      %  将x经过运算后得到的值赋给变量y

% 2.5.3.2与复数运算有关的函数

% 例1.复数基本运算实例 
>> x=1-2*i; % 注意是2*i不是2i,i被用来默认表示单位纯虚数
>> real(x) 	% 求复数的实部 
>> imag(x) 	% 求复数的虚部 
>> conj(x) 	% 计算共轭复数 
>> abs(x) 	% 计算复数的模 
>> angle(x) % 计算复数向量的夹角(以弧度为单位) 

% 例2.解方程时复数运算函数的应用 
>> a=1; b=4; c=13; 
>> x1=(-b+sqrt(b^2-4*a*c))/(2*a) % 以解二次方程式根的公式计算复数根 
>> x2=(-b-sqrt(b^2-4*a*c))/(2*a) 

% 例3.以复数指数方式表示一个复数
>> y=exp(i) % 以复数指数方式表示一个复数 
>> y=exp(i*pi*0.75) 

% 例4.复数绘图函数的应用实例1
>> t=0:0.01:2*pi; 
>> r=sin(2*t).*cos(2*t); % 两个数组做向量乘法
>> polar(t,r)
>> title('花瓣曲线') 
>> grid

% 例5.复数绘图函数的应用实例2
>> angle=0:2*pi/100:2*pi; 
>> r=angle/(2*pi); 
>> polar(angle,r) 
>> title('阿基米德牧羊曲线') 
>> grid % 在绘图中呈现表格

% 2.5.3.3多项式函数

% 例1.多项式求值函数的应用实例
>> x=linspace(-1,3);	% 在-1到3之间等间隔产生100数据
>> p=[1 4 -7 -10]; 		% 用数组表示的多项式
>> v=polyval(p,x);		% 计算多项式的值

% 例2.用多项式系数数组实现多项式的加减乘除运算
>> a=[1 2 3 4]; b=[1 4 9 16]; % 两个多项式系数数组
>> c=a+b % 用系数数组的相加替代两个多项式的加
>> d=a-b % 用系数数组的相减完成两个多项式的减法
>> e=conv(a,b) % 用系数数组的卷积完成两个多项式的乘法
>> g=e+[0 0 0 c] % 多项式中缺省的项,用0系数表示
>> [f,r]=deconv(e,b) % 用系数数组的反卷积来完成两个多项式的除法
>> [h,r]=deconv(g,a) 

% 例3.求多项式的根(只含实数根)
>> p=[1 3 2]; % 输入多项式系数矩阵(数组)
>> r=roots(p) % 求多项式的根

% 例4.求多项式的根(含有复数根)
>> p=[1 -12 0 25 116];%注意二阶项系数为零也要输入,否则多项式的阶数就不对

⌨️ 快捷键说明

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