- 浏览: 554693 次
- 性别:
- 来自: 杭州
-
文章分类
最新评论
-
wa114d:
楼主工作几年了,好厉害
一个面试官对面试问题的分析 -
wobuxiaole:
Good,非常好
30岁前男人需要完成的事 -
小逗逗:
Good,非常好
30岁前男人需要完成的事 -
invincibleLiu:
好帖,要顶!(别投我隐藏啊,这是对BBS最原始一种支持)
Java:synchronized修饰符在静态方法与非静态方法上的区别 -
fayedShih:
第三题,不知道对不对
import java.util.con ...
企业牛逼面试题目 高手进来讨论答题
做Java一晃就十年了,最近手痒痒,也决定跟随一下潮流,整个博客,写点东西,就算对自己的知识进行一个梳理和总结,也跟朋友们交流交流,希望能坚持下去。
先写写设计模式方面的内容吧,就是GoF的23个模式,先从大家最熟悉的工厂方法模式开始,这个最简单,明白的人多,看看是否能写出点跟别人不一样的东西,欢迎大家来热烈讨论,提出建议或意见,并进行批评指正,一概虚心接受,在此先谢过了!
另外,大家也可以说说最想看到哪个模式,那我就先写它,呵呵,大家感兴趣,我才会有动力写下去!好了,言归正传,Now Go!
工厂方法模式(Factory Method)
1 场景问题
1.1 导出数据的应用框架
考虑这样一个实际应用:实现一个导出数据的应用框架,来让客户选择数据的导出方式,并真正执行数据导出。
在一些实际的企业应用中,一个公司的系统往往分散在很多个不同的地方运行,比如各个分公司或者是门市点,公司没有建立全公司专网的实力,但是又不愿意让业务数据实时的在广域网上传递,一个是考虑数据安全的问题,一个是运行速度的问题。
这种系统通常会有一个折中的方案,那就是各个分公司内运行系统的时候是独立的,是在自己分公司的局域网内运行。然后在每天业务结束的时候,各个分公司会导出自己的业务数据,然后把业务数据打包通过网络传送给总公司,或是专人把数据送到总公司,然后由总公司进行数据导入和核算。
通常这种系统,在导出数据上,会有一些约定的方式,比如导出成:文本格式、数据库备份形式、Excel格式、Xml格式等等。
现在就来考虑实现这样一个应用框架。在继续之前,先来了解一些关于框架的知识。
1.2 框架的基础知识
(1):框架是什么
简单点说:框架就是能完成一定功能的半成品软件。
就其本质而言,框架是一个软件,而且是一个半成品的软件。所谓半成品,就是还不能完全实现用户需要的功能,框架只是实现用户需要的功能的一部分,还需要进一步加工,才能成为一个满足用户需要的、完整的软件。因此框架级的软件,它的主要客户是开发人员,而不是最终用户。
有些朋友会想,既然框架只是个半成品,那何必要去学习和使用框架呢?学习成本也不算小,那就是因为框架能完成一定的功能,也就是这“框架已经完成的一定的功能”在吸引着开发人员,让大家投入去学习和使用框架。
(2):框架能干什么
能完成一定功能,加快应用开发进度
由于框架完成了一定的功能,而且通常是一些基础的、有难度的、通用的功能,这就避免我们在应用开发的时候完全从头开始,而是在框架已有的功能之上继续开发,也就是说会复用框架的功能,从而加快应用的开发进度。
给我们一个精良的程序架构
框架定义了应用的整体结构,包括类和对象的分割,各部分的主要责任,类和对象怎么协作,以及控制流程等等。
现在Java界大多数流行的框架,大都出自大师手笔,设计都很精良。基于这样的框架来开发,一般会遵循框架已经规划好的结构来进行开发,从而让我们开发的应用程序的结构也相对变得精良了。
(3):对框架的理解
基于框架来开发,事情还是那些事情,只是看谁做的问题
对于应用程序和框架的关系,可以用一个图来简单描述一下,如图1所示:
图1 应用程序和框架的简单关系示意图
如果没有框架,那么客户要求的所有功能都由开发人员自己来开发,没问题,同样可以实现用户要求的功能,只是开发人员的工作多点。
如果有了框架,框架本身完成了一定的功能,那么框架已有的功能,开发人员就可以不做了,开发人员只需要完成框架没有的功能,最后同样是完成客户要求的所有功能,但是开发人员的工作就减少了。
也就是说,基于框架来开发,软件要完成的功能并没有变化,还是客户要求的所有功能,也就是“事情还是那些事情”的意思。但是有了框架过后,框架完成了一部分功能,然后开发人员再完成一部分功能,最后由框架和开发人员合起来完成了整个软件的功能,也就是看这些功能“由谁做”的问题。
基于框架开发,可以不去做框架所做的事情,但是应该明白框架在干什么,以及框架是如何实现相应功能的
事实上,在实际开发中,应用程序和框架的关系,通常都不会如上面讲述的那样,分得那么清楚,更为普遍的是相互交互的,也就是应用程序做一部分工作,然后框架做一部分工作,然后应用程序再做一部分工作,然后框架再做一部分工作,如此交错,最后由应用程序和框架组合起来完成用户的功能要求。
也用个图来说明,如图2所示:
图2 应用程序和框架的关系示意图
如果把这个由应用程序和框架组合在一起构成的矩形,当作最后完成的软件。试想一下,如果你不懂框架在干什么的话,相当于框架对你来讲是个黑盒,也就是相当于在上面图2中,去掉框架的两块,会发现什么?没错,剩下的应用程序是支离破碎的,是相互分隔开来的。
这会导致一个非常致命的问题,整个应用是如何运转起来的,你是不清楚的,也就是说对你而言,项目已经失控了,从项目管理的角度来讲,这是很危险的。
因此,在基于框架开发的时候,虽然我们可以不去做框架所做的事情,但是应该搞明白框架在干什么,如果条件许可的话,还应该搞清楚框架是如何实现相应功能的,至少应该把大致的实现思路和实现步骤搞清楚,这样我们才能整体的掌控整个项目,才能尽量减少出现项目失控的情况。
(4):框架和设计模式的关系
设计模式比框架更抽象
框架已经是实现出来的软件了,虽然只是个半成品的软件,但毕竟是已经实现出来的了。而设计模式的重心还在于解决问题的方案上,也就是还停留在思想的层面。因此设计模式比框架更为抽象。
设计模式是比框架更小的体系结构元素
如上所述,框架是已经实现出来的软件,并实现了一系列的功能,因此一个框架,通常会包含多个设计模式的应用。
框架比设计模式更加特例化
框架是完成一定功能的半成品软件,也就是说,框架的目的很明确,就是要解决某一个领域的某些问题,那是很具体的功能,不同的领域实现出来的框架是不一样的。
而设计模式还停留在思想的层面,在不同的领域都可以应用,只要相应的问题适合用某个设计模式来解决。因此框架总是针对特定领域的,而设计模式更加注重从思想上,从方法上来解决问题,更加通用化。
1.3 有何问题
分析上面要实现的应用框架,不管用户选择什么样的导出格式,最后导出的都是一个文件,而且系统并不知道究竟要导出成为什么样的文件,因此应该有一个统一的接口,来描述系统最后生成的对象,并操作输出的文件。
先把导出的文件对象的接口定义出来,示例代码如下:
对于实现导出数据的业务功能对象,它应该根据需要来创建相应的ExportFileApi的实现对象,因为特定的ExportFileApi的实现是与具体的业务相关的。但是对于实现导出数据的业务功能对象而言,它并不知道应该创建哪一个ExportFileApi的实现对象,也不知道如何创建。
也就是说:对于实现导出数据的业务功能对象,它需要创建ExportFileApi的具体实例对象,但是它只知道ExportFileApi接口,而不知道其具体的实现。那该怎么办呢?
未完待续......
先写写设计模式方面的内容吧,就是GoF的23个模式,先从大家最熟悉的工厂方法模式开始,这个最简单,明白的人多,看看是否能写出点跟别人不一样的东西,欢迎大家来热烈讨论,提出建议或意见,并进行批评指正,一概虚心接受,在此先谢过了!
另外,大家也可以说说最想看到哪个模式,那我就先写它,呵呵,大家感兴趣,我才会有动力写下去!好了,言归正传,Now Go!
工厂方法模式(Factory Method)
1 场景问题
1.1 导出数据的应用框架
考虑这样一个实际应用:实现一个导出数据的应用框架,来让客户选择数据的导出方式,并真正执行数据导出。
在一些实际的企业应用中,一个公司的系统往往分散在很多个不同的地方运行,比如各个分公司或者是门市点,公司没有建立全公司专网的实力,但是又不愿意让业务数据实时的在广域网上传递,一个是考虑数据安全的问题,一个是运行速度的问题。
这种系统通常会有一个折中的方案,那就是各个分公司内运行系统的时候是独立的,是在自己分公司的局域网内运行。然后在每天业务结束的时候,各个分公司会导出自己的业务数据,然后把业务数据打包通过网络传送给总公司,或是专人把数据送到总公司,然后由总公司进行数据导入和核算。
通常这种系统,在导出数据上,会有一些约定的方式,比如导出成:文本格式、数据库备份形式、Excel格式、Xml格式等等。
现在就来考虑实现这样一个应用框架。在继续之前,先来了解一些关于框架的知识。
1.2 框架的基础知识
(1):框架是什么
简单点说:框架就是能完成一定功能的半成品软件。
就其本质而言,框架是一个软件,而且是一个半成品的软件。所谓半成品,就是还不能完全实现用户需要的功能,框架只是实现用户需要的功能的一部分,还需要进一步加工,才能成为一个满足用户需要的、完整的软件。因此框架级的软件,它的主要客户是开发人员,而不是最终用户。
有些朋友会想,既然框架只是个半成品,那何必要去学习和使用框架呢?学习成本也不算小,那就是因为框架能完成一定的功能,也就是这“框架已经完成的一定的功能”在吸引着开发人员,让大家投入去学习和使用框架。
(2):框架能干什么
能完成一定功能,加快应用开发进度
由于框架完成了一定的功能,而且通常是一些基础的、有难度的、通用的功能,这就避免我们在应用开发的时候完全从头开始,而是在框架已有的功能之上继续开发,也就是说会复用框架的功能,从而加快应用的开发进度。
给我们一个精良的程序架构
框架定义了应用的整体结构,包括类和对象的分割,各部分的主要责任,类和对象怎么协作,以及控制流程等等。
现在Java界大多数流行的框架,大都出自大师手笔,设计都很精良。基于这样的框架来开发,一般会遵循框架已经规划好的结构来进行开发,从而让我们开发的应用程序的结构也相对变得精良了。
(3):对框架的理解
基于框架来开发,事情还是那些事情,只是看谁做的问题
对于应用程序和框架的关系,可以用一个图来简单描述一下,如图1所示:

图1 应用程序和框架的简单关系示意图
如果没有框架,那么客户要求的所有功能都由开发人员自己来开发,没问题,同样可以实现用户要求的功能,只是开发人员的工作多点。
如果有了框架,框架本身完成了一定的功能,那么框架已有的功能,开发人员就可以不做了,开发人员只需要完成框架没有的功能,最后同样是完成客户要求的所有功能,但是开发人员的工作就减少了。
也就是说,基于框架来开发,软件要完成的功能并没有变化,还是客户要求的所有功能,也就是“事情还是那些事情”的意思。但是有了框架过后,框架完成了一部分功能,然后开发人员再完成一部分功能,最后由框架和开发人员合起来完成了整个软件的功能,也就是看这些功能“由谁做”的问题。
基于框架开发,可以不去做框架所做的事情,但是应该明白框架在干什么,以及框架是如何实现相应功能的
事实上,在实际开发中,应用程序和框架的关系,通常都不会如上面讲述的那样,分得那么清楚,更为普遍的是相互交互的,也就是应用程序做一部分工作,然后框架做一部分工作,然后应用程序再做一部分工作,然后框架再做一部分工作,如此交错,最后由应用程序和框架组合起来完成用户的功能要求。
也用个图来说明,如图2所示:

图2 应用程序和框架的关系示意图
如果把这个由应用程序和框架组合在一起构成的矩形,当作最后完成的软件。试想一下,如果你不懂框架在干什么的话,相当于框架对你来讲是个黑盒,也就是相当于在上面图2中,去掉框架的两块,会发现什么?没错,剩下的应用程序是支离破碎的,是相互分隔开来的。
这会导致一个非常致命的问题,整个应用是如何运转起来的,你是不清楚的,也就是说对你而言,项目已经失控了,从项目管理的角度来讲,这是很危险的。
因此,在基于框架开发的时候,虽然我们可以不去做框架所做的事情,但是应该搞明白框架在干什么,如果条件许可的话,还应该搞清楚框架是如何实现相应功能的,至少应该把大致的实现思路和实现步骤搞清楚,这样我们才能整体的掌控整个项目,才能尽量减少出现项目失控的情况。
(4):框架和设计模式的关系
设计模式比框架更抽象
框架已经是实现出来的软件了,虽然只是个半成品的软件,但毕竟是已经实现出来的了。而设计模式的重心还在于解决问题的方案上,也就是还停留在思想的层面。因此设计模式比框架更为抽象。
设计模式是比框架更小的体系结构元素
如上所述,框架是已经实现出来的软件,并实现了一系列的功能,因此一个框架,通常会包含多个设计模式的应用。
框架比设计模式更加特例化
框架是完成一定功能的半成品软件,也就是说,框架的目的很明确,就是要解决某一个领域的某些问题,那是很具体的功能,不同的领域实现出来的框架是不一样的。
而设计模式还停留在思想的层面,在不同的领域都可以应用,只要相应的问题适合用某个设计模式来解决。因此框架总是针对特定领域的,而设计模式更加注重从思想上,从方法上来解决问题,更加通用化。
1.3 有何问题
分析上面要实现的应用框架,不管用户选择什么样的导出格式,最后导出的都是一个文件,而且系统并不知道究竟要导出成为什么样的文件,因此应该有一个统一的接口,来描述系统最后生成的对象,并操作输出的文件。
先把导出的文件对象的接口定义出来,示例代码如下:
/** * 导出的文件对象的接口 */ public interface ExportFileApi { /** * 导出内容成为文件 * @param data 示意:需要保存的数据 * @return 是否导出成功 */ public boolean export(String data); }
对于实现导出数据的业务功能对象,它应该根据需要来创建相应的ExportFileApi的实现对象,因为特定的ExportFileApi的实现是与具体的业务相关的。但是对于实现导出数据的业务功能对象而言,它并不知道应该创建哪一个ExportFileApi的实现对象,也不知道如何创建。
也就是说:对于实现导出数据的业务功能对象,它需要创建ExportFileApi的具体实例对象,但是它只知道ExportFileApi接口,而不知道其具体的实现。那该怎么办呢?
未完待续......
发表评论
-
对于单例模式的一点想法
2011-03-04 11:12 955单例模式很普遍,对于S ... -
研磨设计模式之抽象工厂模式-1
2010-10-28 13:46 1040抽象工厂模式(Abstract F ... -
研磨设计模式之命令模式-1
2010-09-14 09:29 1054命令模式也是开发中常见的一个模式,也不是太难,比较简单,下面来 ... -
研磨设计模式之工厂方法模式-5
2010-09-13 14:33 10003.3 平行的类层次结构 ... -
研磨设计模式之工厂方法模式-4
2010-09-13 14:17 765... -
研磨设计模式之工厂方法模式-3
2010-09-10 17:28 9163 模式讲解 3.1 认识工厂方法模式 (1)模式的功能 ... -
研磨设计模式之工厂方法模式-2
2010-09-08 10:30 11862 解决方案 2.1 工厂方法模式来解决 ... -
设计模式学习笔记(十二)—Builder建造者模式
2008-11-13 10:25 1004Builder模式定义:将一个复杂对象的构建与它的表示分离, ... -
设计模式学习笔记(十一)—Prototype原型模式
2008-11-13 10:12 986Prototype模式的意图是: ... -
设计模式学习笔记(七)—Observer观察者模式
2008-11-13 09:47 980《设计模式》一书对Observer是这样描述的:定义对象间的一 ... -
设计模式学习笔记(六)—Decorator装饰模式
2008-11-12 17:04 930《设计模式》一书对Decorator是这样描述的: 动态地给一 ... -
设计模式学习笔记(五)—Abstract Factory抽象工厂模式
2008-11-12 16:47 952GOF《设计模式》一书对Abstract Factory模式是 ... -
设计模式学习笔记(四)—Bridge桥接模式
2008-11-12 16:40 971《设计模式》一书对Bridge是这样描述的: 将抽象与其实现解 ... -
设计模式学习笔记(三)—-Strategy策略模式
2008-11-12 16:17 1186GOF《设计模式》一书对Strategy模式是这样描述的: ... -
设计模式学习笔记(二)—-Adapter适配器模式
2008-11-12 15:50 1036GOF《设计模式》一书对Adapter模式是这样描述的: ... -
设计模式学习笔记(一)--Facade外观模式
2008-11-12 15:48 975GOF《设计模式》一书对Facade模式是这样描述的: ... -
设计模式学习笔记(十)—Factory Method模式
2008-11-12 15:25 1019《设计模式》一书对Factory Method模式是这样描述的 ... -
设计模式学习笔记(九)—Singleton模式
2008-11-12 15:22 924《设计模式》一书对Singleton模式是这样描述的:保证一个 ... -
设计模式学习笔记(八)—Template Method模式
2008-11-12 15:03 1120factory模式(包括简单工厂和抽象工厂),Strategy ...
相关推荐
研磨设计模式的过程是持续学习和实践的过程,chjavach的博客文章提供了深入探讨这些模式的宝贵资源,值得我们仔细阅读和学习。通过深入理解和运用这些设计模式,可以提升个人的编程技巧,同时也为团队合作和项目维护...
"研磨设计模式"是一本专注于介绍设计模式的博文集,作者chjavach在JavaEye社区上有较高的影响力,他的文章涵盖了设计模式的多个方面,特别是对简单工厂模式、工厂方法模式和单例模式进行了深入的探讨。 1. **简单...
《研磨设计模式_博文集》是一本由chjavach兄精心整理的关于设计模式的电子书,旨在分享他对设计模式的深入理解和实践心得。设计模式是软件工程中的一种最佳实践,是解决常见问题的经验总结,尤其在Java编程中有着...
少儿编程scratch项目源代码文件案例素材-方形跑步者.zip
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
内容概要:本文详细介绍了三菱PLC 5u与台达变频器通过Modbus RTU协议进行通讯的全过程。涵盖了硬件接线方法,确保RS-485接口正确连接;变频器参数设置,包括通讯地址、波特率、数据格式等关键参数的调整;PLC程序编写,利用Modbus RTU功能块实现数据读写;以及威纶通触摸屏程序配置,提供友好的人机交互界面。每一步骤均配有详尽解释和实例代码,确保实施过程顺畅。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC和变频器通讯有一定了解的基础用户。 使用场景及目标:适用于需要将三菱PLC 5u与台达变频器集成到同一系统中的工程项目,旨在建立稳定的通讯链路,实现高效的数据交换和远程控制。通过本文的学习,可以掌握完整的通讯解决方案,提高系统的可靠性和可控性。 其他说明:文中提供了丰富的调试技巧和常见问题解决方法,如通讯超时排查、CRC校验注意事项等,有助于快速定位并解决问题。同时附带了完整的程序包和接线图,便于实际应用。
内容概要:本文详细介绍了双向全桥CLLC拓扑的双闭环控制系统设计及其MATLAB/Simulink仿真。首先解析了CLLC拓扑结构,重点讨论了谐振腔参数(Lr、Cr、Lm)的选择和计算方法。接着阐述了双闭环控制策略,即电压外环确保稳态精度,电流内环应对动态扰动,并提供了具体的PI控制器实现代码。文中还强调了磁性元件选型的重要性,特别是变压器设计中的注意事项。最后,通过仿真验证系统的动态响应性能,展示了负载突增时的恢复时间和软开关效果。同时,作者分享了许多实用的调试技巧和避坑经验。 适合人群:从事电力电子设计的技术人员,尤其是对双向DC-DC变换器感兴趣的工程师。 使用场景及目标:适用于需要高效双向能量传输的应用场合,如储能系统、电动汽车充电设备等。目标是帮助读者掌握CLLC拓扑的设计原理和控制方法,提高系统效率和稳定性。 其他说明:文章不仅提供了详细的理论推导和公式计算,还附带了完整的MATLAB/Simulink仿真文件,便于读者进行实践操作。此外,作者针对常见问题给出了具体的解决方案,使读者能够更快地理解和应用相关技术。
内容概要:本文详细介绍了轮毂电机分布式驱动电动汽车的直接横摆力矩控制(DYC)技术及其在Matlab/Simulink中的实现。首先构建了一个7自由度的整车模型,涵盖了车身横摆、侧倾、垂跳以及四个车轮的独立旋转,确保模型能够精确模拟真实车辆行为。轮胎模型采用了魔术公式进行参数化,确保不同路况下的抓地力计算准确性。上层控制器选择了模糊PID控制,通过规则库实现了对不同驾驶情况的智能响应,特别是在横摆角速度误差较大时切换为滑模控制,提高了系统的鲁棒性和稳定性。扭矩分配方面,采用了平均分配策略并加入了动态限幅机制,确保各电机在不同工况下的高效协同工作。联合控制策略融合了横摆角速度跟踪和质心侧偏角控制,通过自适应权重系数优化了车辆的整体操控性能。 适合人群:汽车工程专业学生、自动驾驶及电动汽车领域的研究人员和技术人员。 使用场景及目标:适用于研究和开发轮毂电机分布式驱动电动汽车的操稳性控制系统,旨在提高车辆在各种复杂路况下的稳定性和安全性。 其他说明:文中提供了大量具体的代码片段和实验数据,帮助读者更好地理解和应用所介绍的技术方案。同时强调了理论与实际相结合的重要性,指出了在实车验证过程中需要注意的关键点。
少儿编程scratch项目源代码文件案例素材-愤怒的小鸟太空版黄金版.zip
内容概要:本文详细介绍了如何使用MATLAB和YALMIP工具包构建一个微网优化调度模型。该模型涵盖了光伏发电、风力发电、柴油发电机和蓄电池储能四种主要发电单元。通过引入CPLEX求解器,实现了对不同发电单元的最优调度,旨在最小化发电成本并确保系统稳定性。文中不仅提供了详细的代码示例,还解释了各个组件的工作原理及其相互之间的协调方式。此外,文章讨论了如何处理风光出力的不确定性和柴油机组的启停成本等问题,展示了完整的优化求解过程。 适合人群:对电力系统优化调度感兴趣的初学者,尤其是那些希望深入了解MATLAB、YALMIP和CPLEX在微网调度中应用的研究人员和技术人员。 使用场景及目标:适用于研究和教学环境,帮助读者理解微网调度的基本原理和方法。具体目标包括:① 学习如何在MATLAB中使用YALMIP进行优化建模;② 掌握风光柴储四类发电单元的特性及其在微网中的角色;③ 实现最小化发电成本的目标函数,并确保系统稳定运行。 其他说明:文章提供了丰富的代码片段和图表,便于读者理解和实践。同时,作者指出了一些常见错误和注意事项,如单位一致性、充放电效率处理等,有助于提高模型的可靠性和准确性。
内容概要:本文详细介绍了使用MATLAB 2014版进行16QAM调制信号在AWGN信道下的误码率(BER)和误比特率(SER)性能仿真的方法。首先配置基础参数如调制阶数、符号数和信噪比范围,然后通过生成随机数据并应用格雷码映射进行调制。接着利用awgn函数加入噪声,并通过qamdemod函数解调。性能评估方面,采用biterr和symerr函数分别计算误比特率和误符号率,并与理论公式得出的结果进行对比。文中还分享了一些常见错误及优化建议,如确保信号功率归一化、正确转换EbNo到SNR以及使用足够的符号数来提高仿真准确性。 适合人群:通信工程专业学生、从事无线通信研究的技术人员、希望深入理解数字调制技术的科研工作者。 使用场景及目标:①学习16QAM调制原理及其在AWGN信道中的表现;②掌握MATLAB环境下进行通信系统仿真的具体步骤和技术要点;③通过实践加深对误码率、信噪比等概念的理解。 其他说明:文中提供了完整的代码片段供读者参考,并强调了多个容易忽视的关键点,帮助初学者避开常见的陷阱。此外,还提到了一些扩展方向,如尝试不同类型的信道或更高的调制阶数。
少儿编程scratch项目源代码文件案例素材-疯狂啤酒花.zip
FireFox-whatruns-1.7.7.xpi
少儿编程scratch项目源代码文件案例素材-动画 VS 动画:第一部分.zip
内容概要:本文详细介绍了台达PLC (DVP15MC) 伺服追剪系统的实现过程,涵盖电子凸轮配置、追剪触发逻辑、伺服参数设置以及触摸屏界面设计等方面。文章首先讲解了电子凸轮参数配置的具体方法,如使用CAM_BOX_CFG指令进行凸轮表设置,并强调了凸轮曲线数据的预处理方式。接着深入探讨了追剪触发逻辑,展示了如何通过MC_GearInPos指令实现伺服轴的相位同步,确保切割动作的精确执行。此外,文章还涉及了触摸屏界面设计,包括实时显示伺服位置和设定位置的方法,以及如何通过HMI进行动态补偿。最后,作者分享了一些调试经验和优化技巧,如电子齿轮比的计算、伺服参数的优化以及如何利用MC_Plot工具进行运动曲线分析。 适合人群:从事自动化控制系统开发的技术人员,尤其是熟悉台达PLC和伺服系统的工程师。 使用场景及目标:适用于需要实现高精度伺服追剪控制的工业应用场景,如包装机械、食品加工等领域。主要目标是帮助工程师理解和掌握台达PLC伺服追剪系统的具体实现方法和技术要点,提高系统的稳定性和精度。 其他说明:文中提供了完整的源代码和详细的调试建议,有助于读者快速上手并应用于实际项目中。同时,文中提到的一些实用技巧和注意事项对于避免常见错误非常有帮助。
五一数学建模
内容概要:本文详细介绍了DSP28335与FPGA之间的150MHz并行通信技术及其在PWM外扩中的应用。首先讨论了DSP28335的XINTF总线配置方法,包括区域选择、数据准备和建立保持时间的设置。接着阐述了FPGA端的硬件描述语言实现,如内存映射接收模块的设计,确保数据传输的准确性与时效性。文中还探讨了双向传输的关键点,即总线控制权的切换机制,并提供了具体的代码示例。此外,针对PWM扩展部分,展示了如何利用FPGA构建高效的PWM发生器阵列,从而满足多电机控制系统的需求。最后强调了调试过程中应注意的问题,如时序约束、跨时钟域处理等。 适合人群:从事嵌入式系统开发的技术人员,尤其是那些需要进行高速数据传输和复杂外设扩展工作的工程师。 使用场景及目标:① 实现DSP28335与FPGA间的高效并行通信;② 解决因DSP自带PWM通道不足而带来的限制;③ 提供一种灵活且高性能的PWM扩展解决方案,适用于多电机控制和其他实时性强的应用场景。 其他说明:文章不仅提供了详细的理论讲解和技术细节,还分享了许多实战经验和常见问题的解决方案,帮助开发者更好地理解和掌握相关技术。
内容概要:本文详细介绍了使用无迹卡尔man滤波(UKF)构建四轮轮毂电机驱动车辆的故障诊断模型。该模型利用Matlab/Simulink平台搭建了一个7自由度的整车模型,涵盖了车辆的纵向、侧向、横摆运动以及四个轮子的旋转自由度。通过引入UKF算法,能够实时监控四个电机的健康状态(0或1),并在电机发生故障时迅速做出反应。文中展示了如何通过正弦转向输入制造非线性工况,以检验状态估计器的效果,并讨论了UKF模块的具体实现,包括状态预测、更新步骤以及观测方程的设计。此外,还分享了一些调试经验和常见问题的解决方案。 适合人群:从事自动驾驶、电动汽车研究的技术人员,尤其是对故障诊断和状态估计感兴趣的工程师。 使用场景及目标:适用于四轮轮毂电机驱动车辆的研发和测试环节,旨在提高车辆的安全性和可靠性,确保在电机故障情况下能够及时准确地识别并采取相应措施。 其他说明:文中提到的关键技术和实现细节对于理解和应用UKF算法具有重要参考价值,同时也为后续的研究提供了宝贵的经验和技术支持。
内容概要:本文详细介绍了基于GD32F1XX系列MCU的全功能FOC(磁场定向控制)电机控制系统的开发过程及其核心技术。主要内容涵盖FOC算法的具体实现步骤,包括Clarke变换、Park变换、PI调节、逆Park变换和SVM调制等;防飞车功能的设计,确保启动安全性;与铁塔王设备通信的协议解析,提高通信效率;以及针对不同国产32位芯片的移植方法。此外,文中还探讨了油门信号处理、EABS电子刹车控制、硬件架构设计等方面的技术细节,并提供了完整的源代码和硬件设计文件供开发者参考。 适合人群:具有一定嵌入式开发经验,特别是对电机控制感兴趣的工程师和技术爱好者。 使用场景及目标:适用于电动两轮车、三轮车及其他小型电动车的控制器开发。主要目标是帮助开发者理解和掌握FOC控制技术,同时提供一个经过实战验证的开源项目作为参考。 其他说明:该项目不仅包含了详细的代码注释和硬件设计资料,还分享了许多实用的经验技巧,如滑动滤波算法的应用、PWM调制的注意事项等。对于希望深入了解工业级电机控制系统的读者来说,这是一个非常有价值的资源。