matlab文档查阅使用训练(手把手教你阅读matlab文档)全网首发原创

本文章是为了,熟悉阅读matlab的帮助文档而设立,其实更多的应该是理论知识,我读本科的时候,刚接触matlab发现相当难使用,也不能静下心来看帮助文档,总想买本书,照着敲语法,到了研1时候,也试着买了本书,发现进度缓慢,照着会,隔了一下,又不会了,问别人,别人都是说看文档就好,我一打开文档,wtf,都写的个什么东西,很多人可能怎么看文档都不会,也没有这个耐心,又看了一些视频,发现也是卵用没有,实际上,这些东西根本记不住的,所以授人以鱼不如授人以渔,掌握如何静下心来,手把手的带着你看matlab的帮助文档,更有成效,然后忘记的时候再查阅文档,把精力集中到理论的研究中,当然一定的代码量,文档阅读量还是要有的,也就是说,只需要知道有这个函数,大概记得它能够有某些功能,可能能派上用场就可以了,日后再不断地学习别人的matlab代码时候,再一边学习,不断强化。此blog后续随着我的查阅再继续补充。以下只是我的一边阅读,一边记录的。你可以对照着,一定要结合matlab文档来看。手把手带你看了两三个函数,你就不用看我的blog了。自己放手看文档去。

工具:
matlab 2017b
联想i7 win10系统

1 如何离线使用matlab的帮助文档

在这里插入图片描述
将下载好了的文档,选择为安装在本地
在这里插入图片描述

2 手把手带你阅读文档的说明(所有的参考书都比不上这个帮助文档)


linspace

可以看到我们的摘要介绍是产生线性空间向量
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
好,下面就是读英语的水平了,y=lispace(x1,x2)可以返回一行有100个等间隔放置在x1和x2之间的元素。
关键词a row,说明返回的是一行,返回了多少个?100个元素,这些元素有什么规律?evenly spaced均匀分布在x1和x2之间。

clc;
clear;
t=linspace(10,1000);

在这里插入图片描述
在这里插入图片描述
可以看出,我们是1×100,一行有100个元素等间隔分布,符合预期。
下面,我们看第二句
在这里插入图片描述
我就不用再翻译了,现在动手来试一试最好。

clc;
clear;
t=linspace(10,1000,10);

在这里插入图片描述
这里我们自己代入公式算算,(1000-10)/(10-1)=110 和我们上图一致的。
在这里插入图片描述
这段话就是说linspace类似于冒号操作符,但是linspace可以直接指定生成点的个数,其中名字来源lin来自于线性空间,和对数空间是相反的。
下面又给出了两个例子。这里就不用再解释了。
在这里插入图片描述
下面我们来看一下复数的linspace使用

clc;
clear;
y = linspace(1+2i,10+10i,8);

在这里插入图片描述
可以看出我们的实数部分从1到10分成了8份,虚数部分从2到10分成了8份。
下面我们还可以看到文档对参数的说明,下面也指明了参数可以输入为复数,
并且允许x2的值小于x1的值,这样的化,向量的元素就是降序值。

在这里插入图片描述
下面是对n的说明,如果n是个0或者负数,那么就返回空值,如果不是个整数,那么小数点后往下取整。
在这里插入图片描述
并且还介绍了具有的扩展功能,可以自动生成c代码
另外也可以参考刚才上文提到的对数函数和冒号操作符。(非常人性化)
在这里插入图片描述

’ 转置符号的使用

clc;
clear;
t=[1,2,3;4,5,6;7,8,9];
x=t';


在这里插入图片描述

在这里插入图片描述

plot函数

当我们输入plot这个函数就相当的丰富了。我们可以看到plot用于各种类型的画图。这里我们只需要画一个二维的图,所以我们选择第一个。可以看到第一个的功能是2-D line plot 二维线图,绘制一个二维线图。

