美文网首页
Matlab 如何绘制复杂曲线的包络线

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

作者: 赵禾禾 | 来源:发表于2016-04-08 11:05 被阅读2321次

    [TOC]

    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 必须能将总数据长度整除

    相关文章

      网友评论

          本文标题:Matlab 如何绘制复杂曲线的包络线

          本文链接:https://www.haomeiwen.com/subject/vtsvlttx.html