Matlab学习笔记 (一)-常用信号及其频谱
Posted 一只Patamon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matlab学习笔记 (一)-常用信号及其频谱相关的知识,希望对你有一定的参考价值。
一、信号波形
周期信号
2、非周期信号
二、信号频谱
1、周期信号
2、非周期信号
三、思考总结
通过绘画常见信号的时域和频域波形,掌握了基本的matlab绘图技巧以及一些常用函数的使用方法,同时对这些信号的特征有了进一步的认识。从原来只会简单地绘制波形到慢慢能更加注重图像细节,如横纵坐标,标题和刻度范围等。
其中关于axis函数,虽然在网上有看到但一开始觉得不重要于是没有注意,但后来发现很多图像都存在峰值无法显示的问题,通过设定坐标范围能让曲线更加完整和美观。
信号时域图的绘制相对来说较为容易,但是最初的绘制都是通过分段函数的方式来实现,这样不仅更加麻烦而且也不清晰明了,通过运用阶跃函数heaviside()更加灵活的完成时域受限的函数波形的绘制。
频谱图的绘制其实还是不太熟练,尤其是连续周期信号。练习时仅绘制了幅频特性图,未绘制相频特性图,认识到傅里叶变换的结果为复数,幅度为其模值,而相位为其相位角。借此完成非周期信号频谱图的绘制,对于连续周期信号,对FFT的原理仍然不理解,只知道抽样定理中采样频率fs>2fm,然后通过网上别人总结的公式来确定相关参数,其中首次绘制sin(4.*pi.x)的频谱图时频率错误地出现在1Hz,将采样频率由10Hz增大至20Hz时出现正确的频谱图(2Hz)。
四、程序代码
周期信号
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]);
非周期信号
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学习笔记 (一)-常用信号及其频谱的主要内容,如果未能解决你的问题,请参考以下文章