matlab(信号系统)

matlab的微分

matlab中的求微分格式为diff(f(x))

plot中的矢量长度必须相同(很重要)

解决方法:利用length和linspace函数对原来的自变量长度进行进行变换

关于matlab绘图的一些美化

  1. 在绘图时,我们使用了Matlab默认的参数,在菜单栏用‘另存为’功能将图保存为PNG格式的图片,相当于对屏幕进行硬拷贝。这张图的质量比较差:一、图像的分辨率很低,只有560x420像素;二、文字太小,看不清楚,Matlab默认的文字大小为10px;三、坐标轴和曲线比较细,整个图看上去相当单薄。好在Matlab提供了灵活、简便的方法,可修改图中各种参数的数值。

    通过**set(gca, ‘fontsize’, 14);**,将坐标轴标签的字符大小从8px增加到14px;

    通过**set(gca, ‘XMinorTick’, ‘on’);**等,设置X和Y轴的副标记(MinorTick);

    通过**set(gca, ‘XGrid’, ‘on’);**等,显示坐标网格;

    通过**set(gca, ‘LineWidth’, 1.5);**,将坐标轴的线宽由0.5px增加到1.5px;

    通过设置’FontSize’,将标题的字符大小由10px增加到20px;

    在plot时,通过设置’LineWidth‘,将线宽由0.5px增加到1.5px。

  2. 关于plot()

    plot(x,y)画图

    ‘LineWidth’,线条宽度,最小是1

    ‘color’,线条颜色,同上

    ‘LineSpec’,这里直接表示线的形状,不用写’LineSpec’

    ‘MarkerSize’、’MarkerEdgeColor’、 ‘MarkerFaceColor’:如果线形使用Marker,可以调节大小、边界颜色、内部颜色

    例如,

    x=0:1/pi:2*pi;

    y=sin(x);

    plot(x,y,’–bo’,’LineWidth’,2,’color’,’blue’,’MarkerSize’,10,’MarkerEdgeColor’,’black’,’MarkerFaceColor’,’red’)

    表示画一条如下图所示的正弦函数,’–bo’表示虚线、蓝色、采样点用圆圈标出。线形和点形以及颜色可以自由组合。

    关于图注、图例、坐标轴、字体大小

    命名横纵坐标

    a=xlabel(‘Name of x axis’);b=ylabel(‘Name of y axis’);

    设置标题

    c=title(‘contents of your title’);

    设置图例

    d=legend(‘y1’,’y2’);

    设置上述内容的位置、字体大小、粗细

    set(a,’unit’,’normalized’,’Position’,[x,y],’FontSize’,number_fontsize,’FontName’,name_of_font_style)

    set(a,’unit’,’normalized’,’Position’,[x,y,width,height],’FontSize’,number_fontsize,’FontName’,name_of_font_style,’LineWidth’,number_linewidth);

    1. 修饰代码

      subplot(2,2,2) plot(t,f2) title('f2(t)') xlabel('t') ylabel('f2(t)')

自创函数实现离散数列卷积

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function [ny,y]=myconv(nx,x,nh,h) #定义一个myconv的函数来实现离散序列的卷积

nyl=nx(1)+nh(1); #y的位置向量ny第一项的求法
nyh=nx(end)+nh(end); #y的位置向量ny最后一项的求法
ny=nyl:nyh; #ny的范围
d=1;
y=x(1)*h; #x的第一项与h的每一项相乘
a=length(x);

for i=1:a #for循环实现了从x(2)-->x(end)每一项与h(n)的相乘后之和
d=d+1;
A=x(d)*h;

for c=1:(d-1)#此处for循环实现了让A列数增加d-1列,和我们数学公式中的两项多位相乘后错位排列进行相加的功能。
A=[0,A];
end

y=[y,0]; #矩阵相加只能同维度。为了使y与A同维度,方便相加
y=y+A;

if(d==a) #当d=a时,跳出循环,不再进行。避免了在A处的索引超出x的维度
break;
end
end
end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>>nx=-2:2;
>> x=[1,2,3,4,5];
>> nh=-3:4;
>> h=[1,2,3,4,5,6,7,8];
>> nyl=nx(1)+nh(1);
>> nyh=nx(end)+nh(end);
>> ny=nyl:nyh;
>> y=conv(x,h)

y =

1 4 10 20 35 50 65 80 86 82 67 40

>> subplot(3,1,1);
>> stem(ny,y);
>> title(string('y(n)'))
>> subplot(3,1,2);
>> stem(nx,x);
>> title('x(n)')
>> subplot(3,1,3);
>> stem(nh,h);
>> title('h(n)')

一些函数的运用

linspace是Matlab中的均分计算指令,用于产生x1,x2之间的N点行线性的矢量。y = linspace(x1,x2,n) 生成 n 个点。这些点的间距为 (x2-x1)/(n-1)。

subplot是 MATLAB 中的 函数 ,是将多个图画到一个平面上的工具。 在matlab的命令窗口中输入doc subplot或者help subplot即可获得该函数的帮助信息。 subplot是 MATLAB 中的函数。 使用方法:subplot(m,n,p)或者subplot(m n p)。

dirac()函数,用于δ函数的表示。

heaviside()函数,用于阶跃函数的表示。

function C=convNew(A,B)

C=zeros(1,length(A)+length(B)-1);
i=1:length(A);
C=C+[zeros(1,i-1),A(i)*B,zeros(1,length(A)-i)];
end

单位脉冲impseq(n0,n1,n2);
M文件如下:
function x=impseq(n0,n1,n2)
n=n1:n2;
x=[(n-n0)==0];其中n0为delta=1处横坐标。

阶跃脉冲stepseq(n0,n1,n2);
M文件如下:
function [x,n]=stepseq(n0,n1,n2)
n=n1:n2;
x=[(n-n0)>=0];

傅里叶变换绘图

ft=sym(‘exp(-2*(t-1))*heaviside(t-1)’);
Fw=fourier(ft);
subplot(211),ezplot(abs(Fw)),grid on,title(‘幅度谱’)
phase=atan(imag(Fw)/real(Fw));
subplot(212),ezplot(phase);grid on,title(‘相位谱’)

ft=sym(‘exp(-2*abs(t-1))’);
Fw=fourier(ft);
subplot(211),ezplot(abs(Fw)),grid on,title(‘幅度谱’)
phase=atan(imag(Fw)/real(Fw));
subplot(212),ezplot(phase);grid on,title(‘相位谱’)