Matlab学习笔记 (一)-常用信号及其频谱

Posted 一只Patamon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matlab学习笔记 (一)-常用信号及其频谱相关的知识,希望对你有一定的参考价值。

一、信号波形

  1. 周期信号

2、非周期信号

二、信号频谱

1、周期信号

2、非周期信号

三、思考总结

  1. 通过绘画常见信号的时域和频域波形,掌握了基本的matlab绘图技巧以及一些常用函数的使用方法,同时对这些信号的特征有了进一步的认识。从原来只会简单地绘制波形到慢慢能更加注重图像细节,如横纵坐标,标题和刻度范围等。

  1. 其中关于axis函数,虽然在网上有看到但一开始觉得不重要于是没有注意,但后来发现很多图像都存在峰值无法显示的问题,通过设定坐标范围能让曲线更加完整和美观。

  1. 信号时域图的绘制相对来说较为容易,但是最初的绘制都是通过分段函数的方式来实现,这样不仅更加麻烦而且也不清晰明了,通过运用阶跃函数heaviside()更加灵活的完成时域受限的函数波形的绘制。

  1. 频谱图的绘制其实还是不太熟练,尤其是连续周期信号。练习时仅绘制了幅频特性图,未绘制相频特性图,认识到傅里叶变换的结果为复数,幅度为其模值,而相位为其相位角。借此完成非周期信号频谱图的绘制,对于连续周期信号,对FFT的原理仍然不理解,只知道抽样定理中采样频率fs>2fm,然后通过网上别人总结的公式来确定相关参数,其中首次绘制sin(4.*pi.x)的频谱图时频率错误地出现在1Hz,将采样频率由10Hz增大至20Hz时出现正确的频谱图(2Hz)。

四、程序代码

  1. 周期信号

clear;close;clc;

%正弦函数

x=0:pi/12:6*pi;

m=0:0.01:6*pi;

y=sin(x);

a=cos(x);

subplot(221);

plot(x,y);

xlabel('时间');

ylabel('值');

title('正弦函数');

axis([0 6*pi -2 2]);

% 余弦函数

subplot(222);

plot(x,a);

xlabel('时间');

ylabel('值');

title('余弦函数');

axis([0 6*pi -2 2]);

% 方波函数

b=square(m);

subplot(223);

plot(m,b);

xlabel('时间');

ylabel('值');

title('方波函数');

axis([0 6*pi -2 2]);

% 三角波函数

c=sawtooth(x,0.5);

subplot(224);

plot(x,c);

xlabel('时间');

ylabel('值');

title('三角波函数');

axis([0 6*pi -2 2]);

  1. 非周期信号

clear;close;clc;

% 单边指数函数

x=-10:0.1:10;

y=exp(-x).*heaviside(x);

subplot(231);

plot(x,y);

xlabel('时间');

ylabel('值');

title('单边指数函数');

axis([-10 10 -1 2]);

% 符号函数

a=-heaviside(-x)+heaviside(x);

subplot(232);

plot(x,a);

xlabel('时间');

ylabel('值');

title('符号函数');

axis([-10 10 -2 2]);

% 门函数

b=10.*(heaviside(x+5)-heaviside(x-5));

subplot(233);

plot(x,b);

xlabel('时间');

ylabel('值');

title('门函数');

axis([-10 10 -1 12]);

% 双边指数函数

f=exp(-1*abs(x));

subplot(234);

plot(x,f);

xlabel('时间');

ylabel('值');

title('双边指数函数');

axis([-10 10 -1 2]);

% 钟形脉冲函数

d=10.*exp(-((x/2).^2));

subplot(235);

plot(x,d);

xlabel('时间');

ylabel('值');

title('钟形脉冲函数');

axis([-10 10 -1 11]);

% 升余弦函数

e=2.*(1+cos(pi.*x/2)).*(heaviside(x+2)-heaviside(x-2));

subplot(236);

plot(x,e);

xlabel('时间');

ylabel('值');

title('升余弦函数');

axis([-10 10 -1 5]);

3、周期信号频谱

clear;close;clc;

%方波函数幅度谱

t=-10:0.05:10;

