如何用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/91547.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(LeetCode 面试经典 150 题 ) 155. 最小栈 (栈)

题目&#xff1a;155. 最小栈 思路&#xff1a;栈&#xff0c;时间复杂度0(n)。 在插入栈元素val时&#xff0c;同时加入一个字段&#xff0c;维护插入当前元素val时的最小值即可。 C版本&#xff1a; class MinStack { public:stack<pair<int,int>> st;MinStac…

算法:动态规划 洛谷 线性状态动态规划 P1439【模板】最长公共子序列

思路&#xff1a;因为n<1e5,所以不能O&#xff08;n方&#xff09;的复杂度&#xff0c;所以常规的计算最长公共子序列的方法就不行&#xff0c;不过这题有个特点&#xff0c;就是a&#xff0c;b都是排列&#xff0c;那么a有的数b也有&#xff0c;并且数量还一样&#xff0c…

Linux跑后台服务

vi /usr/lib/systemd/system/my_service.service文件配置内容&#xff1a;[Unit] Descriptionmyprogram Afternetwork.target[Service] Userroot Typesimple ExecStart/home/userabc/programs/myprogram/myprogram.out Restarton-failure WorkingDirectory/home/userabc/progra…

Linux基础练习题1

1、配置网络地址 请为此虚拟机配置以下网络参数&#xff1a; 1&#xff09;主机名&#xff1a;chenyu.example.com &#xff08;将chenyu改成自己名字的全拼&#xff09; 2&#xff09;IP 地址&#xff1a;192.168.100.100/24 3&#xff09;默认网关&#xff1a;192.168.100.25…

# 前端开发规范基础汇总

前端开发规范基础汇总 命名规范 常用的命名规范 camelCase&#xff08;小驼峰式命名法 —— 首字小写&#xff09;PascalCase&#xff08;大驼峰式命名法 —— 首字大写&#xff09;snake_case&#xff08;下划线命名法&#xff09;kebab-case&#xff08;短横线命名法&…

jQuery UI Tabs切换功能实例

jQuery UI Tabs切换功能使用jQuery UI实现Tabs切换功能的方法。代码示例创建了一个包含四个标签页&#xff08;按钮A-D&#xff09;的界面&#xff0c;每个标签对应不同的内容区域。通过引入jQuery UI库并调用tabs()方法实现基本切换功能。文章还提到可以通过配置选项修改默认行…

关于为什么stm32的开漏输出可以读取引脚的数值

在使用软件模拟iic通信时&#xff0c;要将SDA线配置为开漏输出&#xff0c;既然配置为开漏输出&#xff0c;为什么程序还可以通过SDA线读取数据&#xff1f;查阅手册&#xff1a;只说了结论&#xff1a;在开楼模式下&#xff0c;对输入数据寄存器的读访问可以得到IO状态来看输出…

墨者:SQL手工注入漏洞测试(SQLite数据库)

1. 墨者学院&#xff1a;SQL手工注入漏洞测试(SQLite数据库)&#x1f680; 2. SQLite数据库注入特点&#x1f50d; SQLite数据库和MySQL数据库语法不同&#xff0c;不能直接套用MySQL的注入方式。但SQLite有个特殊的数据库sqlite_master&#xff0c;它存储了所有表结构信息&…

【Apache Tomcat】

目录Tomcat 基本简介Tomcat 架构组成Tomcat 的目录结构Tomcat 的工作原理Tomcat 的配置文件Tomcat 与其他服务器对比Tomcat 使用场景Tomcat 与 Spring Boot常见问题与优化Tomcat&#xff08;全称 Apache Tomcat&#xff09;是由 Apache 软件基金会开发和维护的一款 开源的 Web …

Nginx参数proxy_set_header 与 add_header 核心区别

proxy_set_header 与 add_header 是 Nginx 中两个用于操作 HTTP 头部信息的指令&#xff0c;但作用方向和使用场景完全不同。以下是两者的核心区别&#xff1a;核心区别概述特性proxy_set_headeradd_header作用方向✅ 请求头&#xff08;Request Headers&#xff09; → 后端服…

