周期方波信号的级数分解_Reason_Lee的博客-程序员秘密_方波分解

技术标签: 傅里叶级数  MATLAB  信号与系统  

根据傅里叶级数的定义我们知道:

对于任意一个周期为的周期信号,都可以求出它在三角函数集中各函数中的分量,从而可将在区间内表示为三角函数集中各函数的加权和。即:


其中:




借助Matlab编写M文件,以方波信号为例,选取不同的级数项数进行合成,观察与原方波的逼近情况。

源码如下:

%该m文件用于绘制方波信号及其傅立叶级数谐波叠加
clc;clear;close all;
syms x;		 %定义符号变量x,用于求解an、bn
A = input('请输入方波信号的幅度:');
T = input('请输入方波信号的周期:');
PW = input('请输入方波信号的脉宽:');
c = input('请问您要显示几个周期的方波:');
m = input('请问您需要几次谐波叠加:');
index = 1;		 %定义方波信号下标
sw = ones(1,c*T*100+1);		 %预定义方波信号,可提高Matlab运行速率
for  N = -c/2:c/2-1		 %遍历c个周期
%绘图过程中舍弃重复部分
     if  N==-c/2
         i = 0;
     else
         i = 0.01;
     end
%一个周期内判断何时为幅度为A,何时为0
     for  t = N*T+i:0.01:(T+N*T)
         if((t>=(T-PW)/2 + N*T)&&(t<=((T+PW)/2 + N*T)))
             sw(index) = A;
             index = index + 1;
         else
             sw(index) = 0;
             index = index + 1;
         end
     end
 end
t = -c*T/2:0.01:c*T/2;
plot(t,sw,'LineWidth',2);		 %绘制方波信号
xlabel('t');ylabel('幅度');title(['方波信号及其傅立叶级数' num2str(m) '次谐波叠加']);
hold on;
%以下为傅立叶级数展开部分
w = 2*pi/T;
%预定义an、bn
an = ones(1,m);
bn = ones(1,m);
sum = 0;
a0 = 2/T*A*PW;
for  n = 1:m
%根据周期的奇偶选择积分区间
    if (mod(c,2)==1)        
        an(n) = 2/T*double(int(A*cos(n*w*x),-PW/2,PW/2));
        bn(n) = 2/T*double(int(A*sin(n*w*x),PW/2,PW/2));
    else
        an(n) = 2/T*double(int(A*cos(n*w*x),(T-PW)/2,(T+PW)/2));
        bn(n) = 2/T*double(int(A*sin(n*w*x),(T-PW)/2,(T+PW)/2));
    end
    ft = a0/2 + an(n)*cos(n*w*t) + bn(n)*sin(n*w*t);
    %避免重复添加a0
    if  n==1
        sum = sum + ft;
    else
        sum = sum + ft - a0/2;
    end
end
plot(t,sum,'r','LineWidth',2);      %绘制m次谐波叠加后图像
legend('方波信号',[num2str(m) '次谐波叠加']);

在命令窗口输入对应参数:幅度5,周期4,脉宽2,显示5个周期方波,3次谐波叠加。运行该M文件得结果如下:


将叠加次数换为9次,得如下结果:


再将叠加次数换为15次,得如下结果:


对比以上三幅图,可以得到以下结论:

周期信号(本实验中为方波信号)选取有限次傅里叶级数进行叠加。当选取的项数越多,在所合成的波形中出现的峰起越靠近原信号的不连续点。当选取的项数很大时,该峰起值趋于一个常数,大约等于总跳变值的9%(吉布斯效应)。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Reason_Lee/article/details/80504427

智能推荐

SDF(Signed-distance-field: 有向距离场)(12): Shadow And AO(WebGL实现)增强立体感_含影的博客-程序员资料

Demo1:http://www.artvily.com/sdf?sample=codeDemo&amp;clip=shadowAndAO3Demo2:http://www.artvily.com/sdf?sample=codeDemo&amp;clip=shadowAndAO2AO(Ambient Occlusion) 中文翻译为环境遮蔽, 这个功能可以在渲染中有效增强立体感。可...

c 追加字符串_【C语言更新】C语言中字符串的操作_weixin_39897746的博客-程序员资料

文/Edward在C语言的实际使用中,很多时候会去使用指针传递一些字符串,而C语言中也有很多关于字符串处理的库函数给大家来使用,只要在使用的时候包含头文件“string.h”就可以使用它们了。接下来的内容中,我们将使用之前学习过的内容自己写一些代码来实现几个这些库函数可以提供给我们的功能,实现完成之后,再介绍相应的库函数。字符串长度的测量一说到长度的测量,很多人脑中第一时间就会联想到...

在VSCode中配置Python运行环境__Naive_的博客-程序员资料

