【物联网感知技术】:RFID编码的实现
2015-09-18 14:03
489 查看
背景知识
关于各种编码的问题: RFID编码有很多种吧,这里选取部分来写
反向不归零码 遇到1保持,遇到0变化
差动码 遇到1变化,遇到0保持
曼彻斯特编码
在半个比特(bit)周期时的下降沿表示二进制“1”,半个比特周期时的上升沿表示二进制“0”
也被称作分相编码(Split-Phase Coding) 助记为:1下降沿 0上升沿
单极性归零码 在曼彻斯特码的基础上 ,0变作保持
米勒码 在曼彻斯特码的基础上,遇见1就变,遇到0不动
做题及实现思路
反向不归零码 和 差动码 都是画: ~~ 或者 __ ~~代表上面那条横线 __代表下面那条横线
曼彻斯特码 单极性归零码 米勒码 都是 画 ~|_ _|~类似于这种
基本构件知道了,我们只需要按照一定的编程规则就把这些构件联系起来就可以了~ (建议自己动脑想想,我给出了代码,可以参考)
代码
关于各种编码的问题: RFID编码有很多种吧,这里选取部分来写
反向不归零码 遇到1保持,遇到0变化
差动码 遇到1变化,遇到0保持
曼彻斯特编码
在半个比特(bit)周期时的下降沿表示二进制“1”,半个比特周期时的上升沿表示二进制“0”
也被称作分相编码(Split-Phase Coding) 助记为:1下降沿 0上升沿
单极性归零码 在曼彻斯特码的基础上 ,0变作保持
米勒码 在曼彻斯特码的基础上,遇见1就变,遇到0不动
做题及实现思路
反向不归零码 和 差动码 都是画: ~~ 或者 __ ~~代表上面那条横线 __代表下面那条横线
曼彻斯特码 单极性归零码 米勒码 都是 画 ~|_ _|~类似于这种
基本构件知道了,我们只需要按照一定的编程规则就把这些构件联系起来就可以了~ (建议自己动脑想想,我给出了代码,可以参考)
代码
/////////////////////////////////////// 图的转换 #include <iostream> #include <string> using namespace std; string s; void OriginPic(string s){ //原图 // cout<<"原图"<<endl<<endl; cout<<"_"; if(s[0]-'0'==1) cout<<"|~~"; //关于char型转换为数字的技巧 else cout<<"__"; for(int i=1;i<s.length();i++){ if(s[i]==s[i-1]){ if(s[i-1]-'0'==1){ cout<<"~~"; } else cout<<"__"; } if(s[i]!=s[i-1]){ if(s[i-1]-'0'==1) cout<<"|__"; else cout<<"|~~"; } } } void Fanxiang(string s){ //反向不归零码 string temp,k="~~",t="__"; cout<<"~"; if(s[0]-'0'==1){ cout<<k;temp = k; } if(s[0]-'0'==0){cout<<"|"<<t;temp=t;} for(int i=1;i<s.length();i++){ if(s[i]-'0'==1) cout<<temp; if(s[i]-'0'==0){ cout<<"|"; if(temp==k){ cout<<t; temp =t;} else {cout<<k; temp = k;} } } } void Manche(string s){ //曼彻斯特码 string k="~|_",t="_|~"; cout<<"-"; if(s[0]-'0'==1) cout<<k; //初始化 else cout<<t; for(int i=1;i<s.length();i++){ if(s[i]==s[i-1]){ cout<<"|"; if(s[i]-'0'==1) cout<<k; else cout<<t; } else{ if(s[i]-'0'==1) cout<<k; else cout<<t; } } } void unipolar(string s){ //单极性归零编码 ,比满切斯特编码又简单了一些 string k="~|_",t="__"; cout<<"-"; if(s[0]-'0'==1) cout<<k; else cout<<t; for(int i=1;i<s.length();i++){ if(s[i]-'0'==1) cout<<"|"<<k; else cout<<t; } } void miler(string s){ //米勒编码有问题 string k="~|_",t="_|~",m="__",temp; //temp用来记录状态 cout<<"-"; if(s[0]-'0'==0){ cout<<m; temp=m;} else {cout<<k; temp=k;} for(int i=1;i<s.length();i++){ if(s[i-1]-'0'==0 && s[i]-'0'==1){ cout<<t; temp =t; } if(s[i-1]-'0'==0 && s[i]-'0'==0){ cout<<m; } if(s[i-1]-'0'==1 && s[i]-'0'==1){ if(temp==k){ cout<<t; temp =t; } else{ cout<<k; temp = k; } } if(s[i-1]-'0'==1 && s[i]-'0'==0){ if(temp==t){ cout<<"~~"; //保持不变 } else{ cout<<m; } } } } void chadong(string s){ //差动码 string temp,k="~~",t="__"; cout<<"~"; // 差动码默认初次是高电平 if(s[0]-'0'==1){cout<<"|"<<t;temp=t;} else {cout<<k;temp = k;} for(int i=1;i<s.length();i++){ if(s[i]-'0'==1){ if(temp==k){ cout<<"|"<<t; temp =t; } else { cout<<"|"<<k; temp = k; } } else{ cout<<temp; } } } void main(){ //每个0用两个下划线表示,每个1用两个~~表示 cin>>s; cout<<endl<<"原图为:"<<endl; OriginPic(s); cout<<endl<<endl<<"反向不归0码为:"<<endl; Fanxiang(s); cout<<endl<<endl<<"曼彻斯特码为:"<<endl; Manche(s); cout<<endl<<endl<<"单极性归零码为:"<<endl; unipolar(s); cout<<endl<<endl<<"米勒码为:"<<endl; miler(s); cout<<endl<<endl<<"差动码为:"<<endl; chadong(s); cout<<endl; system("pause"); }
相关文章推荐
- 博通发布三款物联网芯片,实现低功耗精准定位---ECM
- 搭建ESP8266 CYG_WIN交叉编译环境
- 物联网应用——从源代码为ESP8266创建NodeMCU
- UVA 10881 Piotr's Ants
- 【物联网】QCA4010开发环境的搭建
- uva 10881 Piotr's Ants 规律
- uva 10881 Piotr's Ants 规律
- 简单拓扑发现实现过程及其物联网应用设想
- Tom's Classes
- 物联网的媒介——java usb串口通信
- 一步步搭建物联网系统(教你设计物联网系统)
- 物联网操作系统HelloX应用编程指南
- 物联网操作系统HelloX应用编程指南
- 物联网操作系统HelloX应用编程指南
- hdu 4609 3-idiots FFT 计数
- 物联网智能硬件解析之万能空调遥控器实现 Ardunio_通过红外线发射灯遥控空调
- 更新日期 2015年9月7日 - PoC/Pliot环境交付健康检查表
- Linux进程实时IO监控iotop命令详解
- UVA 10881 Piotr's Ants
- 物联网实践