云计算百科
云计算领域专业知识百科平台

如何用USRP捕获手机信号波形(中)手机/基站通信

目录:

如何用USRP捕获手机信号波形(上)系统及知识准备

如何用USRP捕获手机信号波形(中)手机/基站通信

如何用USRP捕获手机信号波形(下)协议分析

四、信号捕获结果

4.1 时域波形

我怀疑下面微弱的信号是别的用户发射的信号,和我在同一频点。

4.2 信号时频图案

fs=61.44MHz下:

fs=15.36MH下:

fs=3.84MHz: 

手机关机时:

这个宽1MHz的也是信号吗?

4.3 信号星座图

整体感觉3408.96MHz频点上只有我一个用户,信道质量也很好。

五、信道分析

5.1 当前小区

注意到PCI值一直在变化:

了解了一下,上图中SS为Signal Strength信号强度,其他重要指标内涵如下:

  • CI(物理小区标识符):是网络中每个小区的唯一标识符。PCI用于帮助移动设备识别当前连接或正在扫描的无线小区。

  • RSRP(参考信号接收功率):衡量接收到的参考信号的强度,单位是dBm(分贝毫瓦)。值越小(数值越负),表示信号越弱

  • RSRQ(参考信号接收质量):衡量接收到的信号质量,它是基于RSRP和噪声水平计算的。值越低,表示信号质量越差。

  • SINR(信噪比):衡量信号与干扰加噪声的比值。值越高表示信号质量越好,网络性能越佳。

手机当前小区的信道质量比邻小区最好的信道质量都强太多,一个SINR 为11,一个SINR为4。

5.2 手机信号控制

一开始我想通过播放视频的方式让手机更密集地发射信号:

效果:

感觉信号发射密集程度、带宽等和视频播放这一行为不是很匹配。我觉得手机这边视频一直播放,信号应该几乎一直出现。

我突然想到,一直播放视频时是下行链路比较繁忙。虽然TDD模式下行链路和上行链路是同一频点,但是基站信号传输到手机这边功率已经很低了,手机内置射频芯片是经过专门设计的,可以在接收信号功率很低的情况下正常解码、获取信息。但是,用USRP可能观察不到明显的下行信号传输。

接受功率调到最低时信号变多了些:

接收增益从31.5dB调到70dB:

查看USRP射频参数,没显示最低接收功率。但是我感觉即便GNU Radio设置为-200dB,实际最低接收功率不太可能这么低,专门的SP145频谱分析仪最低接收功率才-110dB左右。

我又想到即便手机在播放视频,有可能视频已经缓存完了,下行链路并不繁忙了。所以,如果要让下行链路一直繁忙,就要不断切换新视频。在此过程中,观察信号:

有明显的效果。

百度网盘下载文件时:

开了会员,百度网盘上传数据太快了……

给微信好友发视频也行:

手机熄屏时:

向好友发送视频时:

同时,信号强度和刷视频时一致。这也提醒了我,每次切换视频时手机是要发送信号的,短视频云服务器收到手机命令后才下发下一条视频数据。也就是说,切换视频时明显观察到的信号基本都是手机发送的,而非来自基站的。

六、MATLAB 深度分析

6.1 数据读取

存储了一段信号:

先检查下采样率:

USRP采样率自检程序-CSDN博客

设置的3.84M采样率,为主时钟61.44MHz的1/16,算上计时误差,43662120/3.84e6=11.87s,差不多了。

绘制波形和时频图程序:

clc
clear
close all

% 打开文件
% fid = fopen('real_data_show.txt', 'rb'); % 'rb'表示以二进制读取模式打开文件
fid = fopen('D:\\无线通信网络认知\\通信学报\\5G信号\\fc_3408.96e6_fs_3.84MHz.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 = 3.84e6; % 采样率 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 = 3.84e6;
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/1e6;
s1 = S(1:2048,:);
s2 = S(2049:end,:);
S(1:2048,:)=s2;
S(2049:end,:)=s1;
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 (MHz)');
% colorbar;

phi = (1 + sqrt(5)) / 2;
pbaspect([phi 1 1]); % 设置为黄金分割比
yticks(0:0.5:3.84);
xtickformat('%.2f');
set(gca, 'FontName', 'Times New Roman'); % 设置坐标轴字体
set(gca, 'FontSize', 14);

6.2 时频图

6.3 时域波形

11.87s

1s

100ms

0.0006s 0.6ms 2304points

0.0001s 0.1ms 384point

赞(0)
未经允许不得转载:网硕互联帮助中心 » 如何用USRP捕获手机信号波形(中)手机/基站通信
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!