MATLAB的地震模型构建和地震数据去噪

MATLAB的地震模型构建和地震数据去噪。这个代码包括了生成地震模型、添加噪声以及使用f-x域去噪技术进行去噪的步骤。

1. 生成地震模型

function [t, seismic_signal] = generate_seismic_model(fs, T, Fc)
    % 生成地震模型
    % 输入:
    %   fs - 采样频率
    %   T - 信号持续时间
    %   Fc - 载波频率
    % 输出:
    %   t - 时间向量
    %   seismic_signal - 生成的地震信号

    % 时间向量
    t = 0:1/fs:T-1/fs;

    % 生成地震信号(例如:Ricker波子)
    seismic_signal = (1 - 2 * (pi * Fc * t).^2) .* exp(-(pi * Fc * t).^2);
end

2. 添加噪声

function noisy_signal = add_noise(signal, snr)
    % 添加噪声
    % 输入:
    %   signal - 原始信号
    %   snr - 信噪比(dB)
    % 输出:
    %   noisy_signal - 添加噪声后的信号

    % 计算信号功率
    signal_power = sum(abs(signal).^2) / length(signal);

    % 计算噪声功率
    noise_power = signal_power / 10^(snr / 10);

    % 生成高斯噪声
    noise = sqrt(noise_power) * (randn(size(signal)) + 1j * randn(size(signal)));

    % 添加噪声
    noisy_signal = signal + noise;
end

3. f-x域去噪

function denoised_signal = fx_denoising(noisy_signal, fs)
    % f-x域去噪
    % 输入:
    %   noisy_signal - 添加噪声后的信号
    %   fs - 采样频率
    % 输出:
    %   denoised_signal - 去噪后的信号

    % FFT
    N = length(noisy_signal);
    f = (-fs/2:fs/N:fs/2-fs/N);
    noisy_signal_fft = fftshift(fft(noisy_signal));

    % 预测算子(简化为低通滤波器)
    cutoff_frequency = 0.5 * fs; % 截止频率
    filter = abs(f) < cutoff_frequency;

    % 应用滤波器
    filtered_signal_fft = noisy_signal_fft .* filter;

    % IFFT
    denoised_signal = ifft(ifftshift(filtered_signal_fft));
end

4. 主函数

function seismic_denoising_simulation()
    % 地震信号去噪模拟主函数

    % 参数
    fs = 1000; % 采样频率 (Hz)
    T = 1; % 信号持续时间 (s)
    Fc = 50; % 载波频率 (Hz)
    snr = 20; % 信噪比 (dB)

    % 生成地震模型
    [t, seismic_signal] = generate_seismic_model(fs, T, Fc);

    % 添加噪声
    noisy_signal = add_noise(seismic_signal, snr);

    % f-x域去噪
    denoised_signal = fx_denoising(noisy_signal, fs);

    % 绘制结果
    figure;
    subplot(3, 1, 1);
    plot(t, real(seismic_signal));
    title('原始地震信号');
    xlabel('时间 (s)');
    ylabel('幅度');

    subplot(3, 1, 2);
    plot(t, real(noisy_signal));
    title('添加噪声后的地震信号');
    xlabel('时间 (s)');
    ylabel('幅度');

    subplot(3, 1, 3);
    plot(t, real(denoised_signal));
    title('去噪后的地震信号');
    xlabel('时间 (s)');
    ylabel('幅度');
end

说明

  1. 生成地震模型:使用Ricker波子生成地震信号。
  2. 添加噪声:在地震信号中添加高斯噪声,信噪比由用户指定。
  3. f-x域去噪:使用f-x域预测去噪技术去除噪声。这里简化为低通滤波器。
  4. 主函数:生成地震信号,添加噪声,进行去噪,并绘制结果。

代码仿真参考 几种地震模型的构建 www.youwenfan.com/contentcnd/97848.html

运行

运行seismic_denoising_simulation()函数即可开始地震信号去噪模拟。你可以根据具体需求调整采样频率、信号持续时间、载波频率和信噪比等参数。

希望这个代码示例能帮助你更好地理解和实现地震信号的去噪处理。

posted @ 2025-08-18 16:30  躲雨小伙  阅读(19)  评论(0)    收藏  举报