在这里插入图片描述
在这里插入图片描述
上面所示的描述,介绍了什么呢?我们可以了解到有4点。
1、如果x、y都是向量,那长度要相等。
2、如果x、y都是矩阵,那么矩阵大小要相等。
3、如果其中一个是矩阵,其中一个是向量的情况
4、如果一个是标量另一个是向量或者标量,那么将绘制离散的点。

在这里插入图片描述
上图也清晰地介绍了句法格式。搞忘时候,再来参照一下即可。
下面有两个可能看的不是太明白,没关系,我们到时候对照文档里面的例子即可。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里我们再次回顾上图,验证了上述框框里面的话。
在这里插入图片描述
在这里插入图片描述
上图是指定线的风格,那么我们再来回顾一下之前的说明。
在这里插入图片描述
而这些风格,我们需要记忆吗?肯定是不需要的,蓝色字体已经为我们标记出来了linespec我们可以查询手册。
那么可能接下来又有问题了,我们如何得知先告诉他颜色特性过了再是线宽?还是先告诉线宽,再告诉颜色特性?这些参数的顺序如何确定呢
在这里插入图片描述
在这里插入图片描述
可以看到这些参数都有对应的名字,这样就能区分开了
下面是我自己在上述程序中的修改,我的修改依据是什么呢?就是文档中的介绍。

clc;
clear;
x = -pi:pi/10:pi;
y = tan(sin(x)) - sin(tan(x));

figure
plot(x,y,'LineStyle','--',...
    'color','red',...
    'Marker','d',...
    'LineWidth',2,...
    'MarkerSize',10,...
    'MarkerEdgeColor','b',...
    'MarkerFaceColor','g')

在这里插入图片描述
在这里插入图片描述
我们可以使用linespec来输入,但是这个linespec只能够设置颜色标记和线的风格。其它比如线宽,标记轮廓和填充并不能。所以我么还可以用上图的下面一种方式,名称与值匹配的方式。
在这里插入图片描述
上图是我们的所有名字参数,从第一句话,我们就知道,名字必须要单引号,值,我们可以看介绍里面是不是打了单引号,一般说来字母类型的是要打单引号的。
其它,还可以加上坐标的名字和图画的title,这些都不说了,文档里面有,需要时候,照着看即可。另外plot还可以绘制时间为横坐标,这种可能对于金融分析的有用,但是这都不用多说了,用到时候查询这个手册即可。

子图subplot

在这里插入图片描述
最常用的是第一个句法
在这里插入图片描述
第一个的句法就是subplot(m,n,p)将当前图形划分为m-by-n网格,并在p指定的位置创建轴
第二个,可以替换指定的图。
其他还说了写参数,用到时候再查询。

在这里插入图片描述
在这里插入图片描述
上图是最常用的形式

subplot(2,2,1);
x = linspace(-3.8,3.8);
y_cos = cos(x);
plot(x,y_cos);
title('Subplot 1: Cosine')

subplot(2,2,2);
y_poly = 1 - x.^2./2 + x.^4./24;
plot(x,y_poly,'g');
title('Subplot 2: Polynomial')

subplot(2,2,[3,4]);
plot(x,y_cos,'b',x,y_poly,'g');
title('Subplot 3 and 4: Both')

在这里插入图片描述
上图也是很常用的形式
subplot(2,2,2,‘replace’)
在这里插入图片描述

pos1 = [0.1 0.3 0.3 0.3];
subplot('Position',pos1)
y = magic(4);
plot(y)
title('First Subplot')

pos2 = [0.5 0.15 0.4 0.7];
subplot('Position',pos2)
bar(y)
title('Second Subplot')

在这里插入图片描述
坐标不对齐,这个也很常用。但是都非常简单,这里不再多说了,看看文档就好。
在这里插入图片描述

方波函数square

同样,我们在帮助文档里面搜索square
在这里插入图片描述
句法,我们看到有两种写法,从描述来看第一种句法,说了周期为2*pi,跟sin这种波形很相似,但是产生的波形是-1和1罢了,也就是说没有0这种值。要改变幅度也很容易,乘以个系数即可。
第二句语法,也很简单,就是说duty是占空比,我们可以设置占空比,必须为正值,这个占空比。

