Matlab | 基于二次谱提取地震数据的地震子波

本文通过地震数据二次谱求取地震子波谱,具体方法如下:

MATLAB代码实现如下:

matlab 复制代码
function w = SndSpecExtWavelet(x, M)
% 功能:基于二次谱提取输入地震数据data的地震子波wavelet
%      Extracting Wavelet from Input Seismic Data Based on Second Spectrum
% 输入:
%       x     -  地震信号,Nt×Nz
%       M     -  提取地震子波的长度
% 输出:
%       w     -  提取的地震子波,1×M
% 时间:2023/10/14


[Nt,Nz] = size(x);
FxTwo = zeros(Nt,Nz);
% 多道平均法
for k = 1:Nz
    Fx = abs(fft(x(:,k)));
    FxTwo(:,k) = (fft(Fx));
end
FxTwoAvg = sum(FxTwo,2)/Nz;

cLow = zeros(Nt, 1); %低通滤波器
for i = 1:Nt
    cLow(i) = 0.5*(1+cos(2*pi*(i-1)/Nt));
end
FxTwoLow = FxTwoAvg .* cLow;
FxLow = (ifft(FxTwoLow));
we = real(ifft(FxLow));
wm = zeros(1,M);
wm(ceil(M/2):M) = we(1:ceil(M/2));
wm(1:ceil(M/2)) = we(Nt-floor(M/2):Nt);
p = max(abs(wm));
w = wm./p; % 归一化

end

自己写的代码,如有错误还请联系。创作不易,记得点赞支持哦,谢谢!

相关推荐
茗创科技8 小时前
Nature Mental Health | 基于皮层相似性网络分析,揭示神经性厌食症的神经机制
matlab·数据分析·脑网络
李日华大战鸡红12 小时前
滑膜观测器(学习记录)
stm32·单片机·学习·matlab·机器人
菜鸟~noob23315 小时前
【电子战】第21篇:扩展卡尔曼滤波(EKF)与动态跟踪【含matlab代码】
matlab·电子战
菜鸟~noob2331 天前
【电子战】第三季预告—波武器与电子系统强力毁伤
开发语言·数据库·matlab·电子战
菜鸟~noob2331 天前
【电子战】第20篇:凸优化与对数障碍法【含matlab代码】
开发语言·matlab
Evand J2 天前
【电机滤波例程1】PMSM永磁同步电机转速与位置估计,MATLAB程序:标准无迹卡尔曼滤波、模型说明与仿真验证
算法·matlab·电机·ekf·负载·卡尔曼滤波
Evand J2 天前
【电机滤波例程2】负载转矩增广扩展卡尔曼滤波(EKF)原理与MATLAB例程:五维PMSM状态与负载阶跃估计。订阅专栏后可查看完整代码
开发语言·matlab·电机·ekf·卡尔曼滤波
weixin_307779132 天前
C++代码实现MATLAB中的dlarray函数功能
开发语言·c++·算法·matlab
Evand J2 天前
【MATLAB例程】三维RRT+APF路径规划与AOA-TDOA融合定位算法。附代码的下载链接
算法·matlab·路径规划·rrt·tdoa·apf·aoa
Evand J3 天前
【MATLAB例程】三维RRT+APF避障路径规划与到达角(AOA)定位算法|三维路径优化与定位仿真例程
算法·matlab·路径规划·代码·定位·rrt·aoa