吉布斯效应:
当原信号是脉冲信号时,其高频分量主要影响脉冲的跳变沿,低频分量主要影响脉冲的顶部,因此,输出信号波形总是要发生失真,该现象称为吉布斯现象。
原理:
任意周期信号表示为傅立叶级数时,需要无限多项才能逼近原信号,但在实际应用中经常采用有限项级数来代替无限项级数。所选项数越多越接近原信号。所以用一个以原点为中心奇对称的周期性方波,可以用奇次正弦波的叠加来逼近可以观察出吉布斯效应。
代码解释:
主要是下列代码不好理解

N=round((nf+1)/2);
y=zeros(N,max(size(t)));
x=zeros(size(t));
for k=1:2:nfx=x+sin(w1*k*t)/k;y((k+1)/2,:)=x;
end
mesh(y);

首先弄清变量的含义
nf:要计算的傅立叶级数的项数。
N:正弦函数的采样点数,即离散时间傅立叶变换的长度。
y:一个大小为 N×NtN \times N_tN×Nt​ 的矩阵,其中 NtN_tNt​ 是时间轴上的采样点数,用于存储正弦函数的傅立叶级数。
x:一个长度为 NtN_tNt​ 的向量,用于存储当前傅立叶级数的计算结果。
t:一个长度为 NtN_tNt​ 的向量,表示时间轴上的采样点。
w1:正弦函数的频率。
k:循环变量,表示当前正在计算的傅立叶级数的项数。
sin(w1kt):正弦函数的某个傅立叶级数的项。
y((k+1)/2,:):将当前傅立叶级数的计算结果保存到 y 矩阵中。
mesh(y):将 y 矩阵绘制成三维图形。
具体来说,代码中的循环从 1 到 nf,每次计算一个正弦函数的傅立叶级数的某一项,并将当前傅立叶级数的计算结果保存到 x 向量中。然后,将 x 向量的前 (k+1)/2(k+1)/2(k+1)/2 个元素(也就是当前傅立叶级数的计算结果)保存到 y 矩阵中。最后,使用 mesh 函数将 y 矩阵绘制成三维图形。
其中,N=round((nf+1)/2),这行代码的功能是计算一个整数值 N,它的值是 (nf+1)/2 向最近的整数取整后得到的结果。这个整数 N 的作用是在后面的代码中用来定义一个大小为 N 的向量或矩阵,用于存储计算结果。

具体来说,round 函数是 MATLAB 中的一个内置函数,它的作用是将一个实数值四舍五入为最接近的整数。(nf+1)/2 表示将 (nf+1) 除以 2,计算得到一个实数值,然后使用 round 函数将这个实数值四舍五入为最接近的整数。由于 MATLAB 中的数组索引是从 1 开始的,因此这个整数值 N 的意义是用于定义一个从 1 到 N 的整数序列或向量,用于存储计算结果。

在这段代码中,变量 nf 是用于控制傅立叶级数的项数,因此 N 的值与 nf 的值有关系。N 的值等于 (nf+1)/2 向下取整的结果,这保证了 N 是一个整数。如果 (nf+1)/2 是一个整数,那么 N 的值等于 (nf+1)/2;否则,N 的值比 (nf+1)/2 小 0.5。在这段代码中, (nf+1)/2 的作用是计算一共需要计算多少个傅里叶级数项。因为傅里叶级数中包含正弦和余弦两种函数,所以一共需要计算 (nf+1)/2 个正弦函数和 (nf+1)/2 个余弦函数。如果 nf 是奇数,则正弦函数和余弦函数各需要计算 (nf+1)/2 个;如果 nf 是偶数,则正弦函数和余弦函数各需要计算 nf/2+1 个,其中最后一项为直流分量。但是在实际计算时,我们只需要计算其中的一个,另一个可以通过傅里叶级数的对称性质得到。因此,可以只计算 (nf+1)/2 个正弦函数或 (nf+1)/2 个余弦函数。

y=zeros(N,max(size(t)));
x=zeros(size(t));

这里是生成了两个矩阵。
首先,x=zeros(size(t)) 创建了一个与 t 同样大小的全零矩阵,作为正弦函数的累加器。在后面的循环中,将通过累加一系列正弦函数来生成信号。
其次,y=zeros(N,max(size(t))) 创建了一个大小为 N 行,max(size(t)) 列的全零矩阵,作为输出矩阵。在后面的循环中,将计算 (nf+1)/2 个正弦函数,将它们存储在 y 的每一行中。每一行表示一个正弦函数,而列则表示时间轴上的不同时间点。
因为在循环中需要向 y 中不断添加新的行,所以 y 需要是可变大小的,而 x 则是一个定长的向量,只需要用来累加正弦函数。两个矩阵的大小和类型不同,因此需要分别创建。在这个代码中,我们需要将所有的正弦函数的值存储在 y 矩阵的每一列中,因此需要知道 t 中元素的最大数量。因此,使用 max(size(t)) 可以保证 y 矩阵的列数大于或等于 t 中元素的数量。如果使用 size(t),则不能保证这一点。单纯的size(t)是指在 MATLAB 中,size(t) 返回一个包含矩阵 t 的行数和列数的向量。如果 t 是一个行向量,则返回值为 [1, N],其中 N 是 t 中元素的个数。如果 t 是一个列向量,则返回值为 [N, 1]。

for k=1:2:nf

执行一个循环,k 是循环变量,1:2:nf 是循环条件,表示从1开始,以步长为2逐渐递增,直到 nf。

y((k+1)/2,:)=x;