t = linspace(-pi,2*pi,121);
x = 1.15*square(2*t);

plot(t/pi,x,'.-',t/pi,1.15*sin(2*t))
xlabel('t / \pi')
grid on

在这里插入图片描述
想必这里plot的这种写法,你也已经能够看得懂了吧。

下面我们再来看一下具有占空比设置的方波应该怎样使用?
在这里插入图片描述
上面这句话是什么意思呢?
就是说产生一个30HZ的方波采样点在1KHZ,采样时间为70ms。指定方波的占空比是37%。再加点高斯噪声,方差为1/100.

t = 0:1/1e3:0.07;
y = square(2*pi*30*t,37)+randn(size(t))/10;
dutycycle(y,t)%Compute the duty cycle of the wave. Plot the waveform and annotate the duty cycle.计算波的占空比。 绘制波形并注释占空比。

上面可能有的人一时有点看不太懂,是这样子的,首先,时间长度定义好了0-0.07s,采样率是1000HZ,所以步进是1/1000s,然后y=square(2π30t,37)是什么意思呢?由于我们的square标准的是以2π为周,就类似于sin(2πft),我们可以改变一个周期的长度,其中这个f就是我们方波的周期,所以为 square(2pi30*t,37)。
下面我先大概说一下randn是产生随机数,size返回一个矩阵的n×m
另外为什么方差这里是除以/10,因为标准差是方差开根号,所以相当于产生标准差为1/10.
在这里插入图片描述
根据上图,s^2除以100,右边也除以100带入分子,相当于每个样本都要除以10.

sawtooth锯齿波函数

同样的,我们来搜索一下这个函数。
在这里插入图片描述
第一句语法讲了些什么呢?就是说这个sawtooth函数可以建立以t为时间轴、周期为2*π,锯齿波非常近似于sin函数,通过建立-1和1来创建峰值,锯齿波被定义为-1的时候,是在2π的整数倍,以1/π线性的斜率线性增加。

% Generate 10 periods of a sawtooth wave 
% with a fundamental frequency of 50 Hz. The sample rate is 1 kHz.
t=0:1/1000:10/50-1/1000;
y=sawtooth(2*pi*50*t);
plot(t,y,'red');
periodogram(y,[],length(y),1000,'power')

在这里插入图片描述
下面增加了最后一个periodogram画出来的。
在这里插入图片描述

periodogram

在这里插入图片描述
单看这个函数,是周期图功率谱密度估计
这个函数我们以后再来阅读,先暂时搁置

randn函数

同样,我们可以先看到介绍,这个randn函数是产生正态分布的随机数。
其中句法包括了如下的句法。
在这里插入图片描述
在这里插入图片描述描述很好看明白,这里就不用多说了,我们看第三个描述,由于之前我们的size(t),返回的是1 71 所以randn(size(t))就返回1×71的随机矩阵。
第四个可以指明随机数是double还是single类型
第五个可以指明像p这个矩阵元素那样的类型

rand函数

rand是产生长度为N的在[0 ,1]上均匀分布的随机序列,
而randn是产生均值为0,方差为1的高斯分布。
在这里插入图片描述
在这里插入图片描述
上图为均匀分布。
另外可以看到rand的句法和randn是一样的。这里就不多说了,自己看文档即可。

floor函数

Y = floor(X) rounds each element of X to the nearest integer less than or equal to that element.
也就是说,把x的每个元素变为整数,且取不超过x的每一个元素的整数。
在这里插入图片描述

xlim和ylim的使用

在这里插入图片描述
在这里插入图片描述
第一个句法非常简单,就是设置一个横轴坐标的范围
第一个也是最常用的,后续我们要改变坐标轴的长度,我们可以再来看别的

在这里插入图片描述

