多信号实采数据加噪版本

一、加噪多信号实采数据

多信号实采数据产生:

多雷达信号硬件模拟】 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);
相关推荐
梦想的初衷~4 小时前
MATLAB近红外光谱分析技术及实践技术应用
开发语言·支持向量机·matlab
2zcode8 小时前
基于Matlab图像处理的瓶子自动检测与质量评估系统
开发语言·图像处理·matlab
乌恩大侠8 小时前
利用软件定义无线USRP X410、X440 电推进无线原型设计
usrp·usrp x440·usrp x410
xiao5kou4chang6kai415 小时前
MATLAB近红外光谱分析技术及实践技术
支持向量机·matlab·近红外光谱·光谱分析
微光-沫年1 天前
150-SWT-MCNN-BiGRU-Attention分类预测模型等!
机器学习·matlab·分类
青春不败 177-3266-05202 天前
MATLAB近红外光谱分析技术及实践技术应用
随机森林·机器学习·支持向量机·matlab·卷积神经网络·遗传算法·近红外光谱
简简单单做算法3 天前
基于LSTM深度学习网络的视频类型分类算法matlab仿真
深度学习·matlab·分类·lstm·视频类型分类
2zcode4 天前
基于Matlab图像处理的水果分级系统
图像处理·人工智能·matlab
88号技师4 天前
2025年7月Renewable Energy-冬虫夏草优化算法Caterpillar Fungus Optimizer-附Matlab免费代码
开发语言·人工智能·算法·matlab·优化算法