zoukankan      html  css  js  c++  java
  • Matlab 如何绘制复杂曲线的包络线

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

    http://jingyan.baidu.com/article/aa6a2c14d36c710d4c19c4a8.html

    如果一条曲线(比如声音波形)波动很大,曲折复杂,可以通过绘制包络线的方式使其更加平滑和清晰。本经验帮助刚接触matlab不久的新手完成这一过程。

    工具/原料

    • Matlab 软件

    • 样本数据

    方法/步骤

    1.  

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

      Matlab 如何绘制复杂曲线的包络线
    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 即为包络线的横纵坐标。

      Matlab 如何绘制复杂曲线的包络线
    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

       
  • 相关阅读:
    macOS10.9+xcode6编译ffmpeg2.4.2 for ios
    [think in java]第12章 通过异常处理错误
    机房合作感受
    LeetCode 210. Course Schedule II(拓扑排序-求有向图中是否存在环)
    Java继承
    jQuery学习笔记之DOM操作、事件绑定(2)
    intellij IDEA常见操作
    log4j.properties配置详解
    jQuery学习笔记之概念(1)
    VC常用代码之创建进程
  • 原文地址:https://www.cnblogs.com/gisalameda/p/4904548.html
Copyright © 2011-2022 走看看