目录
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_code
0 = zeros(
1,Frame_length);
-
%随机产生信息码
-
data_code
0 =(randn(
1,Frame_length)>=
0.
5);
-
-
%%
-
%CRC校验
-
data_code = func_CRC(data_code
0);
-
-
%%
-
%数据采样化
-
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_deASK1
0 = func_unsamples(amp,Frame_length,M);
-
-
%解码
-
data_code_rec = func_decode(RFID_deASK1
0,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
4.完整MATLAB
V
V
转载:https://blog.csdn.net/hlayumi1234567/article/details/128120518