# 信道传递函数 **Repository Path**: open-ocean/channel-transfer-function ## Basic Information - **Project Name**: 信道传递函数 - **Description**: 通过ram、bellhop、kraken构造系统信道传递函数的代码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-18 - **Last Updated**: 2026-05-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Channel Transfer Function 这个仓库用于计算海洋声信道的频域/时域响应,并进一步得到给定发射脉冲经过信道后的接收信号。当前包含三类常用水声传播模型: - **KRAKEN**:简正波模型,适合分层海洋环境下的低频传播计算。 - **BELLHOP**:射线模型,适合多途到达、射线/声线传播相关仿真。 - **RAM**:抛物方程模型,适合距离相关或中低频传播计算。 仓库中的示例环境主要使用 Pekeris 波导配置,脚本会在多个频率点上调用对应模型,读取声场结果,再通过 IFFT 和卷积得到时域信道响应和接收信号。 ## 结果展示 kraken幅频相应曲线 ![alt text](DATA/FIG/OK传递函数频谱.svg) kraken 信道函数 ![alt text](DATA/FIG/OK传递函数.svg) kraken接收信号 ![alt text](DATA/FIG/OK时域接收信号.svg) ## 目录结构 ```text . ├── BELLHOP/ # BELLHOP 射线模型示例、环境文件和读取工具 ├── KRAKEN/ # KRAKEN 简正波模型示例、环境文件和读取工具 ├── RAM/ # RAM 抛物方程模型示例、输入文件和读取工具 ├── KR_TL_COMPARE/ # KRAKEN 与 RAM 的传播损失对比脚本 ├── SIGNAL/ # 发射信号及频谱绘图脚本 └── DATA/ # 仿真结果输出目录 ``` ## 运行环境 建议使用 Windows + MATLAB。仓库中已包含示例所需的模型可执行文件: - `BELLHOP/bellhop.exe` - `KRAKEN/kraken.exe` - `KRAKEN/field.exe` - `RAM/for_ram.exe` 部分脚本使用 `parfor`,如果没有 Parallel Computing Toolbox,可以把 `parfor` 改为普通 `for` 后运行。 ## 快速开始 在 MATLAB 中打开仓库根目录,然后进入对应模型目录运行主脚本。 ### 1. BELLHOP:射线模型 ```matlab cd BELLHOP main_bellhop ``` 主要输入文件: - `pekerisB.env`:BELLHOP 环境文件 - `main_bellhop.m`:主入口,逐频计算声场并生成时域输出 - `main_bellhop_fft.m`:使用频域相乘方式计算输出信号的版本 输出: - 图窗:发射脉冲、接收信号 - `../DATA/OB.mat`:BELLHOP 输出信号数据 ### 2. KRAKEN:简正波模型 ```matlab cd KRAKEN main_kraken ``` 主要输入文件: - `pekerisK.env`:KRAKEN 环境文件 - `pekerisK.flp`:场计算配置文件 - `main_kraken.m`:主入口 - `SystemF.m`:逐频计算系统函数/信道响应 - `output.m`:计算发射信号经过信道后的输出 输出: - 图窗:频域响应、时域信道响应、接收信号 - `../DATA/OK.mat`:KRAKEN 输出信号及相关参数 ### 3. RAM:抛物方程模型 ```matlab cd RAM main_ram ``` 主要输入文件: - `pekerisR.in`:RAM 输入文件 - `main_ram.m`:主入口 - `SystemF.m`:逐频计算系统函数/信道响应 - `output.m`:计算发射信号经过信道后的输出 输出: - 图窗:频域响应、时域信道响应、接收信号 - `../DATA/OR.mat`:RAM 输出信号数据 ### 4. KRAKEN 与 RAM 传播损失对比 ```matlab cd KR_TL_COMPARE COM_KR_TL ``` 该脚本在指定频率下分别调用 RAM 和 KRAKEN,并绘制传播损失对比图。 ### 5. 发射信号与频谱 ```matlab cd SIGNAL plt_sig_spe ``` 该脚本生成示例发射脉冲及其频谱图。 ## 常用参数 主要参数通常在各个 `main_*.m` 中修改: - `fs`:采样频率,单位 Hz - `T`:接收时间窗,单位 s - `rr`:接收距离,单位 km - `fmin` / `fmax`:频率计算范围,单位 Hz - `tmin`:时域响应起始时间,通常由传播距离和声速估计 - `M`:接收阵元数,需要与环境文件中的接收深度数量匹配 - `SL`:声源级,单位 dB 环境参数则在对应模型的输入文件中修改: - BELLHOP:`BELLHOP/pekerisB.env` - KRAKEN:`KRAKEN/pekerisK.env`、`KRAKEN/pekerisK.flp` - RAM:`RAM/pekerisR.in` 脚本中的 `changeenv.m`、`changeenv_out.m`、`changein.m` 会自动为不同频率修改或生成输入文件。 ## 注意事项 - 建议从对应模型目录运行脚本,例如先 `cd BELLHOP` 再运行 `main_bellhop`,否则相对路径和模型可执行文件可能找不到。 - BELLHOP 示例中要求接收距离个数为 1,接收阵元数 `M` 需要与环境文件中的接收深度数量一致。 - RAM 示例中的 `rr` 单位是 km,读取网格时会转换为 m。 - 多频点计算会生成若干临时 `.env`、`.in`、`.shd`、`.grid` 等文件,可按需要清理。 - 如果 MATLAB 找不到模型调用函数或绘图函数,请确认当前目录和 `addpath` 是否包含对应模型目录。 ## 典型工作流 1. 选择模型目录:`BELLHOP`、`KRAKEN` 或 `RAM`。 2. 修改环境文件中的声速剖面、海深、海底参数、声源/接收器位置。 3. 在 `main_*.m` 中设置频带、采样率、接收时间窗和声源级。 4. 运行主脚本,得到频域声场、时域信道响应和接收信号。 5. 在 `DATA/` 中读取 `.mat` 文件,继续做信号处理或模型对比。