round舍去函数的使用(用于浮点数转定点)

舍入到最接近的十进制或整数
在这里插入图片描述
在这里插入图片描述
其中比较常用的是1,2,3种用法,特别是第2种用法。
在这里插入图片描述
在这里插入图片描述
由于FPGA都没有小数,只有整数,所以需要用小数转换为十进制的整数
10bit的量化,将浮点数转换为定点数

sc=sin(2*pi*fc*t);
sc=round(sc*(2^(N-1)-1));     %10bit量化

%N-1表示10bit中最高位是符号位,所以数据位只有9位,那么9bit能表示的最大数就是(2^(N-1)-1)
%其中sc再进行归一化,如果sc大于了1的话,按理应该除以max(sc)。
%sc*(2^(N-1)-1) 表示在最大数的基础上,每一个数,所占的比例。从而就把小数转换成了十进制的定点数,实现了量化。

mean函数(去除直流分量)

通常mean用于去除直流分量后的输出,比如信号signal是一个向量

 output_signal=signal-mean(siganl)

即可去除直流分量

巴特沃斯滤波器buttord 、butter

buttord用于计算h滤波器的最低阶数和截止频率
在这里插入图片描述
[n,Wn] = buttord(Wp,Ws,Rp,Rs)返回数字Butterworth滤波器的最低阶n,其通带纹波不超过Rp dB,阻带中衰减至少为Rs dB,
在这里插入图片描述
Rp代表通带范围内,衰减不超过Rp dB, Rs代表阻带至少要衰减Rs dB.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里要提一下归一化频率这个概念,归一化频率到奈奎斯特频率。
实际物理频率表示AD采集物理信号的频率,fs为采样频率,由奈奎斯特采样定理可以知道,fs必须≥信号最高频率的2倍才不会发生信号混叠,因此fs能采样到的信号最高频率为fs/2。
角频率是物理频率的2pi倍,这个也称模拟频率。
归一化频率是将物理频率按fs归一化之后的结果,最高的信号频率为fs/2对应归一化频率0.5,这也就是为什么在matlab的fdtool工具中归一化频率为什么最大只到0.5的原因。
圆周频率是归一化频率的2
pi倍,这个也称数字频率。
此处可以参看:https://blog.csdn.net/wordwarwordwar/article/details/56671513

例子:
对于1000hz采样的数据,设计一个低通滤波器,在0 ~ 40hz的通带内纹波不超过3db,阻带衰减不小于(至少)60db。找出滤波器的阶数和截止频率。
在这里插入图片描述

在这里插入图片描述

从上图,我们也看出了,通带的边界频率为40HZ,阻带频率在150HZ,40HZ~150HZ都属于过渡带。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

替换技巧

在这里插入图片描述
比如我要将I_fft_N替换成Q_fft_N,并且我们希望所有的都得到替换,我们直接更改I_fft_N,为Q_fft_N,然后出现绿色选中后,按下shift+Enter

希腊字符转义输入

想必,经过之前的说明,有的人不知道在plot的坐标轴里面怎么输入这些alpha、beta这些字符。
只需要 \ +希腊字符名字 即可。比如 \pi 那么就是π
在这里插入图片描述
在这里插入图片描述

dec2bin

Convert decimal number to character vector representing binary number
在这里插入图片描述
str = dec2bin(d)返回d的二进制表示作为字符向量。 d必须是非负整数,并且d不能超过双精度的长度,就是说,这个d不是无限大的,最大2^53bit位。
在这里插入图片描述

nextpow2

用于2的次幂的指数,并且取最小值
比如说
在这里插入图片描述
通常用于基2FFT
在这里插入图片描述

3. MATLAB信号处理之信号的采样

clc;
clear;
f=200;               %信号频率为200Hz
t=(0:1/1e6:1);    %定义信号的时间范围,以高采样率1M的速率生成模拟信号
x=cos(2*pi*f*t);     %生成模拟信号

