- 浏览: 377424 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
Kitty19872010:
在书《Principles of Concurrent and ...
Java中的volatile关键字 -
奇林醉:
受用了!
JAVA Clone机制 -
guji528:
对result type做了详细描述,好。
struts2 strus.xml中result类型及含义 -
water84222:
dc444 写道为了回帖还做了个测验,真麻烦。
楼主对vol ...
Java中的volatile关键字 -
dc444:
为了回帖还做了个测验,真麻烦。
楼主对volatile是有一 ...
Java中的volatile关键字
第一次使用htmlparser到现在已经有4个月了。现在想整理一下,备忘。
package epson; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.Tag; import org.htmlparser.filters.AndFilter; import org.htmlparser.filters.HasAttributeFilter; import org.htmlparser.filters.NodeClassFilter; import org.htmlparser.filters.OrFilter; import org.htmlparser.filters.TagNameFilter; import org.htmlparser.tags.BodyTag; import org.htmlparser.tags.HeadTag; import org.htmlparser.tags.ImageTag; import org.htmlparser.tags.MetaTag; import org.htmlparser.tags.TableColumn; import org.htmlparser.tags.TableRow; import org.htmlparser.tags.TableTag; import org.htmlparser.tags.TitleTag; import org.htmlparser.util.NodeList; import org.htmlparser.util.ParserException; import org.htmlparser.util.SimpleNodeIterator; import org.htmlparser.visitors.TextExtractingVisitor; public class HtmlAnalysis { /** * @param args */ private String metaDataString; private String title; private String charset; private String contentType; private String content; private String link; private String localPath ; private Parser parser = null; private String htmlsource=null; public static final String META_KEYWORDS="keywords"; public static final String META_AUTHOR="author"; public static final String META_DESCRIPTION="description"; public static final String META_HTTP_EQUIV="http-equiv"; public HtmlAnalysis(String htmlsource){ this.htmlsource = htmlsource; } public HtmlAnalysis(File htmlsource){ try{ String resource = this.getContentByLocalFile(htmlsource); this.htmlsource = resource; }catch(Exception e){ } } public void init() throws Exception{ try{ parser = new Parser(this.htmlsource); }catch(Exception e){ throw e; } } public String getMetaKeywords(){ String metaKeywords = ""; try { NodeFilter nt = new NodeClassFilter(MetaTag.class) ; NodeList nodeList = parser.parse(nt); for (int i = 0 ; i< nodeList.size(); i++) { MetaTag mt =(MetaTag) nodeList.elementAt(i) ; String cont = mt.getAttribute("name") ; if (cont!=null && cont.equalsIgnoreCase("Keywords")) { metaKeywords = mt.getAttribute("content"); break; } } } catch (ParserException e) { e.printStackTrace(); } return metaKeywords; } public String getTitle() { String title=""; try { NodeFilter nt = new NodeClassFilter(TitleTag.class) ; NodeList nodeList = parser.parse(nt); for (int i = 0 ; i< nodeList.size(); i++) { TitleTag titlenode = (TitleTag) nodeList.elementAt(i) ; title = titlenode.getTitle(); break; } } catch (ParserException e) { e.printStackTrace(); } return title; } public String getBody() { String body=""; try { NodeFilter nt = new NodeClassFilter(BodyTag.class) ; NodeList nodeList = parser.parse(nt); for (int i = 0 ; i< nodeList.size(); i++) { BodyTag bodynode = (BodyTag) nodeList.elementAt(i) ; body = bodynode.getChildrenHTML(); break; } } catch (ParserException e) { e.printStackTrace(); } return body; } public String getBodyOnload() { String bodyonload=""; try { NodeFilter nt = new NodeClassFilter(BodyTag.class) ; NodeList nodeList = parser.parse(nt); for (int i = 0 ; i< nodeList.size(); i++) { BodyTag bodynode = (BodyTag) nodeList.elementAt(i) ; bodyonload = bodynode.getAttribute("onload"); break; } } catch (ParserException e) { e.printStackTrace(); } return bodyonload; } public String getHeadInfo() { String head=""; try { NodeFilter nt = new NodeClassFilter(HeadTag.class) ; NodeList nodeList = parser.parse(nt); HeadTag headnode = null; for (int i = 0 ; i< nodeList.size(); i++) { headnode = (HeadTag) nodeList.elementAt(i) ; break; } if(headnode !=null){ SimpleNodeIterator tag = headnode.children(); int i=0; while(tag.hasMoreNodes()){ Node node =tag.nextNode(); if((node instanceof MetaTag) || node instanceof TitleTag){ headnode.removeChild(i); } i++; } } head = headnode.getChildrenHTML(); } catch (ParserException e) { e.printStackTrace(); } return head; } public String getMetaInfo(String keytype){ String metaInfo = ""; try { NodeFilter nt = new NodeClassFilter(MetaTag.class) ; NodeList nodeList = parser.parse(nt); if(META_KEYWORDS.equalsIgnoreCase(keytype) || META_AUTHOR.equalsIgnoreCase(keytype) || META_DESCRIPTION.equalsIgnoreCase(keytype)) { for (int i = 0 ; i< nodeList.size(); i++) { MetaTag mt =(MetaTag) nodeList.elementAt(i) ; String cont = mt.getAttribute("name") ; if (cont!=null && cont.equalsIgnoreCase(keytype)) { metaInfo = mt.getAttribute("content"); break; } } }else if(META_HTTP_EQUIV.equals(keytype)){ for (int i = 0 ; i< nodeList.size(); i++) { MetaTag mt =(MetaTag) nodeList.elementAt(i) ; String cont = mt.getAttribute("http-equiv") ; if (cont!=null && cont.equalsIgnoreCase(keytype)) { metaInfo = mt.getAttribute("content"); break; } } }else{ for (int i = 0 ; i< nodeList.size(); i++) { MetaTag mt =(MetaTag) nodeList.elementAt(i) ; String cont = mt.getAttribute("name") ; if (cont!=null) { if(META_KEYWORDS.equalsIgnoreCase(cont) || META_AUTHOR.equalsIgnoreCase(cont) || META_DESCRIPTION.equalsIgnoreCase(cont)){ // }else{ String tempmetaInfo = mt.getAttribute("content"); metaInfo +="<"+cont+">"+tempmetaInfo+"</"+cont+">"; } } } } } catch (ParserException e) { e.printStackTrace(); } return metaInfo; } public String getContentByLocalFile (File path) throws IOException { StringBuffer sbStr = new StringBuffer(); BufferedReader reader = null ; String result = null ; try { reader = new BufferedReader(new FileReader(path)); } catch (FileNotFoundException e) { e.printStackTrace(); } String temp = ""; while((temp=reader.readLine())!=null) { sbStr.append(temp); sbStr.append("\r\n"); } reader.close(); result = sbStr.toString(); return result ; } public String getContentByUrl(String url){ return null ; } public void getmetaDataByVistor() { } public String getURLContent(String Url) { Parser parser = null; try { parser = new Parser(Url); String a=""; parser = new Parser(a); TextExtractingVisitor visitor = new TextExtractingVisitor(); parser.visitAllNodesWith(visitor); content = visitor.getExtractedText(); } catch (ParserException e1) { e1.printStackTrace(); } return content; } public NodeList getDiv(){ NodeList nodelist=null; NodeFilter[] nodeFilter=new NodeFilter[2]; try{ parser.setEncoding("GB2312");//set encode TagNameFilter divFilter=new TagNameFilter("div");//get the table content HasAttributeFilter divAttribute=new HasAttributeFilter("id","Cont_13");//hava the attribute "bgcolor" nodeFilter[0]=divFilter; nodeFilter[1]=divAttribute; AndFilter andFilter=new AndFilter(nodeFilter);//to link the three filter that above together nodelist=parser.extractAllNodesThatMatch(andFilter);//get the result that fit for the filter }catch(Exception e){ e.printStackTrace(); } return nodelist; } public NodeList getTable() throws ParserException{ NodeList nodelist=null; String dd = getDiv().toHtml(); Parser parser2 = new Parser(dd); TagNameFilter tableFilter=new TagNameFilter("table"); nodelist = parser2.extractAllNodesThatMatch(tableFilter); String htmlresult =""; for (int i = 0; i <= nodelist.size(); i++) { if (nodelist.elementAt(i) instanceof TableTag) { TableTag tag = (TableTag) nodelist.elementAt(i); TableRow[] rows = tag.getRows(); for (int j = 0; j < rows.length; j++) { TableRow tr = (TableRow) rows[j]; TableColumn[] td = tr.getColumns(); for (int k = 0; k < td.length; k++) { String result = td[k].toPlainTextString().trim().replace("\t", ""); if(k==0){ htmlresult += "<title>"+result+"</title>"; } else htmlresult += "<id>"+result+"</id>"; } } } } System.out.println(htmlresult); return nodelist; } public void testTable() { // Parser myParser; NodeList nodeList = null; // myParser = Parser.createParser("<body> " + "<table id=’table1′ >" // + "<tr><td>1-11</td><td>1-12</td><td>1-13</td>" // + "<tr><td>1-21</td><td>1-22</td><td>1-23</td>" // + "<tr><td>1-31</td><td>1-32</td><td>1-33</td></table>" // + "<table id=’table2′ >" // + "<tr><td>2-11</td><td>2-12</td><td>2-13</td>" // + "<tr><td>2-21</td><td>2-22</td><td>2-23</td>" // + "<tr><td>2-31</td><td>2-32</td><td>2-33</td></table>" // + "</body>", "GBK"); NodeFilter tableFilter = new NodeClassFilter(TableTag.class); OrFilter lastFilter = new OrFilter(); lastFilter.setPredicates(new NodeFilter[] { tableFilter }); try { nodeList = parser.parse(lastFilter); for (int i = 0; i <= nodeList.size(); i++) { if (nodeList.elementAt(i) instanceof TableTag) { TableTag tag = (TableTag) nodeList.elementAt(i); TableRow[] rows = tag.getRows(); for (int j = 0; j < rows.length; j++) { TableRow tr = (TableRow) rows[j]; TableColumn[] td = tr.getColumns(); for (int k = 0; k < td.length; k++) { System.out.println("<td>" + td[k].toPlainTextString()); } } } } } catch (ParserException e) { e.printStackTrace(); } } public String getImg() { String img=""; ImageTag imgnode=null; File file = new File("e:\\test\\jsp\\jsp\\test1.htm"); String imgRealPath=""; if(file.exists()) { file.delete(); try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } }else{ try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); // TODO Auto-generated catch block } } try { NodeFilter nt = new NodeClassFilter(ImageTag.class) ; //BufferedWriter writer = new BufferedWriter(new OutputStreamWriter (new FileOutputStream (file))); NodeList nodeList = parser.parse(nt); for (int i = 0 ; i< nodeList.size(); i++){ int num=0; imgnode = (ImageTag)nodeList.elementAt(i); img = imgnode.getImageURL(); System.out.println(img); /* String[] filePath = file.getParent().split("\\\\"); String[] imgPath = img.split("/"); System.out.println(img+" "+file.getParent()); for(int j=0;j<imgPath.length;j++) { if(imgPath[j].equals("..")) { num++; } } System.out.println(img.indexOf(":")+"img.indexOf(:)"+img); if(img.indexOf(":")!=-1) { imgRealPath=img; } else if(num>1) { System.out.println("img before replace"+img); img = img.replace("../",""); System.out.println("img num>1"+img+num); imgRealPath = filePath[filePath.length-1-num]+"/"+img; while((filePath.length-1-num)>0) { num++; imgRealPath = filePath[filePath.length-1-num]+imgRealPath; } System.out.println("imgRealPath"+imgRealPath+(filePath.length-1-num)); } else if(imgPath[0].equals(".")) { System.out.println(file.getParent()+"imgPath[0].equals(.)"); img = img.replace("./",""); imgRealPath=file.getParent()+"\\"+img; } else { for(int j=0;j<imgPath.length;j++) { if(imgPath[j].equals("..")) { imgPath[j] = (String)( imgPath[j].replace("..",filePath[j+1])); System.out.println(imgPath[j]); } if(!imgPath[j].equals("")) imgRealPath += "/"+imgPath[j]; } imgRealPath=filePath[0]+imgRealPath; } imgRealPath = imgRealPath.replaceAll("\\\\","/"); imgnode.setImageURL(imgRealPath); imgRealPath=""; writer.write(imgnode.toHtml()); */ } //writer.flush(); // writer.close (); } catch (Exception e) { e.printStackTrace(); } return imgRealPath; } public static void main(String[] args) { HtmlAnalysis htmlAnalysis= new HtmlAnalysis(new File("f:\\test.html")); try{ htmlAnalysis.init(); // System.out.println(htmlAnalysis.getMetaInfo("keywords")); // htmlAnalysis.parser.reset(); // System.out.println(htmlAnalysis.getMetaInfo("author")); // htmlAnalysis.parser.reset(); // System.out.println(htmlAnalysis.getMetaInfo("description")); // htmlAnalysis.parser.reset(); // System.out.println(htmlAnalysis.getMetaInfo("other")); // htmlAnalysis.parser.reset(); //System.out.println(htmlAnalysis.getTitle()); //htmlAnalysis.parser.reset(); //System.out.println(htmlAnalysis.getHeadInfo()); htmlAnalysis.getTable(); // htmlAnalysis.testTable(); }catch(Exception e){ } } public static void visitTag(Tag tag) { if (tag.getAttribute("class") != null) { System.out.println(" " + tag.getTagName() + tag.getAttribute("class")); } } public String getCharset() { return charset; } public void setCharset(String charset) { this.charset = charset; } public String getContentType() { return contentType; } public void setContentType(String contentType) { this.contentType = contentType; } public String getMetaDataString() { return metaDataString; } public void setMetaDataString(String metaDataString) { this.metaDataString = metaDataString; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
评论
1 楼
menglinxi
2009-09-29
org.htmlparser 似乎不能对域名中包含特殊字符的连接进行抓取:如http://www.oj-sz.com,会出现
org.htmlparser.util.ParserException: Exception getting input stream from http://www.oj-sz.com/ (Not in GZIP format).;
java.io.IOException: Not in GZIP format。
org.htmlparser.util.ParserException: Exception getting input stream from http://www.oj-sz.com/ (Not in GZIP format).;
java.io.IOException: Not in GZIP format。
发表评论
-
Hibernate优化
2012-07-13 13:37 0http://chengguo-a.iteye.co ... -
Session IllegalStateException
2010-06-15 14:56 1364request.getSession(); 出现Illega ... -
JSP页面缓存设置及其它
2008-11-24 13:36 1344转自:http://gghhgame51333.blog.51 ... -
java与excell,xml交互
2008-11-24 11:27 1000利用poi处理java与excell交互。poi也可以处 ... -
prototype.js开发笔记
2008-11-19 10:09 998Table of Contents 1. Programm ... -
jar打包成exe工具
2008-11-12 14:49 2844具体使用,参照压缩包中的readme.txt。很简单没什么 ... -
htc文件的简单介绍
2008-11-03 09:55 1187从5.5版本开始,Internet Explorer(IE)开 ... -
LightBox
2008-10-31 15:08 1347Lightbox的效果类似于WinXP操作系统的注销/关 ... -
google map
2008-08-28 11:00 1388前一段时间项目中使用了google map。在这里记下简单的使 ... -
使用 JFreeChart来创建基于web的图表
2008-08-19 15:32 1124转载于http://www.ibm.com/developer ... -
静态页面的生成
2008-08-15 10:17 1027没有时间了,有时间再写 -
待补充
2008-08-14 17:27 2615java实现rss文件的订阅 -
ajax实现的动态展开
2008-08-14 17:26 1326test.jsp <!DOCTYPE html PU ... -
httpclient应用
2008-08-14 17:12 2156import java.io.BufferedReader ... -
Tree的实现,js开发组件dtree
2008-08-14 16:36 2123jsp <% StringBuffer tree ... -
FileUpload文件上传组件与java.util.zip解压缩类
2008-08-14 15:54 3984使用总结 /** *要完成的功能,从页面上传zip文件及若干 ... -
利用过滤器实现request的编码转换
2008-01-16 15:42 2111关于Filter接口: 创建Filter必须实现javax.s ... -
JSP分页技术实现 使用工具类实现通用分页处理
2008-01-16 15:39 2744目前比较广泛使用的分页方式是将查询结果缓存在HttpSessi ... -
一段生成验证码图片的程序
2008-01-16 15:38 1080package test; import java.awt. ...
相关推荐
下载了几个抓包的jar包,httpClient和htmlParase包,以及连个淘宝包
Ubuntu命令技巧手册》是专为Ubuntu用户设计的一份实用指南,它涵盖了广泛的操作系统管理、文件处理、网络通信及系统维护等方面的命令行操作技巧。Ubuntu是一个基于Debian的开源Linux发行版,以其用户友好性和强大的命令行工具而受到全球开发者和用户的喜爱。通过熟练掌握这些命令技巧,用户可以更高效地在Ubuntu环境中工作。 手册首先会介绍Ubuntu的基本概念,包括终端的使用和命令行的基本语法。在Linux系统中,终端是执行各种系统级任务的核心工具,用户可以通过键盘输入命令来执行操作,而无需图形化界面。掌握如何打开终端(如通过快捷键Ctrl+Alt+T)以及基本的命令行导航(如cd、ls、pwd)是使用Ubuntu的第一步。 文件和目录管理是Ubuntu命令行中的重要部分。例如,`mkdir`用于创建新目录,`touch`用于创建新文件,`cp`和`mv`分别用于复制和移动文件或目录,而`rm`则用于删除。了解这些命令的选项,如递归操作(-r)和强制删除(-f),能帮助用户更灵活地管理文件系统。
Stylus是一款能改变网站样式的样式管理器(谷歌浏览器插件)
springboot项目基于Spring与Vue的疫情居家检测管理系统的设计与实现代码,含有完整的源码和报告文档
文本框说明文字循环PPT模板
图表分类ppt
Linear Algebra and Its Applications - 5th Edition - David C. Lay《线性代数及其应用》 能复制。英文版本。
MATLAB环境下一种自适应Chirp模态分解方法。 算法运行环境为Matlab r2018a,可用于一维时间序列分解,时频分析,故障诊断,特征提取等。 算法可迁移至金融时间序列,地震 微震信号,机械振动信号,声发射信号,电压 电流信号,语音信号,声信号,生理信号(ECG,EEG,EMG)等一维时间序列信号。 压缩包=程序+数据+参考。
信捷PLC程序 信捷XDM系列PLC程序,信捷触摸屏程序 双轴圆弧插补三轴画圆程序
项目资源包含:可运行源码+sql文件+文档 源码都是精心调试,有文档,可以部署,有费用,谢谢支持。 适用人群:学习不同技术领域的小白或进阶学习者;可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 项目具有较高的学习借鉴价值,也可拿来修改、二次开发。 有任何使用上的问题,欢迎随时与博主沟通,博主看到后会第一时间及时解答。 开发语言:Java 框架:SpringBoot 技术:Vue JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 系统是一个很好的项目,结合了后端服务(SpringBoot)和前端用户界面(Vue.js)技术,实现了前后端分离。
资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立
基于单目视觉原理,研究目标图像的预处理、识别、定位方法与测距模型,设计实现一个目标识别与定位测距原型系统。_MonocularVisionRanging
基于留出法、k折交叉验证和留一法的多种机器学习模型对比(用于分类)MATLAB程序:代码中共包含决策树(DT)、判别分析(DA)、集成树(ET)、高斯混合模型(GMM)、k近邻(KNN)、多分类支持向量机(MSVM)、支持向量机(SVM)、随机森林(RF)八种机器学习模型,可以任意选择,分别用留出法、k折交叉验证和留一法进行分类效果对比。 代码注释清楚。 main为主程序,读取EXCEL数据。 很方便,容易上手。 温馨提示:联系请考虑是否需要,程序代码,一经出,概不 。
SPOTIFY - Culture Next Report_CAIG
项目资源包含:可运行源码+sql文件+ 源码都是精心调试,,可以部署,有费用,谢谢支持。 适用人群:学习不同技术领域的小白或进阶学习者;可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 项目具有较高的学习借鉴价值,也可拿来修改、二次开发。 有任何使用上的问题,欢迎随时与博主沟通,博主看到后会第一时间及时解答。 开发语言:Java 框架:SpringBoot 技术:Vue JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 系统是一个很好的项目,结合了后端服务(SpringBoot)和前端用户界面(Vue.js)技术,实现了前后端分离。
springboot项目基于Web的课程设计选题管理系统,含有完整的源码和报告文档
ThinkPHP是一个高性能且功能完备的轻量级PHP开发框架,具备众多原创特性,并秉持“大道至简”的开发理念,致力于以最少的代码实现更多功能,旨在简化并加速WEB应用的开发流程。自1.*版本起,该框架便不再兼容PHP4,从而使其架构与实现更为灵活与简洁。2.0版本在前序版本的基础上,经过全面重构与持续优化,达到了新的高度,满足企业级与门户级开发的标准。 以下是ThinkPHP相关文档的列表: - ThinkPHP 2.0 Q&A.chm - ThinkPHP-2.0-API.chm - ThinkPHP2.0完全开发手册.chm - ThinkPHP2.0开发技巧.chm - ThinkPHP2.1 RBAC使用和示例操作.chm - ThinkPHP2.1 完全开发手册.chm - ThinkPHP2.1 常见问题&开发技巧.chm - ThinkPHP2.1 自定义标签示例说明.chm
无人机VESC7500,低压伺服keil源码,可以无感,霍尔单馈,正余弦,ABZ等多种反馈信号,是用非线性磁链观测器,高频注入等多种算法于一身,上位机源码,原理图。 没有PCB 最大电流300A,是学习不错的资料。
基于51单片机的测速码表仿真 包含以下资料: - keil程序源码带注释 - protus仿真文件 - AD版本原理图 - AD版本PCB - 所用软件安装包
===如资源质量问题,可半价退款,代下全网资源,价格公道==== 在通信系统的研究与设计中,信道建模是至关重要的一步。瑞利信道作为无线通信中最常见的信道模型之一,模拟了多径衰落的环境,尤其适用于城市微波通信和室内环境。本篇文章将深入探讨“matlab瑞利信道仿真程序”的相关知识点,包括瑞利信道的基本概念、2-径模型、指数路径损耗模型以及如何使用MATLAB进行仿真。 瑞利信道是基于多径传播的统计模型,其中信号经过多个反射和折射路径到达接收端,导致信号强度呈现随机波动。这种信道模型的特点是具有平坦频率衰落,即所有频率成分的衰落是同步的。在瑞利信道中,信号通常由多个独立的路径组成,每个路径都有不同的延迟和衰减,形成所谓的多径分量。 在给定的描述中,`plot_2ray_exp_model.m` 文件似乎使用了一个2-径模型来模拟瑞利信道。2-径模型是最简单的瑞利信道模型,假设信号经过两个主要路径到达接收器。这两个路径通常代表直射路径和一个反射路径,它们之间的相位差是随机的,导致接收信号的幅度随机变化。 指数路径损耗模型(即exp_PDP)是信道模型的一部分。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。