matlab傅里叶级数展开

傅里叶级数展开

傅里叶级数展开原理

周期函数可以通过一系列的三角函数的线性组合来逼近,傅里叶技术展开可以找到这些三角函数.
在这里插入图片描述
首先我们可以通过三角函数的正交性计算出傅里叶级数中的系数

源码

方波


function F=fouriersquare
syms x;       %创建变量x
T=0.00001;
i=100;          %谐波的阶数 数字越大越接近直线
t=0:0.00000001:0.0001; %采样点实际使用可调大
%如果创建-1,+1的方波直接调用square即可
%40是40%占空比
f=max(0.7055*square(pi*2*t/0.00001,40),0);
%创建方波最大值是0.7055,最小值是0 除周期
%square(t,duty_cycle)产生一个周期为2 π,幅值为±1的周期性方波, duty_cycle占空比
%square输入的数小于pi,就是1,大于pi小于2*pi就是-1。
%max取正数部分
plot(t,f);
grid on;
hold on;
axis([0 5*10^(-5) -0.5 1.5]);
A0=0.7055*2/5;%可根据函数直接算出
F=0;
Fx=0;
for n=1:i
    As=int(0.7055*2*cos(2*pi*n*x/T)/T,x,0,2*T/5);%傅里叶系数an M = int ( fn, x, xmin, xmax )一重积分
    Bs=int(0.7055*2*sin(2*pi*n*x/T)/T,x,0,2*T/5);%傅里叶系数bn
    F=F+As*cos(2*pi*n*t/T)+Bs*sin(2*pi*n*t/T);%求傅里叶级数展开
    Fx=Fx+As*cos(2*pi*n*x/T)+Bs*sin(2*pi*n*x/T);
end
F=F+A0;
Fx=Fx+A0;
Fx
%figure(2)
plot(t,F)

方波+三角波

function F=fourier_square(amplitude,duty_cycle,T,slope)
syms x amp;      
%求傅里叶展开
%amplitude 幅值
%duty_cycle 占空比
%T 周期
%slope 斜率
%amplitude=0.7055;
%duty_cycle=0.4;
%T=0.00001;
%slope=62125;
i=20;              %谐波的阶数 数字越大越接近直线
t=0:T/1000:T*10;    %采样点范围,调大更精确
deviant=(0.5-duty_cycle)*2;
f=max(slope*T/2*((sawtooth((2*t/T+1.0+deviant)*pi)-deviant)),0)+max(amplitude*square(pi*2*t/T,duty_cycle*100),0);
plot(t,f);
grid on;
hold on;
axis([0 T*5 -0.5*amplitude 1.5*amplitude]);
A0=amplitude*duty_cycle+1/2*slope*duty_cycle^2*T;
F=0;
Fx=0;
for n=1:i
    As=int(2*(amplitude+slope*x)*cos(2*pi*n*x/T)/T,x,0,T*duty_cycle);%傅里叶系数an M = int ( fn, x, xmin, xmax )一重积分
    Bs=int(2*(amplitude+slope*x)*sin(2*pi*n*x/T)/T,x,0,T*duty_cycle);%傅里叶系数bn
    end
    F=F+As*cos(2*pi*n*t/T)+Bs*sin(2*pi*n*t/T);              %求傅里叶级数展开
    Fx=Fx+As*cos(2*pi*n*x/T)+Bs*sin(2*pi*n*x/T);
end
F=F+A0;
Fx=Fx+A0;
Fx
plot(t,F)
简单说明一下函数,本逻辑将电流分成三角波和方波的周期函数叠加,分别做傅里叶分 解。函数需要输入周期函数的周期、方波的幅值、周期函数的占空比、以及三角波的斜率。 首先作出方波和三角波函数叠加后的图像,而后将函数进行傅里叶分解,同时输出傅里叶函 数直流、基波、二次谐波、三次谐波的幅值和角度用于 Ansys Maxwell 仿真时候加激励源, 最后画出傅里叶展开设定次数内函数叠加的图片用于原函数对比傅里叶展开的收敛程度。函 数内有两个可调值 i 和 t,i 为傅里叶分解的谐波的阶数,数字越大越接近直线;t 为采样 点范围,数据越小越精确,但调大会让仿真时间较长。 
由于 matalb 只有几种周期函数,因此实现目标电流函数需要通过位移、函数取正、更改 周期来实现。

matalb 傅里叶级数展开结果图片

结果展示: 收敛 i=20 结果仍有较多毛刺
在这里插入图片描述
收敛 i=50 时候较为接近
在这里插入图片描述

i 继续增大仿真时间指数增加,因此没有继续,理论上 i 无限大时会与原曲线重合,从而验 证傅里叶分解正确性

补充:实际matlab好像有自己傅里叶分解函数fft(),可以通过help查看用法,自己编写函数会掉一些精度

参考引用
MATLAB实现周期信号的傅里叶级数的展开
方波信号傅里叶级数展开

  • 3
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值