射频识别=无线电频率识别=RFID
应答器:存放识别信息的电子数据载体
阅读器:将识别信息从应答器中读出(还可以写入数据)
应答器是统称,在各种专业场合有专业名字,比如射频卡(门禁卡、校园卡),标签(商品标签)等。
阅读器也可以叫读/写器、基站等(都不准确,但遇到这些把他们当作阅读器)
耦合:指天线(阅读器)和标签(应答器)之间的电磁相互作用。
当一个 RFID 标签进入天线的工作范围内时,天线会向空间发射一定频率的电磁波,这些电磁波会被标签接收并利用它们来传输数据。当电磁波通过标签的天线时,它会激发标签中的电路并产生一个反馈信号,这个信号会被读取器天线接收并解码。这种相互作用被称为耦合。
读写器(阅读器)则是RFID系统中控制天线工作的设备,通常由计算机或嵌入式系统控制。读写器向天线提供能量和命令,并从天线接收标签返回的数据。在RFID系统中,读写器是与计算机或嵌入式系统交互的主要方式,可以通过它来实现对标签的管理和控制。
这里请注意,阅读器不是标签,但是为了方便理解耦合,我们可以理解为阅读器和应答器之间的相互作用,毕竟我们这里只是学习了解,不是专门进入这个领域。
RFID主要可以分为电感耦合方式(磁耦合)与反向散射耦合方式(电磁场耦合)两大类。
电感耦合方式:
- 1.射频载波频率fc (工作频率)为13.56MHz或者小于135kHz的频段
- 2.应答器与阅读器的工作距离在1m以下
- 3.应答器几乎是无源的,能量(电源)从阅读器获得
- 4.应答器向阅读器数据传输方法:负载调制
- 5.阅读器向应答器数据传输方法:多种数字调制,通常指的是幅移键控(ASK)
- 6.方式的变形:1)时序方式 2)扫频法 3)分频信号检测法
反向散射耦合方式:
- 1.声表面波器件(ASW)以压电效应和与表面弹性相关的低速传播的声波为依据。
- 2.方式变形:谐波检测法
什么条码的概念就不说了,我们的目的是学会人为读取条形码即可。
本部分参考原文链接:条码原文
条形码一共有13位
前2位或者前3位称为前缀,表示国家、地区或者某种特定的商品类型
中国区条形码开头:690~699
图书类条形码开头:978~979
前缀后的4位或者5位称为厂商代码,表示产品制造商
厂商代码后5位称为商品代码,表示具体的商品项目
最后1位是校验码,根据前12位计算而出,可以用来防伪以及识别校验
条形码一共有8个区域:左侧空白区->起始符->左侧数据符->中间分隔符->右侧数据符->校验符->终止符->右侧空白区
以宽度为编码,去掉起始码,终止码,中间分隔码,不管白条还是黑条都算一个编码,最窄一节为1(最窄的为单位宽度),两个单位宽度就是2,三单位长度为3,四单位宽度为4。
四条(不管黑条还是白条都算条)代表一个数字,这里只管宽度不区分0和1
四条长度 | 数字 |
---|---|
3211 | 0 |
2221 | 1 |
2122 | 2 |
1411 | 3 |
1132 | 4 |
1231 | 5 |
1114 | 6 |
1312 | 7 |
1213 | 8 |
3112 | 9 |
以下图所示的条形码举例说明:
条形码的位数起始位为最右一位,即校验位,检验码计算方法如下:
偶位数数值相加乘3((0+2+0+8+1+9)*3=60)
不含校验位的奇位数相加(7+4+7+9+3+6=36)
将前两步的结果相加(60+36=96)
用10减去上一步结果的个位数数值(10-6=4)
上一步结果的个位数即为校验码(4)
后面实验篇会有关于二维码识别的实验,期末会考关于其识别的实验题,本质上,二维码也是一种条形码,所以这里也就是一部分原理。
这里赠送一个条形码生成网站,可以自己尝试玩玩:生成条码
- 1.数据与信号(这个不想说了,太简单了)
- 2.数字信号和模拟信号(单片机玩过没,玩过就知道了)
- 3.输介质:传输介质是数据传输系统里发送器和接收器之间的物理通路。
- 4.延迟变形:参考课本P63
- 5.多径效应:无线信号通过直射、折射、反射等不同路径到达同一点时因信号叠加或相互抵消产生多经效应。(大学物理中应该接触过)
- 1.在数字通信中,一个数字脉冲称为一个码元。如字母A的ASCII码是01000001,可用7个脉冲来表示,亦可认为由7个码元组成,码元携带的信息量由码元的离散值个数决定。
- 2.码元传输速率简称传码率,又称符号速率等。它表示单位时间内传输码元的数目,单位是波特 ,记为B。这是为了纪念电报码的发明者法国人波特(Baudot),故码元传输速率也称为波特率。
- 3.对在给定条件,给定通信路径或信道上的数据传输速率称为信道容量。
数据传输速率=码元传输速率×log2M
信道的最大容量C为C=2BW log2M
带宽受限且有高斯白噪声干扰的信道最大容量 C= BW log2(1+S/N)
这一部分通信原理里面涉及到,计算机网络里也有。
作业1:曼切斯特编码碰撞检测的方法
曼切斯特编码数字“0”前半周期为低电平,后半周期为高电平,数字“1”前半周期为高电平,后半周期为低电平表示,因此,0,1组成的数字信号不可能出现连续3个半周期为高或低电平,如果出现连续3个半周期为高或低电平,那么,可以判断一个碰撞发生了。
作业2:RFID多标签识别时,碰撞是如何发生
当一个阅读器同时读多个RFID标签的信息,标签随机选择一个时间片和阅读器通信(时分多路访问机制),当两个以上标签同时和标签发生通信时,碰撞发生,通过曼切斯特碰撞检测方法阅读器就可以知道碰撞发生了。
曼彻斯特编码:看中间突变,上升沿为0,下降沿为1。
本学期的第一个实验就是曼彻斯特编码的防冲突算法,老师说了,几乎所有的题都围绕几个实验来设计,那么实验的原理是重点,就看平时你的实验怎么完成的了,实验部分我放在最后面单独写。
具体的二维码原理不需要知道,我们只需要像了解条形码一样,去了解它的结构就行了,并学会用python编写生成和识别二维码,这是大题里面的送分题,记住代码,生成加识别代码就几行。
1.存储大容量信息
传统的条形码只能处理20位左右的信息量,与此相比,QR码可处理条形码的几十倍到几百倍的信息量。
支持所有类型的数据。(如:数字、英文字母、日文字母、汉字、符号、二进制、控制码等)。
2.在小空间内打印
3.纠错功能
即使部分编码变脏或破损,也可以恢复数据。
数据恢复以码字为单位(是组成内部数据的单位,在QR码的情况下,每8比特代表1码字),最多可以纠错约30%
QR码的纠错功能原理:
是通过将RS编码附加到原数据中的方式实现的,由于RS编码的存在,即使在QR码中出现一定数量的像素损坏或丢失,也能够通过纠错机制来保证数据的完整性和准确性。
因此,在不同的纠错等级下,QR码所能存储的真实数据容量并没有太大差异。RS编码提供了一定的冗余,增强了QR码的容错性等级选择。
pip install opencv-python #cv2
pip install pillow #(anaconda3 已安装)
pip install myqr
pip install qrcode
pip install zxing
4.黄色是纠错区域,随着纠错等级增加,可存储区域减小
在不同的纠错等级下,QR码所能存储的真实数据容量并没有太大差异
存储数据较多时,可以选择较低的纠错等级
import qrcode
# 创建 QRCode 对象,并指定需要生成二维码的内容
qr = qrcode.QRCode(
version=1,
box_size=10,
border=5,
error_correction=qrcode.constants.ERROR_CORRECT_Q, # 设置错误纠正等级为 Q
)
qr.add_data("CSDN@墨城烟柳ベ旧人殇\n我的主页是:https://blog.csdn.net/weixin_51496226?spm=1000.2115.3001.5343") # 内容
qr.make(fit=True) # 生成可以使用 make_image() 方法创建图像的 QR 码图案
# 生成图片,并保存到本地文件
img = qr.make_image(fill_color="black", back_color="#F5DEB3") # 设置填充色为黑色,背景颜色为 "#F5DEB3"(淡褐色)
img.save("1.jpg")
结果:
import cv2
qrcode_filename = "1.jpg"
qrcode_image = cv2.imread(qrcode_filename)
qrCodeDetector = cv2.QRCodeDetector()
data, bbox, straight_qrcode = qrCodeDetector.detectAndDecode(qrcode_image)
print(data)
参考链接
这篇文章有点长,耐心看完,老师根据这个来出题。
参考链接
#include //include the SPI bus library
#include //include the RFID reader library
#define SS_PIN 10 //slave select pin选择引脚
#define RST_PIN 5 //reset pin重置别针
MFRC522 mfrc522(SS_PIN, RST_PIN); // 实例化MFRC522读取器对象.
MFRC522::MIFARE_Key key; //创建一个名为'key '的mifare_key struct,它将保存卡信息
这是我们将写入然后阅读的块号
int block=2;
byte blockcontent[16] = {"Last-Minute-Engg"}; //定义了16个字节的数组
//byte blockcontent[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //all zeros. 这可以用来删除一个块。
//此数组用于读取一个块。
byte readbackblock[18];
void setup()
{
Serial.begin(9600); // Initialize serial communications with the PC
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // INIT MFRC522卡(如果您想知道PCD的含义:接近耦合设备)
Serial.println("Scan a MIFARE Classic card");
//为读取功能准备安全键。
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF; //keyByte is defined in the "MIFARE_Key" 'struct' definition in the .h file of the library
}
}
void loop()
{
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
Serial.println("card selected");
//the blockcontent array is written into the card block
writeBlock(block, blockcontent);
//read the block back
readBlock(block, readbackblock);
//如果您想查看整个1K内存,则在线下方的块。
//mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
//print the block contents
Serial.print("read block: ");
for (int j=0 ; j<16 ; j++)
{
Serial.write (readbackblock[j]);
}
Serial.println("");
}
由于实验涉及相当多,平时大部分实验也几乎独立完成并写了博客,针对每个实验我给出参考链接,复习看一遍就完事了。
实验1:曼彻斯特编码与防碰撞算法点我阅读
实验2:CRC循环冗余检验点我阅读
实验3:实现ALOHA协议模拟算法点我阅读
实验4:RFID的三次认证过程点我阅读
实验5:二维码的识别点我阅读
实验6:对象解析服务点我阅读