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流传输

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MATLAB是一种功能强大的仿真软件,我们可以使用它来模拟雷达脉冲。雷达脉冲是一种用于探测目标的信号,通常由窄脉冲组成,每个脉冲都是刻画返回信号的一个测量点。 首先,我们需要定义脉冲的参数,如脉冲宽度、重复频率和中心频率等。这些参数可以根据实际需要进行调整。然后,我们可以使用MATLAB的信号处理工具箱中的函数来生成这些脉冲。 一种常用的方法是使用矩形脉冲函数。我们可以使用rectpulse函数来生成矩形脉冲,并指定脉冲的宽度和重复频率。例如,我们可以使用以下代码生成一个宽度为1微秒,重复频率为1千赫兹的脉冲: pulse = rectpulse(1, 1e-6, 1e3); 接下来,我们可以通过改变中心频率来模拟不同的雷达脉冲。可以使用带调频的正弦波来实现这一点。我们可以使用chirp函数来生成带调频的正弦波,并将其与脉冲信号相乘。以下是一个示例: t = linspace(0, 1, 1000); % 生成时间从0到1秒的等间隔点 freq = 1e9; % 中心频率为1千兆赫兹 chirp_signal = chirp(t, freq-1e6, 1, freq+1e6); % 生成带调频的正弦波 radar_pulse = chirp_signal.*pulse; % 将带调频的正弦波与脉冲信号相乘 最后,我们可以使用plot函数将生成的雷达脉冲可视化。这将显示脉冲的幅度随时间变化的图形。我们还可以使用FFT函数对脉冲进行频谱分析,以研究不同频率的成分。 总之,MATLAB是一种可用于生成和仿真雷达脉冲的强大工具。通过定义脉冲参数、生成脉冲信号并进行可视化和分析,我们可以更好地了解和研究雷达系统的性能。 ### 回答2: MATLAB仿真雷达脉冲是通过使用MATLAB软件进行雷达脉冲信号的模拟和分析。雷达脉冲是指在一定时间内发射出的高功率短时脉冲信号。 在MATLAB中,可以使用一些函数和工具箱来实现雷达脉冲的仿真。首先,可使用MATLAB的信号处理工具箱中的波形发生器函数来生成所需的脉冲信号,如rectpuls函数生成矩形脉冲信号。通过调整参数,我们可以控制脉冲的宽度、幅值和起始时间。 然后,可以使用MATLAB中的滤波器函数进行信号处理,以模拟雷达中的回波信号。滤波器可以模拟雷达脉冲的传播路径和目标返回的信号。常用的滤波器包括匹配滤波器,用于提取雷达目标的回波信号。 接下来,我们可以使用MATLAB的绘图函数来可视化仿真结果。可以绘制脉冲信号的时域和频域图像,以及雷达回波的时域和频域图像。通过观察这些图像,我们可以分析脉冲信号的性质,如脉冲宽度、频谱特征和回波信号的幅值和时延等。 最后,可以使用MATLAB中的其他工具和函数来进一步分析仿真结果。例如,可以通过计算自相关函数和互相关函数来评估信号的相似性和相关性。还可以使用功率谱密度函数来分析信号的频域特征。 总之,MATLAB是一个功能强大的仿真工具,可以用于模拟和分析雷达脉冲信号。通过使用MATLAB的信号处理工具箱和绘图函数,我们可以生成和可视化脉冲信号,模拟雷达回波,以及分析脉冲信号和回波信号的性质。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值