多信号实采数据加噪版本

一、加噪多信号实采数据

多信号实采数据产生:

多雷达信号硬件模拟】 3台USRP+1台VSG信号发生器模拟多雷达信号,1台USRP产生高斯噪声模拟更多信道环境,1台USRP采集信号

加噪程序:

Matlab 复制代码
%zhouzhichao
%25年7月28日
%生成加噪的高斯测试数据集

clear
clc
close all

samp_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转为kHz
                F = 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');
            end
        end
    end
end

原始采集:

信噪比设为6dB:

信噪比设为0dB:

二、多信号实采数据展示

展示程序:

Matlab 复制代码
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);
相关推荐
软件算法开发1 天前
基于LSTM深度学习的网络流量测量算法matlab仿真
深度学习·matlab·lstm·网络流量测量
wheeldown2 天前
【数学建模】数据预处理入门:从理论到动手操作
python·数学建模·matlab·python3.11
小白的高手之路2 天前
Matlab中的积分——函数int()和quadl()
matlab
机器学习之心3 天前
PINN物理信息神经网络用于求解二阶常微分方程(ODE)的边值问题,Matlab实现
人工智能·神经网络·matlab·物理信息神经网络·二阶常微分方程
WangYan20223 天前
MATLAB 2023a深度学习工具箱全面解析:从CNN、RNN、GAN到YOLO与U-Net,涵盖模型解释、迁移学习、时间序列预测与图像生成的完整实战指南
深度学习·matlab·matlab 2023a
迎风打盹儿3 天前
均匀圆形阵抗干扰MATLAB仿真实录与特点解读
matlab·信号处理·抗干扰·均匀圆阵·波束合成
数维学长9864 天前
【全网最全】《2025国赛/高教杯》C题 思路+代码python和matlab+文献 一到四问 退火算法+遗传算法 NIPT的时点选择与胎儿的异常判定
开发语言·算法·matlab
dlraba8024 天前
用遗传算法破解一元函数最大值问题:从原理到 MATLAB 实现
开发语言·matlab
996终结者4 天前
Python数据分析与处理(二):将数据写回.mat文件的不同方法【超详细】
python·matlab·数据分析
我是水怪的哥4 天前
在时间序列中增加一个阶跃对长期趋势变化的影响
matlab·lake