matlab 微秒 符号,matlab处理csi
使用python調用matlab API接口進行數據分析
找到matlab安裝目錄下自帶的setup.py的路徑我的路徑如下
D:\MATLAB\R2018a\extern\engines\python
打開cmd進入到剛才找到的路徑
管理員權限執行!!! pyhton setup.py install
具體代碼
1.將csiTool中的matlab文件夾下的文件拷到pycharm的工作目錄下,我的拷出來不行,于是從Github中重新下載了下來,考進去成功!
csi_trace=read_bf_file('csi.dat');
csi_entry=csi_trace{1}
timestamp_low: 4 (In the sample trace, timestamp_low is invalid and always 4.)
bfee_count: 72
Nrx: 3
Ntx: 1
rssi_a: 33
rssi_b: 37
rssi_c: 41
noise: -127
agc: 38
perm: [3 2 1]
rate: 256
csi: [1x3x30 double]
timestamp_low:NIC網卡1MHz時鐘的低32位。它大約4300s(72min)重復一回。 (從0-2^32需要4300s),時間戳,相連兩包此值差單位為微秒,通過驗證發現100hz的發包頻率此差值為10000,20hz的發包頻率此差值為50000,此參數可以確定出波形的橫軸時間。
當發包頻率過大會出現接收端停止收數的情況:20Hz正常,200Hz和1000Hz的采樣頻率,收端最多接收一分多鐘的的數據(原因是recv函數接收數據阻塞導致)
1、將包長變小后還是有同樣的問題。
2、由數據速率引起的,它太高,程序無法處理(可以嘗試設置非阻塞)
0x4101決定了主機僅一根天線發送數據,因此此處的Ntx值為1,另外采用的是OFDM模式 如果想要收端接收到發端兩根天線的數據(CSI的格式為2×3×30),只需要把第14、15位均設置為1,即在發送端的腳本里面設置為0xC101 注:關于0x4101的具體說明如下
bfee_count:驅動記錄并發送到用戶控件的波束測量值的總數。內核和用戶空間中netlink頻道是有損的,可以用該變量來檢測被丟棄的測量值。
Nrx:接收端使用的天線數量。
Ntx:發送端使用的天線數量。
rssi_a, rssi_b, rssi_c:由接收端NIC測量出的RSSI值。
perm:展示NIC如何將3個接收天線的信號排列到3個RF鏈上,上圖中的數據表示天線A被發送到RF鏈A,天線B被發送到RF鏈B,天線C被發送到RF鏈C。
rate:發包頻率。
csi:CSI值
3374094
MATLAB命令
a=[1 2 3;4 5 6] #矩陣
A' #A的共軛轉置矩陣
ones(2,3) #一矩陣
b=1:0.1:2 #集合間距為0.1
zeros(2,3) #零矩陣
rand(2,3) #隨機矩陣,數值介于0和1之間
randn(2,3) #矩陣(一個平均值為0的高斯分布,方差或者等于1的標準偏差)
eye(2) #單位陣
hist() #直方圖
size() #矩陣的尺寸
size(A, 1) #矩陣第一維的尺度
length(A) #由于矩陣A是一個
3×2的矩陣,因此最大的維度應該是3,因此該命令會返回3。
who # 命令,能顯示出工作空間中的所有變量
whos #命令,能更詳細地進行查看
load('featureX.dat') # 加載數據文件,變量名等于文件名
clear #命令,刪除所有變量,加變量名刪除特定
save hello.mat v #這個命令會將變量v存成一個叫 hello.mat 的文件,按二進制存儲
save hello.txt v -ascii # 這樣就會把數據存成一個文本文檔,或者將數據的 ascii 碼存成文本文檔
鍵入 A(3,2) # 這將索引到 矩陣的 (3,2) 元素。
鍵入A(2,:) #返回第二行的所有元素
A([1 3],:) #取的是A矩陣的第一行和第三行的每一列
A = [A, [100, 101,102]] #這樣做的結果是在原矩陣的右邊附加了一個新的列矩陣
A(:) #這是一個很特別的語法結構,意思是把 A中的所有元素放入一個單獨的列向量,這樣我們就得到了一個 9×1 的向量
A.*B #這么做將矩陣 A中的每一個元素與矩陣 B中的對應元素相乘
A.^2 #這將對矩陣中每一個元素平方
1./A #得到中每一個元素的倒數。同樣地,這里的點號還是表示對每一個元素進行操作。
exp(A) #自然數e的冪次運算
abs(A) #取絕對值
val=max(A) #默認情況下max(A)返回的是每一列的最大值,如果你想要找出整個矩陣A的最大值,你可以輸入max(max(A))
[val, ind] =max(A) #這將返回矩陣中的最大值存入,以及該值對應的索引
A<3 #這將進行逐元素的運算,所以元素小于3的返回1,否則返回0。
find(A<3) #這將告訴我A中的哪些元素是小于3的。
A = magic(3) #magic 函數將返回一個矩陣,稱為魔方陣或幻方 (magic squares),它們具有以下這樣的數學性質:它們所有的行和列和對角線加起來都等于相同的值。
[r,c] = find(A>=7) #這將找出所有矩陣中大于等于7的元素,r 和c分別表示行和列
sum(a) #就把 a 中每列所有元素加起來了。
sum(a,2) #求每行的和
prod(a) #prod 意思是product(乘積),它將返回這四個元素的乘積。
floor(a) #向下四舍五入,因此對于 a中的元素0.5將被下舍入變成0。
ceil(a) #向上四舍五入,所以0.5將上舍入變為最接近的整數,也就是1。
type(3) #這通常得到一個3×3的矩陣
max(rand(3),rand(3)) #這樣做的結果是返回兩個3×3的隨機矩陣,并且逐元素比較取最大值。
max(A,[],1) #這樣做會得到每一列的最大值。
max(A,[],2) #這將得到每一行的最大值。
sum(sum(A.*eye(9)
hold on #函數的功能是將新的圖像繪制在舊的之上。
再加上命令xlabel('time'), 來標記X軸即水平軸,輸入ylabel('value'),來標記垂直軸的值。
legend('sin','cos') #表示這兩條曲線表示的內容。
title('myplot') #顯示這幅圖的標題。
print(gcf,'-dpng','abc.png') #保存為png格式的圖片到當前路徑
squeeze() #用于刪除矩陣中的單一維,對二維矩陣無效。
close會讓這個圖像關掉。
鍵入figure(1); plot(t, y1);將顯示第一張圖,鍵入figure(2); plot(t, y2); 將顯示第二張圖(同時顯示兩張圖)
subplot(1,2,1),它將圖像分為一個1*2的格子,也就是前兩個參數,然后它使用第一個格子,也就是最后一個參數1的意思
axis([0.5 1 -1 1])也就是設置了軸的范圍。橫軸的范圍調整至0.5到1,豎軸的范圍為-1到1。
Clf清除一幅圖像。
我有時用一個巧妙的方法來可視化矩陣,也就是imagesc(A)命令
我還可以使用函數colorbar,讓我用一個更復雜的命令 imagesc(A),colorbar,colormap gray 它生成了一個顏色圖像,一個灰度分布圖,并在右邊也加入一個顏色條。所以這個顏色條顯示不同深淺的顏色所對應的值。
csi_trace = read_bf_file('csi6.dat');%數據讀取
for l=1:1 %取50個數據包的數據
csia=get_scaled_csi(csi_trace{l});%提取csi矩陣
for i=1:1 %1個發射天線
for j=1:3 %2個接收天線
for k=1:30 %30個子載波數據
B(i,j,k)=csia(i,j,k);
end
end
end
plot(db(abs(squeeze(B).')))
%squeeze通過移除第一個單維度將csi變成3*30的矩陣
%db將線性空間變成以十為底的對數空間
%.'轉置得到30*3的矩陣
%plot(Y)如果Y是m×n的數組,以1:m為X橫坐標,Y中的每一列元素為Y坐標,繪制n條曲線
hold on%當前軸及圖像保持而不被刷新,準備接受此后將繪制的圖形,多圖共存
end
legend('RX Antenna A', 'RX Antenna B','RX Antenna C', 'Location', 'SouthEast' );
xlabel('Subcarrier index');
ylabel('SNR [dB]')
hold off;
%get_eff_SNRs() 它接受一個CSI矩陣作為輸入,并返回一個線性(冪)空間中有效信噪比值的74矩陣。
%這4列對應的有效信噪比使用四種802.11調制方案,即BPSK/QPSK/16QAM/64QAM。
%7行對應于7個可能的天線選擇,包括3個天線和1、2或3個空間流。
%特別是,前3行對應于天線A、B或c的單流傳輸,后3行對應于天線AB、AC或BC的雙流傳輸。最后一行對應于使用所有天線的3流傳輸
總結
以上是生活随笔為你收集整理的matlab 微秒 符号,matlab处理csi的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 仪表盘怎么调 铃木uy125摩托车_平时
- 下一篇: r语言如何读取matlab数据类型,[转