RFID期末复习总结

一.概念部分

1.基础概念

射频识别=无线电频率识别=RFID

应答器:存放识别信息的电子数据载体

阅读器:将识别信息从应答器中读出(还可以写入数据)

应答器是统称,在各种专业场合有专业名字,比如射频卡(门禁卡、校园卡),标签(商品标签)等。

阅读器也可以叫读/写器、基站等(都不准确,但遇到这些把他们当作阅读器)

耦合:指天线(阅读器)和标签(应答器)之间的电磁相互作用。

当一个 RFID 标签进入天线的工作范围内时,天线会向空间发射一定频率的电磁波,这些电磁波会被标签接收并利用它们来传输数据。当电磁波通过标签的天线时,它会激发标签中的电路并产生一个反馈信号,这个信号会被读取器天线接收并解码。这种相互作用被称为耦合。

读写器(阅读器)则是RFID系统中控制天线工作的设备,通常由计算机或嵌入式系统控制。读写器向天线提供能量和命令,并从天线接收标签返回的数据。在RFID系统中,读写器是与计算机或嵌入式系统交互的主要方式,可以通过它来实现对标签的管理和控制。

这里请注意,阅读器不是标签,但是为了方便理解耦合,我们可以理解为阅读器和应答器之间的相互作用,毕竟我们这里只是学习了解,不是专门进入这个领域。

2.耦合方式

RFID主要可以分为电感耦合方式(磁耦合)与反向散射耦合方式(电磁场耦合)两大类。

电感耦合方式:

  • 1.射频载波频率fc (工作频率)为13.56MHz或者小于135kHz的频段
  • 2.应答器与阅读器的工作距离在1m以下
  • 3.应答器几乎是无源的,能量(电源)从阅读器获得
  • 4.应答器向阅读器数据传输方法:负载调制
  • 5.阅读器向应答器数据传输方法:多种数字调制,通常指的是幅移键控(ASK)
  • 6.方式的变形:1)时序方式 2)扫频法 3)分频信号检测法

反向散射耦合方式:

  • 1.声表面波器件(ASW)以压电效应和与表面弹性相关的低速传播的声波为依据。
  • 2.方式变形:谐波检测法

3.应答器分类

  • 无源应答器:不附有电池 ,从阅读器发出射频能量中提取工作所需的电能。采用电感耦合方式的应答器多为无源应答器。
  • 半无源应答器 :内装有电池,起辅助作用,对维持数据的电路供电或对应答器芯片工作所需的电压作辅助支持,用于传输通信的射频能量源自阅读器。
  • 有源应答器:工作电源完全由内部电池供给,同时内部电池能量也部分地转换为应答器与阅读器通信所需的射频能量。

二.条码原理

1.说明

什么条码的概念就不说了,我们的目的是学会人为读取条形码即可。

本部分参考原文链接:条码原文

2.条码位数

  • 条形码一共有13位

  • 前2位或者前3位称为前缀,表示国家、地区或者某种特定的商品类型

  • 中国区条形码开头:690~699

  • 图书类条形码开头:978~979

  • 前缀后的4位或者5位称为厂商代码,表示产品制造商

  • 厂商代码后5位称为商品代码,表示具体的商品项目

  • 最后1位是校验码,根据前12位计算而出,可以用来防伪以及识别校验

3.条形码编码说明

条形码一共有8个区域:左侧空白区->起始符->左侧数据符->中间分隔符->右侧数据符->校验符->终止符->右侧空白区

  • 字符为0~9
  • 除空白区外的区域和字符都采用二进制编码表示,1表示bar(黑条),0表示space(白条)
  • 起始符,终止符编码为101,分隔符编码为01010
  • 0~9每种字符有3种编码方式,AB为左侧数据奇偶编码,C为右侧数据偶编码

  • 左侧数据的奇偶性由前置符决定

4.其他解码方式

以宽度为编码,去掉起始码,终止码,中间分隔码,不管白条还是黑条都算一个编码,最窄一节为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

5.校验码的计算方法

以下图所示的条形码举例说明:

  • 条形码的位数起始位为最右一位,即校验位,检验码计算方法如下:

  • 偶位数数值相加乘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.基础理解

  • 1.数据与信号(这个不想说了,太简单了)
  • 2.数字信号和模拟信号(单片机玩过没,玩过就知道了)
  • 3.输介质:传输介质是数据传输系统里发送器和接收器之间的物理通路。
  • 4.延迟变形:参考课本P63
  • 5.多径效应:无线信号通过直射、折射、反射等不同路径到达同一点时因信号叠加或相互抵消产生多经效应。(大学物理中应该接触过)

