如何用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
英文地址,請注明出處:http://en.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的基礎預處理操作。本篇將帶你進入圖像預處理的進階世界,通過**實戰案例+創新應用**,教你如何組合多種技…