Fourier级数变换小程序_Matlab

Fourier级数变换

这里讨论周期函数 f(t) 在对称区间(-L,L)上进行Fourier级数展开.
(1)Fourier级数公式

在这里插入图片描述

其中
在这里插入图片描述

(2)Euler公式
在这里插入图片描述

(3) 利用(2)式整理可得ck如下
在这里插入图片描述

当K=0时
在这里插入图片描述

K不等于0时
在这里插入图片描述
在这里插入图片描述

将ak,bk带回Fourier公式,从而可以得到Fourier级数的展开式如下
在这里插入图片描述
由余弦函数是偶函数,正弦函数是奇函数的特点,可进一步将上式进行改写成如下的式子.
在这里插入图片描述

(4)选取如下的周期函数进行测试
在这里插入图片描述
(5)代码部分(包含了对Parseval恒等式的验证)
Parseval恒等式(这里我只考虑了一个函数做内积!也可以改成两个不同函数做内积的情况,(f,g).
在这里插入图片描述
mian.m

% Fourier 级数展开
% 讨论周期函数的傅里叶展开式
clc;clear;close;
syms t k;
f1=2*t+1;
f2=-2*t+1;
L=1/2;       %讨论[-1/2,1/2]
m=10;        %展开的级数项数

% 计算 f的内积
I=(int(f1*f1,t,-L,0)+int(f2*f2,t,0,L))/(2*L);

% 进行傅里叶转化
[a0,ak,bk]=myfourier(f1,f2,L);  % 得到 ak,bk的通项表达式
[ck,s]=sfourier(a0,ak,bk,m,L);  % 级数求和
c0=a0;

%代入数值
dt=0.01;
t=-L:dt:L;
ss=vpa(subs(s)); % vpa将结果转发为小数
ff=ff(t,L);

%验证 Parseval恒等式
a=real(ck);
b=imag(ck);
ck_=a-1i*b;
%sum_ck=sum(abs(ck).^2 )+(c0^2)/2;
sum_ck=2*sum(ck.*ck_)+(c0^2);
eps=vpa(abs(I-sum_ck)) %f的内积与级数系数乘积加和的误差
ck=[c0,ck];

%画图比较真实值与级数展开的结果
subplot(211)
plot(t,ff,'r*',t,ss,'bo');
legend('周期函数图像','级数展开图像')
xlabel('t');
ylabel('f');
subplot(212);
K=0:1:m;  % k 的取值范围
stem(K,abs(ck),'filled');
xlabel('k');
ylabel('频率值 Ck');
legend('频谱图');

ff函数代码如下 ff.m

function y=ff(t,L)
y=(2*t+1).*( t>=-L & t<0 )+(-2*t+1).*(t>=0 & t<L);

计算Fourier计算ak,bk. ( ck=ak-i bk ).ck是Fourier系数
myfourier.m

%计算系数积分表达式,区间为(-L,L)
function [a0,ak,bk]=myfourier(f1,f2,L)
syms t k;
a0=(int(f1,t,-L,0)+int(f2,t,0,L) )/(2*L);
ak=( int(f1*cos(k*pi*t/L),t,-L,0)+int(f2*cos(k*pi*t/L),t,0,L))/(2*L);
bk=( int(f1*sin(k*pi*t/L),t,-L,0)+int(f2*sin(k*pi*t/L),t,0,L))/(2*L);
return

级数求和代码 sfourier.m

% 求信号f在(-L,L)上的傅里叶级数前m项
function [ck,s]=sfourier(a0,ak,bk,m,L)
syms t k;
sk=ak*cos(k*pi*t/L)+bk*sin(k*pi*t/L); % k 取正值
ssk=symsum(sk,k,1,m);
s=a0+2*ssk;  % a0是数值,ssk是含t的表达式
k=1:m;
ak=subs(ak); %k遍历,得到数值ak,不再是符号表达式
bk=subs(bk);
ck=ak-1i*bk;         % 数值
return

%实验结果图
在这里插入图片描述
我刚学完Fourier级数这里,看了很多博客,很多文章的Fourier级数的表达式和我写的这个不太一样,可能差一个常数!相应地,Fourier系数表达式做相应的变化就行(和我给的表达式差一个常数)。但其本质和推导过程是相似的!第一次写,不准确的地方欢迎指出来!哈哈哈哈~~~~~~!(接下来有时间就把Fourier变换推导写写!)

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值