f=square(2.*pi*t/2); %周期为2

fs=10; %采样频率为10

L = length(t); %所有点的个数

n = 2^nextpow2(L); %采样点的个数

Y = fft(f,n);

f = fs*(0:(n/2))/n;

P = abs(Y/n).^2;

subplot(221)

plot(f,P(1:n/2+1)) ;

xlabel('频率');

ylabel('幅度');

title('方波函数幅度谱');

axis([0 2 0 0.25]);

%三角波函数幅度谱

f=sawtooth(t);

fs=10; %采样频率为10

L = length(t); %所有点的个数

n = 2^nextpow2(L); %采样点的个数

Y = fft(f,n);

f = fs*(0:(n/2))/n;

P = abs(Y/n).^2;

subplot(222)

plot(f,P(1:n/2+1)) ;

xlabel('频率');

ylabel('幅度');

title('三角波函数幅度谱');

axis([0 2 0 0.06]);

%正弦函数幅度谱

f=sin(4.*pi.*t);

fs=20; %采样频率为20

L = length(t); %所有点的个数

n = 2^nextpow2(L); %采样点的个数

Y = fft(f,n);

f = fs*(0:(n/2))/n;

P = abs(Y/n).^2;

subplot(223)

plot(f,P(1:n/2+1)) ;

xlabel('频率');

ylabel('幅度');

title('正弦函数幅度谱');

axis([0 4 0 0.15]);

%余弦函数幅度谱

f=cos(4.*pi.*t);

fs=20; %采样频率为20

L = length(t); %所有点的个数

n = 2^nextpow2(L); %采样点的个数

Y = fft(f,n);

f = fs*(0:(n/2))/n;

P = abs(Y/n).^2;

subplot(224)

plot(f,P(1:n/2+1)) ;

xlabel('频率');

ylabel('幅度');

title('余弦函数幅度谱');

axis([0 4 0 0.15]);

4、非周期信号频谱

clear;close;clc;

%单边指数函数幅度谱

syms x ;

y=exp(-x).*heaviside(x);

F=fourier(y);

subplot(231);

ezplot(abs(F));

xlabel('频率');

ylabel('幅度');

title('单边指数函数幅度谱');

axis([-10 10 0 1.5]);

%双边指数函数幅度谱

y=exp(-abs(x));

F=fourier(y);

subplot(232);

ezplot(abs(F));

xlabel('频率');

ylabel('幅度');

title('双边指数函数幅度谱');

axis([-10 10 0 3]);

%门函数幅度谱

y=10.*(heaviside(x+5)-heaviside(x-5));

F=fourier(y);

subplot(233);

ezplot(abs(F));

xlabel('频率');

ylabel('幅度');

title('门函数幅度谱');

axis([-6 6 0 120]);

%%未加axis函数限制时在图中零点附近不能看见峰值只能达到30多,实际上为100

%钟形脉冲函数幅度谱

y=10.*exp(-((x/2).^2));

F=fourier(y);

subplot(234);

ezplot(abs(F));

xlabel('频率');

ylabel('幅度');

title('钟形脉冲函数幅度谱');

axis([-5 5 0 40]);

%符号函数幅度谱

y=-heaviside(-x)+heaviside(x);

F=fourier(y);

subplot(235);

ezplot(abs(F));

xlabel('频率');

ylabel('幅度');

title('符号函数幅度谱');

axis([-5 5 0 50]);

%升余弦函数幅度谱

y=2.*(1+cos(pi.*x/2)).*(heaviside(x+2)-heaviside(x-2));

F=fourier(y);

subplot(236);

ezplot(abs(F));

xlabel('频率');

ylabel('幅度');

title('升余弦函数幅度谱');

axis([-10 10 0 10]);

以上是关于Matlab学习笔记 (一)-常用信号及其频谱的主要内容,如果未能解决你的问题,请参考以下文章

信号频谱 MATLAB 语法

怎样利用MATLAB 完成周期矩形脉冲信号的频谱图??

matlab 作出信号频谱图

Matlab学习(用matlab进行fft谐波分析)

关于用MATLAB设计对信号进行频谱分析和滤波处理的程序

matlab如何作出信号频谱图?