Matlab 如何绘制复杂曲线的包络线

[TOC]

最近发现在origin里有直接画包络线的选项,这个更方便

1.处理前后的效果对比,图示为某声波傅里叶变换(fft)后的频谱图。


声波傅立叶变换

2.原数据为横纵坐标为 frequency 和 Amplitude,都是<2048x1 double>的数据,即包含2048个数据点,由 subplot(2,2,1),plot(fr,Am); 绘制而成。
3.包络线的生成,需要将原数据分成等宽度的小段,每段取一个最高点所对应的横坐标和纵坐标(如图所示)。比如设定每小段的长度为 d = 4 或 8 或 16(或2048的其他约数),然后运行

y=reshape(Amplitude,d,2048/d);

y=max(y);

x=linspace(0,max(frequency),2048/d);

所得 x 和 y 即为包络线的横纵坐标。


包络图

4.关键函数
其中关键的函数为 reshape() 和 linspace()。

reshape() 函数重新调整矩阵的行数、列数、维数。reshape(X,m,n) 可以把矩阵 X 调整为 m 行 n 列的矩阵,比如:

>> reshape([1 2 3 4 5 6],2,3)

ans =

     1     3     5

     2     4     6

linspace() 用于生产线性矢量。 linspace(a,b,n) 可以生产从 a 到 b 之间共 n 个元素组成的一维数组。比如:

>> linspace(1,5,4)

ans =

    1.0000    2.3333    3.6667    5.0000

注意

分组宽度 d 必须能将总数据长度整除

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 普通 t1 : t2 : t3;从t1到t3,间隔取t2 linspace(始,终,元素个数); = [];...
    Wh_Fanatic阅读 3,624评论 0 4
  • 显示中文帮助的方法 预设→常规→帮助→在mathworks.com网站上(需要Internet连接)→语言(简体中...
    VeyronC阅读 7,188评论 0 34
  • 先决条件 在阅读这个教程之前,你多少需要知道点python。如果你想从新回忆下,请看看Python Tutoria...
    舒map阅读 7,382评论 1 13
  • 一前言 特征值 奇异值 二奇异值计算 三PCA 1)数据的向量表示及降维问题 2)向量的表示及基变换 3)基向量 ...
    Arya鑫阅读 13,651评论 2 43
  • thiele插值算法 1点插值算法 function [C,c]=thiele(X,Y,Z)%X为插值点横坐标,Y...
    00crazy00阅读 6,228评论 0 4