多信号实采数据加噪版本
一、加噪多信号实采数据
多信号实采数据产生:
多雷达信号硬件模拟】 3台USRP+1台VSG信号发生器模拟多雷达信号,1台USRP产生高斯噪声模拟更多信道环境,1台USRP采集信号
加噪程序:
%zhouzhichao
%25年7月28日
%生成加噪的高斯测试数据集clear
clc
close allsamp_rate = 250e3; % 采样率 250 kHz
% snr = 6;
for snr = [4,2,0,-2,-4]for sig_size = ["narrow","middle","wide"]% sig_size = "narrow";signal_duration = 10; % 每个信号的时长 1秒fre_list = ["fc_1.5GHz","fc_2.0GHz","fc_2.5GHz","fc_3.0GHz","fc_3.5GHz","fc_4.0GHz","fc_4.5GHz","fc_5.0GHz"];for fre = fre_list% 定义文件路径% file_path = 'D:\实验室\论文\论文-多信号参数估计\JCR3\Experiment\USRP\fs_250.0kHz_duration_100s\'+sig_size+'\fc_1.5GHz.txt';file_path = 'D:\实验室\论文\论文-多信号参数估计\JCR3\Experiment\USRP\fs_250.0kHz_duration_100s\'+sig_size+'\'+fre+'.txt';% 打开文件fid = fopen(file_path, 'r');% 读取文件内容% 每个复数数据由两个 float32 组成 (4字节),所以我们需要按 float32 类型读取data = fread(fid, 'float32');% 关闭文件fclose(fid);% 将读取的单精度数据分成实部和虚部real_part = data(1:2:end); % 取奇数位置的数据作为实部imag_part = data(2:2:end); % 取偶数位置的数据作为虚部% 合并为复数数据complex_data = real_part + 1i * imag_part;% 计算信号的功率signal_power = mean(abs(complex_data).^2);% 计算噪声功率noise_power = signal_power / (10^(snr / 10));% 生成高斯噪声noise = sqrt(noise_power / 2) * (randn(size(complex_data)) + 1i * randn(size(complex_data)));% 将噪声添加到信号中noisy_complex_data = complex_data + noise;% 计算每秒的采样点数samples_per_signal = samp_rate * signal_duration;% 计算总的信号数量(去除最后一段不足1秒的部分)num_signals = floor(length(complex_data) / samples_per_signal);% 拆分为多个信号signals = reshape(complex_data(1:num_signals * samples_per_signal), samples_per_signal, num_signals);% 生成时频图% 短时傅里叶变换参数window = hamming(256); % 选择窗口大小noverlap = 128; % 设置窗口重叠nfft = 512; % 设置FFT点数% 创建保存路径output_path = "D:\实验室\论文\论文-多信号参数估计\JCR3\Experiment\USRP\fs_250.0kHz_duration_10s_img\real_multisignals_dataset\Gauss\"+num2str(snr);% 对每个信号进行时频图绘制并保存for i = 1:num_signals[S, F, T] = spectrogram(signals(:, i), window, noverlap, nfft, samp_rate, 'yaxis');F = F / 1e3; % 将频率单位从Hz转为kHzF = F - 125; % 频率偏移调整% 绘制时频图imagesc(T, F, log(abs(S)));axis off;% 保存时频图为图片save_path = output_path + '\'+sig_size+ '_' + fre +'_'+ num2str(i)+ '.jpg';exportgraphics(gcf, save_path, 'BackgroundColor', 'none', 'ContentType', 'image');endendend
end
原始采集:
信噪比设为6dB:
信噪比设为0dB:
二、多信号实采数据展示
展示程序:
clc
clear
close all% 打开文件
% fid = fopen('real_data_show.txt', 'rb'); % 'rb'表示以二进制读取模式打开文件
fid = fopen('D:\实验室\论文\论文-多信号参数估计\JCR3\Experiment\USRP\fs_250.0kHz_duration_100s\wide\fc_2.5GHz.txt', 'rb'); % 'rb'表示以二进制读取模式打开文件% 读取数据
raw = fread(fid, Inf, 'float32', 0, 'l'); % 假设数据是16位整数,'b'表示小端% 关闭文件
fclose(fid);data = raw(1:2:end) + 1i * raw(2:2:end); % 复数数组samp_rate = 250e3; % 采样率 250 kHz
signal_duration = 10; % 每个信号的时长 1秒
samples_per_signal = samp_rate * signal_duration;
num_signals = floor(length(data) / samples_per_signal);
signals = reshape(data(1:num_signals * samples_per_signal), samples_per_signal, num_signals);
data = signals(:,5);fs = 1e6;
N = length(data);
tall = N/fs;
t = linspace(0,tall,N);% 时频分析(使用短时傅里叶变换 STFT)
window = 1024; % 窗口大小
noverlap = 512; % 重叠部分
nfft = 4096; % FFT 点数% 绘制时频图
figure;
[S,F,T] = spectrogram(double(data), window, noverlap, nfft, samp_rate, 'yaxis');% spectrogram(double(data), window, noverlap, nfft, fs, 'yaxis');% log_data = log(abs(double(data)));
% log_data(~isfinite(log_data)) = 0; % 将NaN或Inf替换为0
% spectrogram(log_data, window, noverlap, nfft, fs, 'yaxis');F = F/max(F)*samp_rate/1e3;
imagesc(T,F,10*log10(abs(S)))% imagesc(T,F,abs(S))% xlim([0,10])
% ylim([0,1000])
% ylim([0,200])% yticks_vals = yticks;
% yticks_vals = yticks_vals / max(yticks_vals)*samp_rate/1e3;
% yticks(yticks_vals);% colormap jet; % 选择合适的颜色映射
caxis([-30 10]); % 设置颜色轴范围xlabel('Time (s)');
set(gca, 'YDir', 'normal')
ylabel('Frequency (kHz)');
% colorbar;phi = (1 + sqrt(5)) / 2;
pbaspect([phi 1 1]); % 设置为黄金分割比
% yticks(0:50:200);
set(gca, 'FontName', 'Times New Roman'); % 设置坐标轴字体
set(gca, 'FontSize', 14);