matlab求包络线拟合,MATLAB ⼀堆散点如何求包络线
满意答案
处理前后的效果对⽐,图⽰为某声波傅⾥叶变换(fft)后的频谱图。
matlab求傅里叶变换
原数据为横纵坐标为 frequency 和 Amplitude,都是<2048x1 double>的数据,即包含2048个数据点,由
subplot(2,2,1),plot(fr,Am); 绘制⽽成。
包络线的⽣成,需要将原数据分成等宽度的⼩段,每段取⼀个最⾼点所对应的横坐标和纵坐标(如图所⽰)。⽐如设定每⼩段的长度为 d = 4或 8 或 16(或2048的其他约数),然后运⾏
y=reshape(Amplitude,d,2048/d);
y=max(y);
x=linspace(0,max(frequency),2048/d);
所得 x 和 y 即为包络线的横纵坐标。
其中关键的函数为 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
00分享举报