2.通信原理部分

  • 1.在数字通信中,一个数字脉冲称为一个码元。如字母A的ASCII码是01000001,可用7个脉冲来表示,亦可认为由7个码元组成,码元携带的信息量由码元的离散值个数决定。
  • 2.码元传输速率简称传码率,又称符号速率等。它表示单位时间内传输码元的数目,单位是波特 ,记为B。这是为了纪念电报码的发明者法国人波特(Baudot),故码元传输速率也称为波特率。
  • 3.对在给定条件,给定通信路径或信道上的数据传输速率称为信道容量。
  • 数据传输速率=码元传输速率×log2M

  • 信道的最大容量C为C=2BW log2M

  • 带宽受限且有高斯白噪声干扰的信道最大容量 C= BW log2(1+S/N)

这一部分通信原理里面涉及到,计算机网络里也有。

3.作业1的题目

作业1:曼切斯特编码碰撞检测的方法

曼切斯特编码数字“0”前半周期为低电平,后半周期为高电平,数字“1”前半周期为高电平,后半周期为低电平表示,因此,0,1组成的数字信号不可能出现连续3个半周期为高或低电平,如果出现连续3个半周期为高或低电平,那么,可以判断一个碰撞发生了。

作业2:RFID多标签识别时,碰撞是如何发生

当一个阅读器同时读多个RFID标签的信息,标签随机选择一个时间片和阅读器通信(时分多路访问机制),当两个以上标签同时和标签发生通信时,碰撞发生,通过曼切斯特碰撞检测方法阅读器就可以知道碰撞发生了。

4.补充

曼彻斯特编码:看中间突变,上升沿为0,下降沿为1。

本学期的第一个实验就是曼彻斯特编码的防冲突算法,老师说了,几乎所有的题都围绕几个实验来设计,那么实验的原理是重点,就看平时你的实验怎么完成的了,实验部分我放在最后面单独写。

四.二维码的原理

1.说明

具体的二维码原理不需要知道,我们只需要像了解条形码一样,去了解它的结构就行了,并学会用python编写生成和识别二维码,这是大题里面的送分题,记住代码,生成加识别代码就几行。

2.QR码特点

1.存储大容量信息

  • 传统的条形码只能处理20位左右的信息量,与此相比,QR码可处理条形码的几十倍到几百倍的信息量。

  • 支持所有类型的数据。(如:数字、英文字母、日文字母、汉字、符号、二进制、控制码等)。

2.在小空间内打印

  • QR码使用纵向和横向两个方向处理数据
  • 如果是相同的信息量,QR码所占空间为条形码的十分之一左右。

3.纠错功能

  • 即使部分编码变脏或破损,也可以恢复数据。

    数据恢复以码字为单位(是组成内部数据的单位,在QR码的情况下,每8比特代表1码字),最多可以纠错约30%

QR码的纠错功能原理

是通过将RS编码附加到原数据中的方式实现的,由于RS编码的存在,即使在QR码中出现一定数量的像素损坏或丢失,也能够通过纠错机制来保证数据的完整性和准确性。
因此,在不同的纠错等级下,QR码所能存储的真实数据容量并没有太大差异。RS编码提供了一定的冗余,增强了QR码的容错性等级选择。

3.python需要安装的包

  • pip install opencv-python #cv2

  • pip install pillow #(anaconda3 已安装)

  • pip install myqr

  • pip install qrcode

  • pip install zxing

4.读取顺序

  • 1.定位:使用下方的三个大框、一个小框和两个横条

  • 2.了解编码的基本信息:下面红色区域部分

  • 3.纠错和实际数据:其余部分

  • 4.黄色是纠错区域,随着纠错等级增加,可存储区域减小

    在不同的纠错等级下,QR码所能存储的真实数据容量并没有太大差异

    存储数据较多时,可以选择较低的纠错等级

  • 5.为了避免出现大规模的黑和白,所以可以使用掩码操作

5.源码1:二维码的生成

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")

结果:

在这里插入图片描述

6.源码2:二维码的识别

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)

五.其他部分

1.M1卡存取识别

参考链接

这篇文章有点长,耐心看完,老师根据这个来出题。

2.arduino读写RFID

参考链接

 #include <SPI.h>      //include the SPI bus library
 #include <MFRC522.h>  //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("");
 }
 

六.实验参考

由于实验涉及相当多,平时大部分实验也几乎独立完成并写了博客,针对每个实验我给出参考链接,复习看一遍就完事了。

猜你喜欢

转载自blog.csdn.net/weixin_51496226/article/details/131215218