m基于可见光通信系统的RFID接口过程以及ALOHA防碰撞算法的matlab仿真

1.算法描述

射频识别技术(Radio Frequency Identification,RFID)是一种非接触式自动识别技术,与传统的识别方式相比,它无需直接接触、无需光学可视、无需人工干预即可完成信息输入和处理,具有操作方便快捷、存储数据量大、保密性好、反应时间短、对环境适应性强等优点,现在已广泛应用于工业自动化、商业自动化和交通运输管理等领域,成为当前IT业研究的热点技术之一。


  典型的RFID系统主要包括三个部分:电子标签(tag)、读写器(Read)和应用系统(如图1)。电子标签放置在被识别的对象上,是RFID系统真正的数据载体。通常电子标签处于休眠状态,一旦进入读写器作用范围内就会被激活,并与读写器进行无线射频方式的非接触式双向数据通信,以达到识别并交换数据的目的。此外,许多读写器还都有附加的通信接口,以便将所获的数据传给应用系统进行进一步的处理。


对具有多个上传信道可同时上传ID信息的RFID 系统的空中接口过程进行仿真, 探讨系统识别标签的速率与信道数的关系,并与现有标准ISO,18000-6C的识别速率进行对比RFID 系统的空中接口过程, 当多个上传信道同时上传ID的时候,那么必然会涉及到多个信道之间的干扰,那么信道数目越多,这种相互干扰的就越严重,从而影响对不同上传ID识别速率,所以我们需要研究多信道和识别速度的关系。根据上面内容,需要研究两个方面的东西,一个接口过程,一个防碰撞算法。   


RFID的接口过程满足如下的结构框图:


关于防碰撞算法:


进行多种算法的对比:设置不同的ID数量,然后分别仿真其对应的识别时间,即速率,然后做出仿真图。包括二进制搜索算法。标准ISO,18000-6C用的是ALOHA算法。


“Aloha算法是一种非常简单的TDMA算法,该算法被广泛应用在RFID系统中。这种算法多采取“标签先发言”的方式,即标签一进入读写器的阅读区域就自动向读写器发送其自身的ID,随即标签和读写器间开始通信。


ALOHA算法是随机接入算法的一种,当标签要发送数据信息时,它可以在任意时间段随机发送,把它称为纯ALOHA算法。


2.matlab算法仿真效果

matlab2022a仿真结果如下:


3.MATLAB核心程序

%%

%参数定义

%信息码长度

SNR           = [10:1:17];

TDL           = [500,400,300,200,100,50,20,10];

ERR           = zeros(1,length(SNR));


for jj = 1:length(SNR)

jj

Num = 0;

Ber = 0;

while Ber <= TDL(jj);

Num = Num + 1;

Ber


Frame_length  = 10*64;    

%信息码速率为10KHz

Rates         = 10e3;

%发送带宽20KHz

Bwidth        = 2*Rates;     

%发送信号功率2W

Tpower        = 2;                        

%载波频率70MHz

fc            = 70e6;      

%采样频率280MHz,满足四倍采样

fs            = fc*4;        

%20KHz方波

Swave1        = 20e3;            

%40KHz方波

Swave2        = 40e3;             

%采样点数

M             = fs/(2*Swave2);   

%信息码采样点

L             = fs/Rates;

%2ASK调制的调制度

ma            = 0.5;     

%alpha值

alpha         = 2*ma/(1-ma);                         



%%

%随机信息码产生

data_code0 = zeros(1,Frame_length);

%随机产生信息码

data_code0 =(randn(1,Frame_length)>=0.5);


%%

%CRC校验

data_code  = func_CRC(data_code0);


%%

%数据采样化

data_code_sample = func_samples(data_code,Frame_length,L);


%%

%编码

data_code_sample = func_encode(data_code_sample,data_code,Frame_length,L,M);


%%

%调制发送

%FIR低通滤波器设计

data_sample_fir  = func_filter(data_code_sample,fs,fc);

T                = Frame_length*L*(1/fs);

t                = [0:1/fs:T-(1/fs)];

Carriers         = cos(2*pi*fc*t);

%ASK调制

RFID_ASK         =((2*Tpower).^0.5)*(1+alpha*data_sample_fir).*Carriers;

%ASK调制信号加正弦波干扰

RFID_ASK_sin     = RFID_ASK + 10*cos(2*pi*fc*t+pi/6);



%高斯信道

snr                = SNR(jj);                                  

RFID_ASK_sin_N     = awgn(RFID_ASK_sin,snr,'measured');



figure(1);

subplot(221)

plot(RFID_ASK(100:1000));

title('2ASK调制信号');

axis([0,1000,-10,10]);


subplot(222)

plot(RFID_ASK_sin(100:1000));

grid on;

title('ASK调制信号加正弦波干扰');

axis([0,1000,-30,30]);


subplot(223)

plot(RFID_ASK_sin_N(100:1000));

grid on;

title('过信道之后信号');

axis([0,1000,-30,30]);



%限幅

AMP                = 10;

RFID_ASK_sin_N_amp = func_amp_limit(RFID_ASK_sin_N,AMP);



%ASK解调

[RFID_deASK_filter,amp]=func_AKS_Demod(RFID_ASK_sin_N_amp,Carriers,fc,fs);



subplot(224)

plot(RFID_deASK_filter(100:end));

grid on;

title('2ASK解调信号');

axis([0 L*Frame_length -5 20]);



%判决门限

RFID_deASK10  = func_unsamples(amp,Frame_length,M);


%解码

data_code_rec = func_decode(RFID_deASK10,Frame_length);


%统计误码率

Err_rate      = func_err(data_code_rec,data_code,Frame_length);

Ber           = Ber + Err_rate*Frame_length;

end

ERR(jj) = Ber/(Num*Frame_length);

end


figure;

semilogy(SNR,ERR,'b-o');

xlabel('SNR');

ylabel('BER');

grid on;

01_094_m

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容