%% 参数设置(完全对齐论文Section IV) fs = 50e6; % 采样频率 50 MHz duration = 100e-6; % 修改:延长信号持续时间至100μs t = 0:1/fs:duration-1/fs; % 时间序列 window_length = 256; % 汉明窗长度 % LFM引信信号参数(公式(1)) U_on = 1; % 发射信号幅度(归一化) f0 = 10e6; % 载频 10 MHz mu = 5e11; % 调频斜率 5e11 Hz/s % 线性调频干扰参数(修改部分) mu_j = 1e12; % 干扰信号的调频斜率 1e12 Hz/s (可以调整) % STFT参数(生成足够大的时频图) noverlap = 128; % 修改:减少重叠点数以提高时间分辨率 nfft = 256; % FFT点数 %% 生成完整数据集(JSR从-10dB到10dB,步长2dB,每个JSR 500样本) JSR_values = -10:2:10; % JSR从-10dB到10dB,步长2dB num_samples_per_JSR = 500; % 每个JSR值的样本数量 % 初始化存储表 csvTable = array2table(zeros(0, 64*64*3 + 1),... 'VariableNames', [strcat('F', string(1:64*64*3)), "Label"]); % 批量生成样本 for jsr_idx = 1:length(JSR_values) JSR = JSR_values(jsr_idx); fprintf('正在生成JSR=%ddB的样本...\n', JSR); for k = 1:num_samples_per_JSR [features, label] = generate_LFM_sample(JSR, mu_j); newRow = array2table([features, label], 'VariableNames', csvTable.Properties.VariableNames); csvTable = [csvTable; newRow]; end end %% 保存数据到指定路径 save_path = 'E:\data1\LFM_Dataset.csv'; % 修改文件名以区分干扰类型 % 检查并创建文件夹 if ~exist('E:\data1', 'dir') mkdir('E:\data1'); end % 写入CSV文件 writetable(csvTable, save_path); disp(['数据集已保存至:', save_path]); disp(['总样本数量:', num2str(height(csvTable))]); %% 函数定义(生成单个样本 - 线性调频干扰版本) function [features, label] = generate_LFM_sample(JSR, mu_j) % 独立参数定义 fs = 50e6; duration = 100e-6; % 与主脚本一致 t = 0:1/fs:duration-1/fs; U_on = 1; f0 = 10e6; mu = 5e11; window_length = 256; noverlap = 128; % 减少重叠点数 nfft = 256; % 1. 生成LFM发射信号 u_on = U_on * cos(2*pi*f0*t + pi*mu*t.^2); % 2. 生成回波信号 c = 3e8; tau = 2*15/c; % 目标距离15m U_e = 0.7; u_e = U_e * cos(2*pi*f0*(t - tau) + pi*mu*(t - tau).^2); % 3. 生成线性调频干扰(关键修改点) A_j = sqrt(10^(JSR/10)) * U_e; j = A_j * cos(2*pi*f0*t + pi*mu_j*t.^2); % 线性调频干扰 % 4. 添加噪声 noisePower = (U_e^2/2) / 10^(JSR/10); n = sqrt(noisePower) * randn(size(t)); % 5. 合成接收信号 u = u_e + j + n; % 6. STFT时频分析 window = hamming(window_length); [S, ~, ~] = spectrogram(u, window, noverlap, nfft, fs, 'yaxis'); S_mag = abs(S); % 7. 动态调整裁剪区域(确保索引有效) [rows, cols] = size(S_mag); % 行裁剪(确保64行) row_start = max(1, floor(rows/2 - 32) + 1); row_end = min(rows, row_start + 63); actual_rows = row_end - row_start + 1; if actual_rows < 64 row_start = 1; row_end = min(64, rows); end % 列裁剪(确保64列) col_start = max(1, floor(cols/2 - 32) + 1); col_end = min(cols, col_start + 63); actual_cols = col_end - col_start + 1; if actual_cols < 64 col_start = 1; col_end = min(64, cols); end % 裁剪并填充(不足部分补零) S_cropped = zeros(64, 64); S_temp = S_mag(row_start:row_end, col_start:col_end); S_cropped(1:size(S_temp,1), 1:size(S_temp,2)) = S_temp; % 8. 生成3通道 S_rgb = cat(3, S_cropped, S_cropped, S_cropped); % 9. 转换为特征向量和标签 features = double(reshape(S_rgb, 1, [])); label = 5; % 修改标签为5,表示第三种干扰类型(线性调频干扰) end