这行代码的含义是将矩阵 x 的值赋值给矩阵 y 中的一行,这一行的索引是 (k+1)/2,而列的索引是 :,表示赋值给整个行。
在这个代码中,循环变量 k 是奇数,因此 (k+1)/2 是一个整数。这个整数表示将 x 中的值赋值给 y 中的第 ((k+1)/2) 行。
因为 x 是一个行向量,所以 y((k+1)/2,:) 将 x 的值复制到 y 的第 ((k+1)/2) 行的所有列中。
总代码:

T1=800;
nf=19;
f1=1/T1;
w1=2*pi*f1;
t=0:1:T1/2;
N=round((nf+1)/2);y=zeros(N,max(size(t)));
x=zeros(size(t));for k=1:2:nf;x=x+sin(w1*k*t)/k;y((k+1)/2,:)=x
endmesh(y);
axis([0,T1/2,0,N,0,1])

运行结果:

MATLAB——观察吉布斯效应相关推荐

  1. 基于matlab的吉布斯效应研究,MATLAB设计题目综述.doc

    MATLAB设计题目综述 MATLAB设计题目 题目:单边带调制器 要求:SSB信号的两种产生方法(滤波法.相移法),并对比调制前后频谱. 提示:希尔伯特滤波器采用函数firpm,具体见MATLAB的 ...

  2. matlab 模拟吉布斯效应

    计算傅里叶级数 总之,一个周期的矩形脉冲信号可以用下面的傅里叶级数表示 代码和运行结果 clear all; clf;DC = 1; %直流分量 N = 100;%谐波次数 for k=1:N,X(k ...

  3. FIR滤波器以及吉布斯效应

    最近要录一些环境声音数据做实验,录音笔上有一个选项--Low Cut Filter,即低频切除滤波器,就是一个高通滤波器,其作用是"减轻投影机声音或因风产生的啸叫声等低频噪音,以便更清晰地录 ...

  4. 基于matlab的talbot效应光栅的计算机模拟[1],基于MATLAB的Talbot效应光栅的计算机模拟[1]...

    错误!未指定书签. 基于MATLAB的Talbot效应光栅的计算机模拟 四川省通江县陈河小学 张洪 摘要 计算机模拟技术广泛应用在教学和科研中,在Talbot效应实验中引入计算机能更深动和深入揭示光学 ...

  5. 基于matlab的talbot效应光栅的计算机模拟[1],基于matlab的talbot效应光栅的计算机模拟.doc...

    基于matlab的talbot效应光栅的计算机模拟.doc 30D0618F8C4DC3CCF74DBDD562A550D5PDF1基于MATLAB的TALBOT效应光栅的计算机模拟四川省通江县陈河小 ...

  6. 吉布斯效应(Gibbs)、振铃(ring)现象和块效应(Blocking Artifact)

    在一维信号中,前两个现象比较好理解.通过百度百科,了解的比较透彻. 先来简要回顾一下吉布斯效应. 对于Gibbs现象,百度百科解释为:吉布斯现象(又叫吉布斯效应):将具有不连续点的周期函数(如矩形脉冲 ...

  7. MATLAB观察系统响应,基于MATLAB的系统的时域响应分析精选.doc

    基于MATLAB的系统的时域响应分析精选 摘 要 系统的时域响应分析是衡量控制系统的重要指标.所谓控制系统的时域响应分析就是在时间域内求解系统的微分方程,然后根据绘制出来的曲线分析系统的性能和各主要参 ...

  8. python爬虫爬取股票评论,调用百度AI进行语义分析, matlab观察股票涨跌和评论的关系

    文章自己写的,代码自己调试的,但是思想是拿来的哈哈,不能叫严格意义上的 原创哦 一.爬股票的评论 环境:win7 aconda2python2.7,pycharm3.5 professional 1. ...

  9. MATLAB观察日志(part1)--求极限

    学习笔记,仅供参考 题目 0.5×41−t1−t+0.5×161−t1−t=y1−t1−t0.5 \times \frac{4^{1-t}}{1-t}+0.5 \times \frac{16^{1-t ...

最新文章

  1. C++ 调试技术:addr2line
  2. 进程通信之二 管道技术第二篇 匿名管道
  3. Update msi using vbscript
  4. 设置硬盘休眠linux,linux笔记本设置休眠
  5. linux-type命令查看类型
  6. JAVA操作属性文件,可进行读 写 更改
  7. 千万级用户直播APP——服务端结构设计和思考
  8. mathematica打包java_使用Mathematica将解决方案绘制到方程式中
  9. 让你的网页更精彩 - Javascript 调用MSAgent
  10. lagrange量中的u和v的来历
  11. Medusa(美杜莎)--参数及常见命令
  12. 华胜天成旗下成员企业沃趣科技为华泰证券IT系统保驾护航
  13. oepncv 移动目标追踪, 背景消除法,MOG,KNN
  14. 平衡二叉树——如何实现不平衡二叉树到平衡二叉树
  15. 对1976年Diffie和Hellman的文章《New Direction in Cryptography》的中文翻译
  16. mysql 家谱树查询_族谱树算法
  17. Excel导出功能超时解决方案 -- 异步处理
  18. 【计算机组成原理】真值与机器值小数原码与整数原码定义及举例
  19. cd ..、cd / 和 cd ~ 的区别
  20. iOS-苹果开发者账号申请之邓白氏编码查询

热门文章

  1. modbus通信CRC校验代码
  2. JS公式实例一:画圆
  3. 2020Java个人学习计划+书籍
  4. 高速数据传输系统市场现状研究分析-
  5. 线性代数学习笔记——第四章学习指南——n维向量空间
  6. 伊朗APT组织的网络间谍工具源代码和攻击者被泄露和曝光
  7. 机器学习--期望风险、经验风险与结构风险之间的关系
  8. 基于linux+windows Qt+Mysql 开发的在线答题系统
  9. 数字化办公,需要这个免费低代码平台来助力
  10. php for continue,PHP跳出循环之“continue”实例详解