fs=2000;              %采样频率为500Hz
T=(0:1/fs:1);        %定义采样的每个时间点
x1=cos(2*pi*f*T);    %对信号进行采样


subplot(311);
plot(t,x);

ylim([-1 1])
title('原始信号')

subplot(312)
plot(t,x,T,x1,'rp');
ylim([-1 1]);
title('采样过程')

subplot(313)
plot(T,x1);
ylim([-1 1])
xlabel('时间/s')
title('采样后的信号')

在这里插入图片描述

4. FFT频域分析以及函数

FFT运算量从DFT的N^2为计算的数据点数减少到Nlog2(N)。当N比较小时候,FFT的优势并不是比较明显;但是当N大于32开始,点数越大,FFT对运算量的改善越明显,如当N=1024时候,FFT的运算效率比DFT提高了100倍。
在这里插入图片描述
可以看出句法一共有三种。
在这里插入图片描述
根据句法1,可以看出Y=fft(x)是使用快速傅里叶变换来计算离散傅里叶变换。
如果x是向量,那么返回也是向量。
如果x是矩阵,那么返回的是把每一列当成一组向量,分别返回每一列的FFT。

句法2,就是大概说了如果n没有指定,Y的大小与X的大小一样。
如果X是个向量或者X的长度小于了n,那么就要补零。
如果x的长度大雨了n,那么就要截断。
如果x是个矩阵,仍然当成每一列向量来处理。

例子:
自己写的
Use Fourier transforms to find the frequency components of a signal buried in noise.

Specify the parameters of a signal with a sampling frequency of 1 kHz and a signal duration of 1.5 seconds.

Fs=1000 ;   %采样频率设置为1000SPS
t=1.5;     %采样时间为1500ms
T=0:1/Fs:t; %Time vector
f1=50;   %f1为50Hz
f2=120; %f2为120Hz
signal1=0.7*sin(2*pi*f1*T)+sin(2*pi*f2*T);
siginal1_noise=signal1+2*randn(size(signal1));%将每一个随机数变为2倍,就代表方差为4

figure;
subplot(211);
plot(1000*T(1:50),siginal1_noise(1:50));
title('时域');
xlabel('时间:ms');
ylabel('幅度值');

fft_N=1024;
siginal1_noise_fft=fft(siginal1_noise,fft_N);


subplot(212);
plot((0:fft_N-1)*Fs/fft_N,abs(siginal1_noise_fft(1:fft_N)));
title('频谱');
xlabel('频率:HZ');
ylabel('幅度值');



在这里插入图片描述

Fs=1000 ;   %采样频率设置为1000SPS
t=1.5;     %采样时间为1500ms
T=0:1/Fs:t; %Time vector
f1=50;   %f1为50Hz
f2=120; %f2为120Hz
signal1=0.7*sin(2*pi*f1*T)+sin(2*pi*f2*T);
siginal1_noise=signal1+2*randn(size(signal1));

figure;
subplot(211);
plot(1000*T(1:50),siginal1_noise(1:50));
title('时域');
xlabel('时间:ms');
ylabel('幅度值');

fft_N=1024;
siginal1_noise_fft=fft(siginal1_noise,fft_N);


subplot(212);
plot((0:fft_N-1)*Fs/fft_N,20*log10(abs(siginal1_noise_fft(1:fft_N))/abs(siginal1_noise_fft(1)) ) ) ;%归一化处理
title('频谱');
xlabel('频率:HZ');
ylabel('幅度值');

在这里插入图片描述

importdata导入文本数据

导入文本里面的数据,常用impordata
在这里插入图片描述
data=importdata(data.txt)

文件的读写

在这里插入图片描述
首先,我们来看一下打开文件,无非就是要么读获取文件的信息,要么就是写入文件。
在这里插入图片描述
其中,我们队前两种进行相关说明,其余可以自行参照文档即可。
fileID = fopen(filename)打开文件filename,用于二进制读访问,并返回等于或大于3的整数文件标识符。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值