很多时候只需要写一些小脚本,就十几二十行的样子,打开PyCharm什么的太费劲了,可以考虑用VSCode便捷开发。在VSCode中只需要配置好launch,json就可以按F5进行调试了。 打开launch.json:调试 &amp;gt;&amp;gt; 打开配置 修改 pythonpath 词条:&quot;version&quot;: &quot;0.2.0&quot;, &quot;configurations&quot;: [ ...

Hadoop使用lzo压缩并支持分片_xiaoxiongaa0的博客-程序员资料

[[email protected] hive-1.1.0-cdh5.7.0]$ which lzop/bin/lzop[[email protected] data]$ lzop -v page_views_big.dat[[email protected] data]$ ls -lahtotal 1.4Gdrwxrwxr-x 2 hadoop hadoop 4.0K Apr ...

charAt_happy_wealthy的博客-程序员资料

String word = "zhu";word.charAt(1);//取出第一个char,z

在大厂实习三个月后,我竟然迎来了“中年危机“_程序员小濠的博客-程序员资料

中年危机,正在实习生身上蔓延。如今,实习早已经不是大三大四、研二研三求职前的简历演练。越来越多刚步入高校没多久的学生就开始找实习,为“光明的未来”焦虑不已。他们一边兢兢业业做着实习工作,一边在网站上心惊胆战地搜索:“职场上 35 岁以上的人去哪了?”以往人们在 30 岁才到来的中年危机,这种焦虑已经提前发生在 25 岁甚至刚毕业、还没毕业的年轻人身上。整个社会不停地转折、变化、动荡着,如同一架高速运转的机器。处在学校和职场的夹缝中的大厂实习生,如同这架机器的神经末梢,还没成为主要动力,就

随便推点

flutter踩坑记录(二)--基本使用及原生flutter交互篇_努力为明天的博客-程序员资料

flutter踩坑记录目录flutter踩坑记录(一)--项目准备阶段 https://blog.csdn.net/hjr365708064/article/details/95454939flutter踩坑记录(三)-- 项目打包https://blog.csdn.net/hjr365708064/article/details/95473183通过上一篇的踩坑记录(一),我...

javaw java 区别,java和javaw之间的区别_喝前尧一尧的博客-程序员资料

I searched to know the difference between java.exe and javaw.exe. I read throughDifference between Java.exe and Javaw.exe.There it is stated that java.exe is for console and javaw.exe is for window ap...

知识点-SpringAOP_盐仓的博客-程序员资料

Spring AOP是什么?我们知道Java是一个面向对象(OOP)的语言,但它有一些弊端,比如当我们需要为多个不具有继承关系的对象引入一个公共行为,例如日志、权限验证、事务等功能时,只能在在每个对象里引用公共行为。这种方式不利于长期维护,且会造成大量重复代码,AOP就可以来弥补OOP的不足,代理模式比如A对象要做一件事情,在没有代理前,自己来做;在对 A 代理后,由 A 的代理类 B 来做。代理其实是在原实例前后加了一层处理,这也是 AOP 的初级轮廓。静态代理原理及实践...

经典Android开发教程!面试字节跳动两轮后被完虐,附面试题答案_程序员Sunbu的博客-程序员资料

前言说起IT行业,大多数人脑海里反应出的第一个标签一定是“高薪”,而说起程序员,大家更多想到的可能是:秃顶、木讷、格子衫;加班多、能赚钱、不花钱;没对象……这难道就是传说中的“国际驰名双标”?程序员难道就不是IT 行业的?上面的都还不是最让人担心的,关键是,网上还有很多人说“程序员在互联网行业里面是吃青春饭的,干到35岁就会被行业淘汰掉”。这下子戳到了大家心里的痛点。为何现在Android应用开发这么难找到工作?随着资本的冷却,整个互联网市场也逐渐的冷静下来.Android应用开发从一开.

《SQL Server 2005实现与维护》之 配置SQL Server 2005_weixin_30664615的博客-程序员资料

一 .配置日志文件和数据文件1. 数据文件分为两种:主数据文件(.mdf):包含数据库目录的启动信息,并且指向其他数据库文件。次数据文件(.ndf):可选的并且是用户定义的,它包含对象和用户数据。通常这样使用他们:将数据库目录存放在主要文件上,将所有的数据和对象存储在次要文件上。2. 数据文件可以分组,称为文件组。通常支持两种文件组:主要文...

计算机专业社会实践报告1500字,计算机专业社会实践报告范文3000字_weixin_39807541的博客-程序员资料

3.每一份影像拷贝(TitleCopy)都有各自的编号Id,同一个影像的若干拷贝编号不同,但是不同的影像拷贝的编号可能会重复。必须记录下是否已经出租,以便于店员随时能够查询拷贝资料的当前状态(status)。4.系统中允许会员预定某项影像资料,但必须提前预约租赁时间(res_date)。5.每一项出租事项需要记录下来(租借日期book_date,实际归还日期act_ret_date,过期时间(ex...

推荐文章

热门文章

相关标签