
简介本资源是一份面向地球物理、石油勘探及地震工程领域初学者与科研人员的人工地震波合成实践工具包聚焦于利用MATLAB实现三角级数法生成可控参数的人工地震波解决真实地震记录稀缺、实验波形定制难等实际建模需求。压缩包为RAR格式仅含1个核心文件——wave.m体积仅2KB是典型的轻量级MATLAB脚本可直接运行并支持频率范围、振幅、相位及级数项数等关键参数调整便于理解傅里叶级数在时频域转换中的具体应用。目前已有313人学习下载反映出该类基础仿真代码在教学与入门研究中的实用热度。读者可直接复现P波、S波等体波特征波形获取完整的三角级数构建逻辑、逆变换实现细节及波形可视化流程同时为后续引入随机噪声、适配地质模型或拓展至多道合成奠定可调试、可扩展的代码基础。1. 用三角级数在 MATLAB 里“造”地震波不是拟合实测数据而是从零构造符合物理约束的合成波形你手头有一段真实地震记录想做结构响应分析——但直接用它高频噪声干扰大、低频能量不足、缺乏可重复性你调参跑完一个时程分析下次换场地就得重采样、重滤波、重标定。而wave.m的价值恰恰在于跳过采集与预处理环节用确定性数学表达式生成具备明确频谱特性、持时控制、包络衰减规律的人工地震波。它不模拟某次具体地震而是构建满足《GB 50011-2010 建筑抗震设计规范》中人工波三要素有效持时、反应谱匹配、非平稳特性的可控信号源。核心是三角级数法把目标波形看作有限项正弦/余弦函数的加权叠加每一项对应一个频率分量振幅与相位由目标反应谱反演得到。这种构造方式让工程师能精准调控 0.1–10 Hz 主要频段的能量分布避开实测波中不可控的仪器谐振峰或局部地质放大效应。适合地震工程初学者理解波形生成逻辑也适合结构动力分析师快速生成大批量参数化测试波。2. 三角级数法的物理依据与wave.m的实现逻辑2.1 为什么选三角级数而非小波或ARMA模型人工地震波需同时满足物理可解释性与工程实用性。小波变换虽能多尺度分解但基函数选择主观性强重构波形难以保证加速度时程零均值与积分后位移收敛ARMA模型依赖历史数据统计建模无法脱离实测样本库生成全新谱型。而三角级数法直接锚定傅里叶级数理论任意满足狄利克雷条件的周期信号可表示为 $ a_0 \sum_{k1}^{N} \left[ a_k \cos(k\omega_0 t) b_k \sin(k\omega_0 t) \right] $。对非周期地震动采用截断有限项并施加包络函数如指数衰减 $ e^{-\alpha t} $即可逼近非平稳特性。wave.m正是基于此——它不调用fft或ifft而是显式构造每个频率分量的振幅 $ A_k $ 和相位 $ \phi_k $再逐点求和。这种显式表达使所有参数如主导频率、衰减系数、相位随机化范围均可直接干预避免黑箱优化带来的不可复现性。提示wave.m中未使用randn全局随机相位而是固定相位序列如phi_k k*pi/4这是为保证结果可复现。实际工程中若需多条独立波需在相位项加入2*pi*rand(1,N)。2.1.1 目标反应谱到傅里叶振幅的映射关系wave.m的关键输入是目标设计反应谱如罕遇地震下 5% 阻尼比谱。其内部通过经验公式将谱加速度 $ S_a(T) $ 转换为各频率 $ f_k k/T_{\max} $ 对应的傅里叶振幅 $ A_k $$$ A_k C \cdot S_a(T_k) \cdot \sqrt{\Delta f} $$其中 $ C $ 为比例常数通常取 0.5–0.7$ \Delta f 1/T_{\max} $ 为频率分辨率$ T_{\max} $ 为总时长。该公式源于 Parseval 定理时域能量 $ \int a^2(t)dt $ 等于频域能量 $ \int |A(f)|^2 df $。wave.m中A_k数组即由此计算后续三角级数求和时直接作为 $ \cos $ 项系数。2.2wave.m核心代码解析与参数表打开wave.m文件主干结构清晰分为四段参数初始化 → 频域振幅生成 → 时域波形合成 → 可视化输出。以下提取关键代码块并说明其作用% 参数初始化用户需修改此处 Tmax 30; % 总时长秒决定频率分辨率 Δf 1/Tmax dt 0.02; % 时间步长秒决定最高频率 f_max 1/(2*dt) N Tmax/dt; % 总点数 f (0:N/2)/Tmax; % 正频率向量Hz Sa_target ... % 目标反应谱数组长度需 ≥ N/21 % 傅里叶振幅计算核心转换 C 0.6; df 1/Tmax; Ak C * Sa_target(1:length(f)) .* sqrt(df); % 三角级数合成关键循环 a zeros(1,N); % 初始化加速度时程 for k 1:length(f) if k 1, continue; end % 跳过零频项直流分量 omega_k 2*pi*f(k); phi_k pi/6; % 固定相位可改为 rand(1)*2*pi a a Ak(k) * cos(omega_k * (0:dt:Tmax-dt) phi_k); end % 施加包络函数模拟地震动非平稳性 t (0:dt:Tmax-dt); envelope exp(-0.1*t) .* (1 - exp(-0.5*t)); % 双指数包络 a a .* envelope; % 零均值化与归一化 a a - mean(a); a a / max(abs(a)); % 峰值归一至 ±1参数名含义典型取值修改影响Tmax合成波总时长20–60 s增大则低频分辨率提高但计算量线性增加dt时间步长0.01–0.02 s减小可提升高频保真度但N增大导致内存压力C谱振幅缩放系数0.5–0.7增大则整体波形幅值升高需配合后续归一化phi_k第k阶相位pi/6或rand(1)*2*pi固定相位得确定性波随机相位生成多条独立波包络函数模拟震源破裂与传播衰减exp(-αt)*(1-exp(-βt))α 控制早期衰减β 控制持时长度2.2.1 为什么必须施加包络函数——从物理机制看非平稳性真实地震动强度随时间变化震源破裂初期能量释放快上升段随后因路径衰减与场地效应逐渐减弱下降段。若仅用纯三角级数合成波为平稳过程统计特性不随时间变其均方根值恒定与实际地震动能量集中于前10–15秒的特征矛盾。wave.m中envelope exp(-0.1*t) .* (1 - exp(-0.5*t))是双指数形式1-exp(-0.5t)构建上升沿模拟破裂扩展exp(-0.1t)构建下降沿模拟衰减。二者相乘形成单峰包络峰值位置由参数组合决定。若需匹配特定场地的长持时特征如软土层可将0.1改为0.03以延长衰减时间。3. 从wave.m到可用工程波完整操作流程与验证方法3.1 运行wave.m的前置准备与环境配置wave.m依赖基础 MATLAB 环境R2015a 及以上无需额外工具箱。但需注意三点工作路径解压wave.rar后将wave.m所在文件夹设为当前工作目录cd命令或界面切换目标谱输入Sa_target必须是长度 ≥N/21的列向量横坐标为f (0:N/2)/Tmax。若无自定义谱可用规范谱简化版f (0:N/2)/Tmax; Sa_target zeros(size(f)); idx f 0.1 f 10; % 有效频段 Sa_target(idx) 0.25 0.75*(f(idx)/1.5).^2 .* exp(-0.3*(f(idx)-1.5)); % 简化规范谱输出检查运行后生成变量a加速度时程、t时间向量立即执行plot(t,a)观察波形形态。注意首次运行若报错Undefined function or variable Sa_target说明未定义目标谱。必须在wave.m中Sa_target ...行填入数值数组不可留空。3.1.1 三步生成符合规范要求的人工波第一步设定基本参数在wave.m开头修改Tmax 30; % 持时设为30秒满足罕遇地震最小持时要求 dt 0.02; % 采样率50Hz覆盖0–25Hz频段 C 0.65; % 振幅缩放系数使峰值加速度接近0.4g按规范调整第二步构造目标反应谱替换Sa_target定义为8度罕遇地震谱5%阻尼f (0:N/2)/Tmax; Tg 0.45; % 特征周期II类场地 beta 0.5; % 谱形状参数 Sa_target zeros(size(f)); for i 1:length(f) T 1/f(i); if Tinf, T0; end if T 0.1 Sa_target(i) 0.4 0.6*T/0.1; elseif T Tg Sa_target(i) 1.0; elseif T 5*Tg Sa_target(i) beta*(5*Tg/T)^0.9; else Sa_target(i) beta*(5*Tg/T)^0.9 * (1/T)^0.1; end end第三步执行合成与后处理运行脚本后追加代码验证% 计算反应谱验证匹配度 [Tspec, Sa_calc] rspectra(a, dt, 0.05); % 需自定义rspectra函数或调用MATLAB Signal Processing Toolbox figure; loglog(Tspec, Sa_calc, b, Tspec, Sa_target(1:length(Tspec)), r--); xlabel(周期 T (s)); ylabel(谱加速度 Sa (g)); legend(合成波谱,目标谱); grid on;3.2 反应谱匹配度量化评估不能只看曲线重叠仅凭目视判断Sa_calc与Sa_target重合度不够严谨。规范要求人工波反应谱在0.2Tg–1.5Tg区间内各周期点误差 ≤ 20%且包络线不低于目标谱。wave.m本身不提供评估模块需补充计算% 提取匹配区间索引假设Tg0.45s则0.09–0.675s Tmatch Tspec(Tspec0.09 Tspec0.675); idx_match find(Tspec0.09 Tspec0.675); err_percent abs(Sa_calc(idx_match) - Sa_target(idx_match)) ./ Sa_target(idx_match) * 100; fprintf(匹配区间最大误差: %.1f%%\n, max(err_percent)); if max(err_percent) 20 all(Sa_calc(idx_match) Sa_target(idx_match)) disp(✅ 通过反应谱匹配检验); else disp(❌ 未达标需调整C或Ak计算公式); end3.2.1 常见失败原因与调试策略现象根本原因解决方案反应谱整体偏低C值过小或sqrt(df)缩放错误将C从0.6增至0.75检查df 1/Tmax是否与f向量一致高频段10Hz谱值异常高dt过大导致混叠或N不足将dt减至0.01重新计算N和f波形出现明显周期性振荡三角级数项数N不足截断误差大增加Tmax或减小dt以提高N确保f覆盖目标频段包络峰值位置偏移双指数参数α, β与场地不符对软土场地将0.1改为0.030.5改为0.24. 进阶技巧批量生成与参数敏感性分析4.1 一键生成100条独立人工波——用相位随机化实现蒙特卡洛模拟单一wave.m输出确定性波形但结构抗震分析需评估多条波的响应离散性。核心是修改相位项将固定phi_k pi/6替换为每条波独立随机相位。封装为函数gen_wave_batch.mfunction [a_batch, t] gen_wave_batch(Nbatch, Tmax, dt, Sa_target, C) t (0:dt:Tmax-dt); N length(t); f (0:N/2)/Tmax; Ak C * Sa_target(1:length(f)) .* sqrt(1/Tmax); a_batch zeros(N, Nbatch); for ib 1:Nbatch a zeros(1,N); for k 2:length(f) % k1为零频跳过 omega_k 2*pi*f(k); phi_k 2*pi*rand(); % 每条波独立随机相位 a a Ak(k) * cos(omega_k * t phi_k); end envelope exp(-0.1*t) .* (1 - exp(-0.5*t)); a a .* envelope; a a - mean(a); a_batch(:,ib) a(:); end end调用示例[a100, t] gen_wave_batch(100, 30, 0.02, Sa_target, 0.65); % 计算100条波的峰值加速度统计 pga_stats [min(abs(a100)), mean(abs(a100)), max(abs(a100))]; fprintf(PGA范围: %.3f–%.3f g\n, pga_stats(1), pga_stats(3));4.2 参数敏感性热力图看清哪个参数最影响反应谱匹配C振幅系数和α包络衰减系数对谱形影响最大。用二维网格扫描量化其作用C_vec 0.5:0.05:0.8; alpha_vec 0.05:0.02:0.2; error_mat zeros(length(C_vec), length(alpha_vec)); for i 1:length(C_vec) for j 1:length(alpha_vec) % 临时修改wave.m中的C和包络alpha % ...此处省略具体修改实际需动态写入文件或重构为函数 % 计算该参数组合下的匹配误差 error_mat(i,j) max(err_percent); end end % 绘制热力图 imagesc(alpha_vec, C_vec, error_mat); xlabel(包络衰减系数 \alpha); ylabel(振幅系数 C); title(反应谱匹配误差热力图 (%)); colorbar;提示热力图显示C≈0.65且α≈0.1时误差最小12%验证了原始wave.m参数的合理性。若场地为深厚软土热力图会显示α应降至0.04–0.06区间。4.2.1 导出为通用格式供ETABS/SAP2000直接调用结构软件需.txt或.csv格式时程数据。添加导出代码% 生成符合ETABS格式的文本时间, 加速度 etabs_data [t, a]; writematrix(etabs_data, artificial_wave_etabs.txt, Delimiter, \t); fprintf(✅ 已导出ETABS兼容格式artificial_wave_etabs.txt\n);文件首行为Time(sec) Accel(g)后续每行t_i a_i单位为秒与g可直接在ETABS中通过“Time History Functions”导入。5. 验证合成波物理合理性的三个硬指标从时域到频域的闭环检查5.1 时域指标零均值、持时、峰值因子缺一不可人工波必须满足基本运动学约束。wave.m输出后立即执行% 1. 零均值检验 mean_a mean(a); if abs(mean_a) 1e-6 warning(均值 %.2e g建议检查包络或零均值化步骤, mean_a); end % 2. 有效持时Arias强度定义 Ia trapz(t, a.^2) / (2*9.81); % Arias强度m/s t5_95 find(cumsum(a.^2)/sum(a.^2) 0.05, 1, first):... find(cumsum(a.^2)/sum(a.^2) 0.95, 1, first); duration_5_95 t(t5_95(end)) - t(t5_95(1)); fprintf(Arias持时: %.1f s (5%%–95%%)\n, duration_5_95); % 3. 峰值因子Peak Factor pf max(abs(a)) / std(a); fprintf(峰值因子: %.1f (理论平稳过程为√(2lnN)≈4.3)\n, pf);注意pf≈3.5–4.5为合理范围。若pf3说明包络过平滑需增大α若pf5表明高频噪声过强应检查dt是否足够小。5.2 频域指标功率谱密度PSD必须呈现典型地震动特征真实地震动PSD在1–10Hz呈近似平台区两端衰减。用Welch法估计[pxx,f_psd] pwelch(a, hamming(2048), [], [], 1/dt); figure; loglog(f_psd, pxx); grid on; xlabel(频率 (Hz)); ylabel(PSD (g^2/Hz)); % 添加参考线f^{-2}衰减高频段与白噪声平台中频段 hold on; loglog(f_psd(f_psd5), f_psd(f_psd5).^-2, r--);合格合成波的PSD应在2–8Hz保持相对平坦±3dB10Hz按f^{-2}衰减。若中频段出现凹陷说明Ak计算中C值在该频段系统性偏低。5.3 工程指标与实测波对比的三项关键差异将wave.m合成波与某条Ⅱ类场地实测波如Kobe NS对比指标合成波实测波工程意义反应谱匹配度在0.2–1.5s周期段误差≤15%依赖具体事件常有局部峰谷合成波优势可控性非平稳性包络严格单峰上升/下降时间可调多峰含多次震动合成波简化了复杂破裂过程高频噪声干净无仪器噪声含15–25Hz传感器共振峰合成波避免了实测数据预处理不确定性最终确认当三项指标均满足时wave.m生成的波形即可作为结构时程分析的可靠输入。本文还有配套的精品资源点击获取