signal processing matlab-2(fft级数)

本文主要来讨论下信号频率分析的傅里叶级数,傅里叶是是每个做信号处理必须了解的一个处理技巧,他能带我们从不同的角度来看待信号的特性,可以说是十分的很好了。。

下面我就给出傅里叶级数的主要表达式:

signal processing matlab-2(fft级数)

关于傅里叶级数的详细推导和物理意义可参考如下的链接:

https://www.bilibili.com/video/BV1wb411K7Kp/?spm_id_from=333.788.videocard.0

https://zhuanlan.zhihu.com/p/19763358

我们在matlab中进行分析求解,按照傅里叶的表达式进行带入:

按照视频里面给出的弹簧阻尼系统,我们求解的是一个矩形波,最大值为10,最小值为3,周期为20,

matlab代码见下:

function F=fft_hust
syms x;
T=20;
n=10; %谐波的阶数
t=0:0.01:80;
%如果创建-1,+1的方波直接调用square即可
%50是50%占空比
f=max(7*square(pi*0.1*t,50),3);%创建方波最大值是1,最小值是0
plot(t,f);
grid on;
hold on;
% axis([0 4*pi -0.5 1.5]);
A0=5;%可根据函数直接算出
F=0;
Fx=0;
for i=1:n
As=int(14*cos(2*pi*i*x/T)/T,x,0,T/2)+int(6*cos(2*pi*i*x/T)/T,x,T/2,T);%傅里叶系数an
Bs=int(14*sin(2*pi*i*x/T)/T,x,0,T/2)+int(6*sin(2*pi*i*x/T)/T,x,T/2,T);%傅里叶系数bn
F=F+As*cos(2*pi*i*t/T)+Bs*sin(2*pi*i*t/T);%求傅里叶级数展开
Fx=Fx+As*cos(2*pi*i*x/T)+Bs*sin(2*pi*i*x/T);
end
F=F+A0;
Fx=Fx+A0;
Fx
%figure(2)
plot(t,F)

代码运行起来可能会比较蛮,可以改下参数来调整。。

另外:说明下square函数,,具体的说法可以这样来理解:

周期性矩形脉冲信号
MATLAB语言调用形式:  y=square(t,duty)
产生一个周期为2 π,幅值为±1的周期性方波, duty表示占空比(duty cycle)占空比是指脉冲宽度τ与周期T的比值(τ/T)

t=-0.0625:0.0001:0.0625;
y=square(2*pi*30*t,75);
plot(t,y),grid on
axis([-0.1,0.1,-1.5,1.5])