专栏首页科学计算如何用Python复现吉布斯现象?

如何用Python复现吉布斯现象?

1. 什么是吉布斯(Gibbs)现象?

  在信号处理中,有很多很有意思的现象,比如由于栅栏效应引起的频谱泄露,和我们这一讲要讲到的吉布斯现象。

  吉布斯现象和频谱泄露多少有些相像,频谱泄露是因为进行DFT时对时域信号进行了截断;而吉布斯现象则是对频域信号进行了截断。

  先来看下维基百科上的解释,吉布斯现象是由Henry Wilbraham于1848年最先提出,并由约西亚·吉布斯于1899年证明。在工程应用时常用有限正弦项正弦波叠加逼近原周期信号。所用的谐波次数N的大小决定逼近原波形的程度,N增加,逼近的精度不断改善。但是由于对于具有不连续点的周期信号会发生一种现象:当选取的傅里叶级数的项数N增加时,合成的波形虽然更逼近原函数,但在不连续点附近会出现一个固定高度的过冲,N越大,过冲的最大值越靠近不连续点,但其峰值并不下降,而是大约等于原函数在不连续点处跳变值的9%,且在不连续点两侧呈现衰减振荡的形式。

SquareWave

  简单来说,就是我们对信号进行分析时,无论是对模拟信号还是数字信号,都无法分析无限大的频谱区间,我们只能截取频谱的一部分来分析,这就导致了对频谱产生了截断。比如一个矩形波信号(门函数)的傅里叶变换是Sinc函数,且频谱的区间是无线大的。

Rect function

  我们在进行分析时,只会取频谱中的一部分,假设我们取下图中的红框之内的部分。

image-20210708231653739

如果我们再对截取后的信号做逆傅里叶变换,就会发现时域信号并非之前的矩形信号,而是在棱角处会有一个过冲。

image-20210709093344453

当频域截断的带宽更大时,过冲的最大值越靠近不连续点,但其峰值并不下降。

image-20210709093412200

2. 吉布斯现象的数学原理

  说到吉布斯现象,必须要提到傅里叶,大名鼎鼎的傅里叶在1807年向法国科学学会提交了《热的传播》论文,里面提到一个当时很有争议的观点:任何连续周期信号可以由一组适当的正弦曲线组合而成。这其实就是傅里叶级数(下面的公式),但拉格朗日却表示质疑,他认为傅里叶的方法无法表示带有棱角的信号,比如我们上面提到的矩形信号。科学学会鉴于拉格朗日的威望,拒绝了傅里叶的论文。

  他们两个的说法谁对谁错呢?

  首选拉格朗日肯定是对的,傅里叶级数的每一项都是连续光滑函数,因此它们的组合不可能表示一个带有棱角的信号。

  傅里叶也是对的,虽然无法精确表示,但我们可以用正弦曲线的组合来逼近的表示一个带有棱角的信号,逼近到这两个信号不存在能量差别;但这并不代表可以点点收敛,因此才有了吉布斯效应。在傅里叶级数中,我们取的项数越多(N越大),对应到上一节中我们选取的带宽就越大。

3. 如何用Python复现吉布斯现象?

  可以分如下几步进行:

1.产生矩形信号;

