MATLAB——观察吉布斯效应

这篇具有很好参考价值的文章主要介绍了MATLAB——观察吉布斯效应。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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;
end
mesh(y);

首先弄清变量的含义
nf:要计算的傅立叶级数的项数。
N:正弦函数的采样点数,即离散时间傅立叶变换的长度。
y:一个大小为 N × N t N \times N_t N×Nt 的矩阵,其中 N t N_t Nt 是时间轴上的采样点数,用于存储正弦函数的傅立叶级数。
x:一个长度为 N t N_t Nt 的向量,用于存储当前傅立叶级数的计算结果。
t:一个长度为 N t N_t Nt 的向量,表示时间轴上的采样点。
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
end

mesh(y);
axis([0,T1/2,0,N,0,1])

运行结果:
matlab吉布斯现象,MATLAB,matlab,算法,矩阵文章来源地址https://www.toymoban.com/news/detail-808398.html

到了这里,关于MATLAB——观察吉布斯效应的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【matlab算法原理详解】离散非周期信号频谱分析的MATLAB算法实现

    1 引言 介绍四种不同类型信号的频谱变化规律中的一种,即离散非周期信号。在从理论上掌握其频谱变化规律的基础上,着重讨论如何应用离散傅里叶变换DFT对其频谱进行分析,针对具体实例,通过MATLAB编程采用FFT算法实现对其频谱的计算,并和理论值比较,作了相应的误差

    2023年04月13日
    浏览(41)
  • pid算法的MATLAB仿真 - 用MATLAB进行pid算法仿真实验

    PID算法是工业应用中最广泛算法之一,在闭环系统的控制中,可自动对控制系统进行准确且迅速的校正。PID算法已经有100多年历史,在四轴飞行器,平衡小车、汽车定速巡航、温度控制器等场景均有应用。 PID算法:就是“比例(proportional)、积分(integral)、微分(derivativ

    2024年02月03日
    浏览(48)
  • 遗传算法【matlab实现】(内含matlab基础式注释)

        最近在准备数学建模,凭借微弱的matlab基础学习遗传算法等一系列最优化算法实在是有点吃力。想着帮助自己消化吸收+帮助其他小白同学快速看懂代码,所以写了一篇blog,给出了遗传算法的大致实现思路。但重点是里面傻瓜式的代码注释,详细到了每一个系统函数、m

    2023年04月08日
    浏览(39)
  • MATLAB算法实战应用案例精讲-【智能优化算法】哈里斯鹰(HHO)(附matlab代码实现)

    目录 前言 算法原理 算法思想 1. 探索阶段 2.探索到开发的转换 3

    2024年02月16日
    浏览(47)
  • 【Matlab算法】梯度下降法(Gradient Descent)(附MATLAB完整代码)

    梯度下降法 是一种用于最小化函数的迭代优化算法。其基本思想是通过计算函数的梯度 (导数),找到函数的最小值点。在梯度下降法中,参数(或变量)沿着负梯度的方向进行更新,以降低函数值。 以下是梯度下降法的基本描述: 选择初始点: 选择一个初始点作为优化的起

    2024年01月19日
    浏览(45)
  • matlab智能算法程序包89套最新高清录制!matlab专题系列!

    助力科研旅程! 面对茫茫多的文献,想复现却不知从何做起,我们通过打包成品代码,将过程完善,让您可以拿到一手的复现过程以及资料,从而在此基础上,照葫芦画瓢,开启您的美好科研生涯!代码的套路都是相通的,会一个则通百个!  自己编写+部分网络资源+大神提供

    2024年02月13日
    浏览(37)
  • matlab智能算法之模拟退火算法

    2023年04月29日
    浏览(49)
  • 【Matlab算法】牛顿法(Newton‘s Method)(附MATLAB完整代码)

    牛顿法 (Newton’s Method) 是一种迭代优化算法,用于求解无约束优化问题中的局部最小值。它通过使用目标函数的二阶导数信息来逼近最优解,并在每次迭代中更新当前估计的最优解。以下是关于牛顿法的详细描述: 初始化参数:选择一个初始点 x ( 0 ) x^{(0)} x ( 0 ) 作为优化的起

    2024年01月16日
    浏览(39)
  • 【Matlab系列】基于DCT和置乱算法的视频水印Matlab实现

    Date: 2022.4.5     数字水印技术一般用于版权认证。在实际使用中,嵌入水印的鲁棒性就显得非常重要。通常会采用各种方式进行攻击测试,比如加噪滤波,缩放、旋转、剪切、JPEG压缩等。本文讲述了采用置乱技术进行嵌入水印和提取水印,并加入滤波、剪切、椒盐噪声、

    2024年02月01日
    浏览(48)
  • 智能优化算法——哈里鹰算法(Matlab实现)

    目录 1 算法简介 2 算法数学模型 2.1.全局探索阶段 2.2 过渡阶段 2.3.局部开采阶段 3 求解步骤与程序框图 3.1 步骤 3.2 程序框图  4 matlab代码及结果 4.1 代码 4.2 结果  哈里斯鹰算法(Harris Hawks Optimization,HHO),是由Ali Asghar Heidari和Seyedali Mrjaili于2019年提出的一种新型仿生智能优化算

    2024年02月13日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包