📄 cht02.asv
字号:
[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 + -