n = 4096
n_ones = 40
sig = np.zeros(n,)
sig[n//2-n_ones//2:n//2+n_ones//2] = 1

2.对矩形进行做FFT变换到频域;

sig_fft = np.abs(np.fft.fftshift(np.fft.fft(sig)))

3.产生频域的矩形窗信号;

4.对频域的矩形窗信号做IFFT得到时域的Sinc信号;

5.将时域矩形信号与Sinc信号卷积得到过冲的矩形信号;

6.该矩形信号与频域截取后的信号是傅里叶变换对

具体过程可以参考下图:

gibbs

本文分享自微信公众号 - 科学计算technomania(Quant_Times),作者:张大侠

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python之父Guido宣布退出核心决策层

    在一封名为Transfer of power的邮件中,Python 之父 Guido van Rossum 透露他将退出 Python 核心决策层而转居幕后,他...

    Python中文社区
  • python笔记:#001#python简介

    gongluck
  • [人间也值得] - Mryang带你快速得去认识 Python

    计算机不能直接理解任何除机器语言以外的语言,所以必须要把程序员所写的程序语言翻译成机器语言,计算机才能执行程序。将其他语言翻译成机器语言的工具,被称为编译器

    杨校
  • python笔记:#001#python简介

    认识 Python 人生苦短,我用 Python —— Life is short, you need Python ? 目标 Python 的起源 为什么要...

    _gongluck
  • 历史上最伟大的12位程序员

    所谓程序员,是指那些能够创造、编写计算机程序的人。不论一个人是什么样的程序员,或多或少,他都在为我们这个社会贡献着什么东西。然而,有些程序员的贡献却超过了一个普...

    Python之道
  • 周末荐影 | 八部电影让你看懂大数据

    1 ? 《V客帝国》 在大数据的世界里,V并非指“仇杀”(Vendetta),而是著名的3V定律: Velocity速度——以接近实时的速度处理数据产生报告,而...

    小莹莹
  • 历史上最伟大的12位程序员

    所谓程序员,是指那些能够创造、编写计算机程序的人。不论一个人是什么样的程序员,或多或少,他都在为我们这个社会贡献着什么东西。然而,有些程序员的贡献却超过了一个普...

    程序员互动联盟
  • 历史上最伟大的12位程序员

    历史上最伟大的12位程序员 所谓程序员,是指那些能够创造、编写计算机程序的人。不论一个人是什么样的程序员,或多或少,他都在为我们这个社会贡献着什么东西。然而,有...

    Java帮帮
  • 历史上最伟大的12位程序员

    所谓程序员,是指那些能够创造、编写计算机程序的人。不论一个人是什么样的程序员,或多或少,他都在为我们这个社会贡献着什么东西。然而,有些程序员的贡献却超过了一个普...

    用户1667431
  • 【致敬】历史上最伟大的12位程序员

    大数据文摘
  • IT 界开源贡献 Top 10,PHP 之父居然排第 10!第一名当之无愧!

    IT界开源贡献Top 10,你认识几个呢? 林纳斯·本纳第克特·托瓦兹 Linux之父 ? 林纳斯·托瓦兹是Linux之父,他是开源理念的发起者之一,他曾经花费...

    企鹅号小编
  • Python是什么 Python的用处

    Python 是一门有条理的和强大的面向对象的程序设计语言,类似于Perl, Ruby, Scheme, Java。现在流行的AI人工智能技术大部分都是用Pyt...

    砸漏
  • Python语言被列入全国计算机等级考试科目中

    全国计算机等级考试调整方案 2015年,考试中心组织召开了第六届全国计算机等级考试(NCRE)考委会会议,会议完成NCRE考委会换届选举,并确定了下一步改革目标...

    企鹅号小编
  • 【收藏】记住这五个字,入门朴素贝叶斯模型

    朴素贝叶斯由两部分组成,“朴素”是一种带有假设的限定条件,“贝叶斯”则指的是贝叶斯公式。合起来,朴素贝叶斯指的就是在“朴素”假设条件下运用“贝叶斯公式”。

    guichen1013
  • # python # 17年招聘数据可视化

    很久之前就从公司的公开网站上爬取了招聘数据的信息,直到最近才最终完成的可视化方面的事情。

    滚神大人
  • 马哥金牌分享 | 十分钟学会用Django快速搭建一个blog

    本文是由马哥教育金牌讲师小智的文字分享《如何快速搭建一个博客》整理而来。 ---- 1.django简介 Django是一个开放源代码的Web应用框架,由Py...

    小小科
  • 手机GPS背后的隐形人物:用纸质图手算出冥王星轨道的女数学家

    GPS技术无疑已经成为了我们生活的一部分:在手机上使用行车导航,还能为Ins的照片标记位置。

    大数据文摘
  • 父亲节,来认识一下这几位“爸爸”

    艾伦·图灵(Alan Mathison Turing,1912年6月23日-1954年6月7日),英国数学家、逻辑学家,被称为计算机科学之父,人工智能之父。19...

    华章科技
  • 费尔德曼的百吉饼实验:人类的诚实程度其实超出你的想象!

    大数据文摘

扫码关注云+社区

领取腾讯云代金券