%% 参数设置(完全对齐论文Section IV) fs = 50e6; % 采样频率 50 MHz duration = 100e-6; % 信号持续时间100μs t = 0:1/fs:duration-1/fs; % 时间序列 window_length = 256; % 汉明窗长度 % LFM引信信号参数 U_on = 1; % 发射信号幅度(归一化) f0 = 10e6; % 载频 10 MHz mu = 5e11; % 调频斜率 5e11 Hz/s % 噪声调幅干扰参数 k_AM = 0.8; % 调幅系数(0 < k_AM ≤ 1) noise_bw = 100e3; % 噪声带宽 100 kHz % STFT参数 noverlap = 128; nfft = 256; %% 生成完整数据集(JSR从-10dB到10dB,步长2dB,每个JSR 500样本) JSR_values = -10:2:10; num_samples_per_JSR = 500; % 初始化存储表 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_NAM_sample(JSR, k_AM, noise_bw); newRow = array2table([features, label], 'VariableNames', csvTable.Properties.VariableNames); csvTable = [csvTable; newRow]; end end %% 保存数据到指定路径 save_path = 'E:\data1\NAM_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_NAM_sample(JSR, k_AM, noise_bw) % 参数定义 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; % 生成基带噪声(带限高斯白噪声) noise = bandlimited_noise(length(t), fs, noise_bw); % 确保调制后幅度非负 noise = noise / max(abs(noise)) * k_AM; % 归一化并控制调制深度 % 生成NAM干扰信号 j = A_j * (1 + noise) .* cos(2*pi*f0*t); % 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); row_start = max(1, floor(rows/2 - 32) + 1); row_end = min(rows, row_start + 63); col_start = max(1, floor(cols/2 - 32) + 1); col_end = min(cols, col_start + 63); % 裁剪并填充 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 = 4; % 标签设为4表示噪声调幅干扰 end %% 辅助函数:生成带限高斯白噪声(与NFM版本相同) function noise = bandlimited_noise(N, fs, bw) % N: 采样点数 % fs: 采样率 % bw: 噪声带宽 % 生成白噪声 white_noise = randn(1, N); % 设计低通滤波器 cutoff = bw/(fs/2); [b,a] = butter(6, cutoff, 'low'); % 滤波得到带限噪声 noise = filter(b, a, white_noise); % 归一化保持功率不变 noise = noise / std(noise); end