若依框架-前端二次开发快速入门简述

1.目录如左图所示&#xff0c;主要分为bin,build,node_modules,public,src几个部分&#xff0c;我们从gitee上使用bash将项目克隆到本地后&#xff0c;进入项目目录&#xff0c;并安装好依赖后可以直接使用命令启动服务&#xff0c;具体命令见README.md&#xff0c;安装好依赖后…

day 41 类和方法

day 28 类是对属性和方法的封装&#xff0c;可以理解为模版&#xff0c;通过对模型实例化可以实现调用这个类的属性和方法。比如创建一个随机森林类&#xff0c;然后就可以调用它的训练和预测方法。 一个常见的类的定义包括了&#xff1a; 1、关键字class 2、类名 3、语法固定…

Docker学习日志-Docker容器配置、Nginx 配置与文件映射

Docker学习日志-Docker容器配置、Nginx 配置与文件映射 docker run 之后能否再次修改卷映射或端口映射&#xff1f; 不能直接修改已创建容器的卷映射或端口映射。 Docker 的设计原则是 **容器是不可变的 **&#xff0c;也就是说&#xff1a; 一旦容器通过 docker run 创建完成&…

cpp实现音频重采样8k->16k及16k->8k

static int convert_8khz_to_16khz(void* dst_buf, void* src_buf, int src_size) {short* in static_cast<short*>(src_buf);short* out static_cast<short*>(dst_buf);int in_samples src_size / sizeof(short);// 边界处理&#xff1a;前两个样本out[0] in[…

【机器学习】机器学习新手入门概述

目录 一、机器学习概念 1.1基本概念 1.2 主要类型 1.2.1 监督学习&#xff08;Supervised Learning&#xff09; &#xff08;1&#xff09;基本介绍 &#xff08;2&#xff09;任务目标 &#xff08;3&#xff09;常见算法 &#xff08;4&#xff09;应用场景 1.2.2 无…

嵌入式硬件篇---ESP32稳压板

制作 ESP32 稳压板的核心目标是&#xff1a;给 ESP32 提供稳定的 3.3V 电源&#xff08;ESP32 的工作电压必须是 3.3V&#xff09;&#xff0c;同时支持多种供电方式&#xff08;比如锂电池、USB、外接电源&#xff09;&#xff0c;并具备保护功能&#xff08;防止过流、接反电…

sql server 删除用户时提示:数据库主体在该数据库中拥有 架构,无法删除

sql server 删除用户时提示&#xff1a;数据库主体在该数据库中拥有 架构&#xff0c;无法删除&#xff0c;怎么办&#xff1f; 1、删除用户ncdb2、 数据库主体在该数据库中拥有 架构&#xff0c;无法删除。3、查看该用户拥有的架构4、找到该用户拥有的这个架构&#xff0c;右键…

分类-鸢尾花分类

目录 基本步骤 决策树&#xff08;分类&#xff09; 导入鸢尾花数据集 赋值给x与y 划分数据集 导入决策树模型 实例化 训练 ​编辑 导入计算准确率的库 计算准确率 随机森林&#xff08;分类&#xff09; 导入鸢尾花的数据集&#xff0c; 赋值x&#xff0c;y 取后一…

单元测试、系统测试、集成测试知识详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、单元测试的概念单元测试是对软件基本组成单元进行的测试&#xff0c;如函数或一个类的方法。当然这里的基本单元不仅仅指的是一个函数或者方法&#xff0c;有可…

Python初学OpenCV:图像预处理进阶指南(二)

——实战技巧与创新应用 > 图像预处理是计算机视觉的"基石",掌握它等于获得了让机器"看懂世界"的魔法棒。 在上一篇教程中,我们学习了OpenCV的基础预处理操作。本篇将带你进入图像预处理的进阶世界,通过**实战案例+创新应用**,教你如何组合多种技…