当前位置:首页 > MATLAB
  • 开关电源模糊控制PID设计和MATLAB仿真研究

    摘 要:本文提出了一种开关电源模糊控制PID的的设计和MATLAB仿真方法。仿真结果表明:具有模糊控制的PID动态响应快、超调量小、负载变化引起输出电压的变化小。 关键词:开关电源;PID控制;模糊控制 Abstract:This paper presents a method of design and MATLAB simulation of a fuzzy PID-type of switch power supply.The experiment results indicate that compare to the PID control,the fuzzy control has a lot of merits,such as,fast transient response,small turn—on overshoot,small output voltage fluctuations with output current changes. Key words:switching power supply;PID control;fuzzy control 1 引言 开关电源是一种采用开关方式控制的直流稳压电源。它以小型、高效、轻量的特点被广泛应用于各种电子设备中。开关电源控制部分绝大多数是按模拟信号来设计和工作的,其抗干扰能力不太好,信号有畸变。由于计算机技术突飞猛进的发展,数字信号的控制和处理显示出越来越多的优点:便于计算机处理和控制,避免模拟信号传递畸变失真,减少杂散信号的干扰,软件调试方便等,出现了数字PID控制。它使得开关电源向数字化、智能化、多功能化方向发展。这无疑提高了开关电源的性能和可靠性。但由于开关电源本身是一个非线性的对象,其精确模型的建立是相当困难的,常采用近似处理,并且其供电系统和负载变化具有不确定性,所以采用上述模拟或数字PID控制方法常常难以使PID调节器的参数随之变化,控制效果不理想。近来发展起来的Fuzzy控制是一种仿人智能控制法,它不依赖被控对象的数学模型,便于利用人的经验知识实行控制,这对于一些复杂可变的或结构不确定难以用准确的数学模型描述的系统而言是非常适宜的,具有较强的鲁棒性[1],特别是对于无法确定的复杂对象具有较好的控制性能。本文正是基于这一思想而提出开关电源模糊控制的设计与仿真。 2 电路结构及其控制策略 2.1 主电路结构 主电路拓扑结构如图1。220V单相交流电经全波不可控整流,得到约300V的直流电压,再经由IGBT构成的半桥型高频变换器得到所需的高频脉动电压,经整流得到所需的直流电压。由于本电源功率不大(输出45V,10A),故主电路采用IGBT半桥型拓扑结构,既防止偏磁,又节约成本,主频选为20kHz,使IGBT工作于最佳状态。图中L1,C1用于抑制差模噪声,L2、C2、C3用于抑制共模噪声。各参数的计算略。     图1 主电路原理图 2.2 PID控制电路设计 在MATLAB环境下对开关电源的主电路及PWM发生电路建模,如图3所示,图中为仿真方便起见,省略部分滤波,保护、吸收回路。图2是PWM子系统的仿真原理图。由于开关电源的非线性,在抽象其模型时,有很大的近似处理。根据以上模型,应用传统设计法,设计出PID控制器的传递函数为     在后面的分析中可以看到,这种控制器在电源电压或负载发生突变时,控制性能不太理想。     图2 PWM子系统     图3 开关电源的常规PID控制模型 2.3 模糊控制器的设计 模糊控制器的结构如图4所示,图中Ug为给定电压,Ur为反馈电压、e、ec为偏差和偏差的变化率,E,EC为模糊化后的偏差和偏差的变化率,模糊控制器的输出U经反模糊成u,再经PWM电路控制开关电源的主电路。     图4 开关电源的模 输入、输出语言变量均取7个语言值,即:PB、MB、PS、ZE、NS、NM、NP。在各语言变量论域上用以描述模糊子集的隶属函数如图5所示。根据经验所得的模糊控制表如下:     图5 输入、输出变量的隶属函数 模糊推理规则表     根据以上设计,得到基于MATLAB的开关电源模糊控制电路如图6所示。 3 实验结果 在对PID控制器和模糊控制器进行实验的基础上,对这两种控制算法进行了比较。     图6 开关电源模糊控制电路模型 3.1 起动阶段的动态特性比较 图7的前半部分(t:0—0.15)是起动时PID控制器的模糊控制器的输出特性比较,该曲线是在负载为8.5A,输出电压设定值为38V的情况下测得的。从图中可以看出模糊控制要比PI控制的超调量小得多,模糊控制可以使得系统在起机时不会有大的过压,这对于设备的正常运行是非常有好处的。     图7 起动特性及工作点变化的动态特性 3.2 参数变化时的动态特性比较 由于开关电源的负载所需的电压要求可调,即工作点可变。图7的后半部分(t:0.15—0.3)展示了工作点发生变化(电压:38V→28V,电流:8.5A→6.4A)时,PID控制器和模糊控制器的动态特性,由图可看出:当工作点发生变化时,模糊控制比PID控制的动态过程快速且无震荡。 4 结束语 模糊控制是一种非线性控制,其控制规则是以人的经验为基础的,对于像开关电源这类的非线性对象的控制具有良好的鲁棒性和抑制超调的能力。在开关电源中引入模糊控制策略,将为开关电源的发展开创新的局面。 本论文的创新点是提出了一种开关电源模糊控制PID的的设计和MATLAB仿真方法。 参考文献 [1] 丁芳,李艳芳,费玉龙 智能PID算法在液位控制系统中的应用. 微计算机信息 2006年第6-1期 [2] 全杰,秦世引,段建民. 基于Matlab命令方式的模糊控制系统仿真及可视化实现[J]. 计算机仿真,2002, 19(3):113-114. [3] 张国良,曾静,柯熙政,邓方林.模糊控制及其MATLAB应用[M].西安交通大学出版社,西安,2002. [4] 孙亮.MATLAB语言与控制系统仿真[M].北京工业大学出版社。 [5] 王淑青,杨桦,何涛 模糊PID复合控制在变频空调中应用研究微计算机信息 2006年第6-1期

    时间:2012-06-04 关键词: 仿真 matlab 开关电源 电源技术解析 设计 控制 研究 pid 模糊

  • 基于云模型效能评估的Matlab实现

    摘 要: 对基于云模型的系统效能评估方法及过程进行了简要的描述,用Matlab代码实现了部分算法,代码经测试均可正确运行。对云模型的研究和应用有一定的推广价值和研究意义。关键词: Matlab;云模型; 效能评估 对于一些复杂的系统,由于其不确定性即模糊性和随机性,很难准确地对其进行有效的效能评估。因此需要一种评估方法,能够充分考虑到评估过程中出现的模型,同时能够有效而简便地实现定性与定量相互转换[1]。云模型是由李德毅院士提出的一种定性定量互换模型,可将模糊性和随机性结合在一起,充分实现精确数值与定性语言之间的转换,可以有效地实现系统效能评估。而Matlab既是一种直观、高效的计算机语言,同时又是一个科学计算平台。它为数据分析和数据可视化、算法和应用程序开发提供了可靠的数学运算和高级图形绘制工具[2]。 本文描述了单因素条件下基于云模型效能评估的方法、步骤,并通过Matlab语言予以实现。1 云模型简介1.1 云的基本概念 云[3]是用自然语言值表示的某个定性概念与定量表示之间的不确定性转换模型,具有直观性和普遍性。它主要反映概念上的不确定性,即模糊性(边界上的亦此亦彼性)和随机性(发生的概率)。云的数字特征用3个参数来描述,即期望值Ex(Expected Value)、熵En(Entropy)和超熵He(Hyper Entropy),3个数字特征整体表征一个概念,记做CG(Ex,En,He)。其中期望值Ex为概念上的原型值(中心值、标准值),最能代表这个定性概念的数值;熵En为概念不确定程度的度量,熵越大,概念相对越模糊;超熵He为熵的不确定程度的度量,即熵的熵,反映了云的离散程度。1.2 云发生器 云发生器CG(Cloud Generator)指被固化了的云模型生成算法,主要有正向云发生器和逆向云发生器两种。 逆向云发生器实现定量数值到其定性语言值的转换,即从给定的云滴样本中求出正向云发生器的3 个特征数字,从而实现对样本数据的定性评价。 由于在大多数的系统效能评估中,通过采样往往只能得到表示某个概念的一组数据值,这种单因素逆向云算法是根据云的统计特性,仅仅利用云滴xi 的定量数值来还原出云的3个参数,如图2所示。 逆向云发生器CG-1(Ex,En,He)的算法[4]: 2 基于云模型的系统效能评估步骤 基于云模型的系统效能评估方法,就是选取系统中的关键性指标,再将定性指标用正态云表述出来,根据系统指标分层结构,在不确定的情况下较为客观地对系统进行综合效能评估。该方法有3个关键因素:指标集U、权重因子集W和评价集V,其中W和V的元素是隶属云,并不全是精确值。 而评价指标根据需要划分为多级层次结构,每一层都有隶属本层的子指标集、权重因子集和评价集,只有在同一层次间的指标才能进行操作和比较,结果从低层向高层传递,最终实现系统整体效能的评估。大致流程如图3所示。2.1 确定指标集 根据评估需求,先将目标对象分解成多个功能模块,每个功能模块称为一个元素,然后将这些功能模块分为多个分组,每个分组中的元素为该功能模块能力的体现。以同一层次的功能模块作为准则,对下一层元素起支配作用,同时受到上一层元素的支配,这样形成一个指标体系。 指标体系是否合理将直接影响最终的评价结果的可信性,元素选取有很多原则,评价指标的选取必须遵循最简性、科学性、可测性、客观性、完备性以及独立性原则,能够真实、综合、全面地反映系统的性能。同时在构建指标体系时必须适当控制层次数,层次数应该由评估的复杂度和分析的深度决定,但一般不少于3层。2.2 建立指标的权重因子集 采用专家咨询的方法为各层指标建立权重因子,这些权重因子全部用定性语言表述,如“重要”、“比较重要”、“不重要”等。再将其转化为正态云来表述,用不同的正态云图表示其不同的重要程度。不失一般性,可以将权重因子集描述为W={W1,W2,…,Wn}。通常权重因子集的等级不低于3级,不高于9级。 例如,可以参照标度值对指标集中两两指标间的相对重要性进行打分,并得到专家打分矩阵:

    时间:2018-07-27 关键词: 模型 matlab 效能

  • MATLAB DSP在无传感器矢量控制中的应用

    1.引言  Matlab是一个强大的分析、计算和可视化工具,特别适用于控制系统的分析和模拟,但由于其依赖的平台是计算机及其 CPU,因而由于 CPU系统功耗的原因,使得 MATLAB程序的执行速度相对于高速信号的输入/输出显得很慢,远不能满足实时信号处理的要求,而 DSP就其软件的编程能力而言,与单片机及计算机的 CPU的编程设计方法有类似之处,但 DSP比单片机的运算速度快得多,又比 CPU 的功耗及设计复杂度低得多,但是其分析和可视化能力远不及 Matlab,开发过程比较复杂。不过,目前有一种新的技术,可以将 DSP和 Matlab两者密切结合起来,充分利用两者的特长,有力的促进控制系统的实现。  伺服驱动装置是印刷机无轴传动[3]控制系统中重要的组成部分,国内大部分产品是采用带速度传感器的专用变频器调速,控制精度不高 [4],而国外的产品价格又非常昂贵,由此,本文自行开发了一套基于 PI调节器的无速度传感器矢量控制系统,并且在自行搭建的实验平台进行了调速实验,在实验过程中,运用了 Matlab与 DSP混合编程的调试方法,实验结果表明,采用 Matlab调试及直接目标代码生成的方法能避免传统计算机模拟的复杂编程过程,减少了工作量,有助于提高系统的综合效率 , 且能够保持系统良好的动静态调速控制性能,很好地满足了印刷机无轴传动控制系统的要求。  2.无速度传感器矢量控制系统介绍  由于采用高性能的矢量控制方法且缺省了速度传感器,那么如何准确的获取转速信息,且保持伺服系统较高的控制精度,满足实时控制的要求,也就成为本课题研究的重要方向。在这里我们采用 PI自适应控制方法 ,利用在同步轴系中 q轴电流的误差信号实现对电机速度的估算 ,整体结构如图 1所示。角速度给定值 ω*与推算角速度反馈值 ω的误差送入速度调节器,速度调节器的输出即为电磁转矩的给定值 Te*,由 iq1 = LrTe/PmLmФd2可以计算出电流的 q轴分量给定值 iq1*,当 q轴电流没达到设定值时,可由 Rs产生的 q轴电压和 ω1σLs产生的 d轴电压来调节。因此,iq1*与定子电流 q轴分量的实际值 iq1的误差信号送入 PI调节器调节器的输出 uq1’为定子电流 q轴分量误差引起定子电压 q轴分量的调节量。  其中速度推算模块以不含有真实转速的转子磁链方程以及坐标变换方程作为参考模型,以含有待辨识转速的 PI自适应律为可调模型,以定子电流转矩分量作为比较输出量,采用比例积分自适应律进行速度估计,经过 PI调节后,输出量就是待求的电机转速。这种方法计算量小,结构简单,容易实现。  3. Matlab与 DSP混合编程的调试方法  在传统的开发过程中,总是先用 MATLAB进行仿真。当仿真结果满意时再把算法修改成 C/C++语言,再在硬件的 DSP目标板上实现。发现偏差,需要再用 Matlab对算法进行修正,再在 DSP上编写修正的算法程序。如此过程反复进行,在 DSP的开发工具、 Matlab工作空间之间来回多次切换,非常不便,当系统比较复杂时,还需要分步验证各个中间结果和最终结果。如果能够把 Matlab和 DSP集成开发环境 CCS及目标 DSP连接起来,利用 Matlab的分析能力来调试 DSP代码,那么操作 TI DSP的存储器或者寄存器就可以像操作 Matlab变量一样简单。工具包 Matlab Link for CCS Development Tools的使用,可以使上述问题迎刃而解,利用此工具箱,在 Matlab环境下,就可以完成对 CCS的操作,即整个目标 DSP对于 Matlab像透明的一样,所有操作只利用 Matlab命令和对象来实现,简单、方便、快捷。以下用调试上述无速度传感器矢量控制系统的例子来说明 Matlab-DSP集成开发环境在控制系统中的应用。在 Matlab命令窗口中输入 Simulink,打开 Simulink模块窗,建立异步电动机矢量控制变频调速系统的模型,如图 2所示,结构简单明了,全部实现模块化,容易扩展,可以根据实际需要,改变每一模块的参数。  接下来设置仿真参数和 Real-Time Workshop选项,编译仿真模型。并利用 Matlab Link for CCS Development Tools建立与目标 DSP的连接。利用 CCSLink工具,可以把数据从 CCS中传送到 Matlab工作空间中,也可以把 Matlab中的数据传送到 CCS中,而且通过 RTDX(实时数据交换技术),可以在 Matlab和实时运行的 DSP硬件之间建立连接,在它们之间实时传送数据而不使正在 DSP上运行的程序停止,这项功能可以在程序运行期间为我们提供一个观察 DSP实时运行状态的窗口,大大简化了调试工作。Matlab、CCSlink、CCS和硬件目标 DSP的关系如图 3所示。我们可以在 Matlab中修改一个参数或变量,并把修改值传递给正在运行的 DSP,从而可以实时地调整或改变处理算法,并通过观察探针点数据来调试程序。最后把 CCSlink和 Embedded Target for C2000 DSP Platform. 相结合,可以直接由调试好的 Simulink模型生成 DSP2812 的可执行代码,并加载到 DSP目标板中,这样我们就可以在同一的 Matlab环境中完成系统算法的设计、仿真、调试、测试,并最终在 DSP2812目标板上运行。4. 系统调试  实验台硬件结构如图 4所示,变频器系统用 DSP作为运算控制单元,用 IPM模块作为功率电路交换单元,用霍尔电流传感器检测电机三相电的两相电流。DSP控制器在对检测到的电流信号进行相应的运算处理之后,将 PI控制算法产生的三对 SVPWM脉冲信号,作用于 IPM来驱动异步电机,通过改变输出脉冲信号的频率来实现异步电动机的变频调速。  电机参数为: Rs=10Ω;Rr=5.6Ω;Ls =0.3119H;Lr=0.3119H;Lm = 0.297H;P = 4;J=0.001 kg.m2  通过 DSP与 CCS的连接,可在 Matlab环境下对目标 DSP的存储器数据进行访问,再利用 Matlab强大的分析和可视化工具对其数据进行访问,也可以实现对工程的编译、链接、加载、运行,设置断点和探点,最后将满意的调试结果生成的目标代码直接加载到实验台上。转速输入设定为一阶跃函数,电机带额定负载运行,获得的动态响应曲线如下图所示。  5 实验结果  Figure5 Experimental results由图 5可见, d-q轴电压电流及磁通角响应曲线平稳,在动态过程中,在 Matlab环境下的电机转矩和实际 DSP实验平台下的转矩曲线基本一致,系统响应快,且超调量小,只需 0.6S即可达到稳定。转速的阶跃响应如图 5(d)所示,系统在电机起动时有一定的波动,但是在 PI自适应控制器的作用下,只需 0.5S系统就可以达到稳定状态,证明速度观测器下的转速能够较好地跟踪实际速度变化,在稳态时实际速度等于仿真速度值。  5.结论  本文提出的 Matlab下的 DSP集成设计方法确实可行,实验证明:在此环境下可以完成对 DSP目标板的操作,包括访问 DSP存储器和寄存器等,又可利用 Matlab的强大工具对 DSP存储器中的数据进行分析和可视化处理,因此系统结构简单,调试工作量小,易于实现。同时,具有一定自适应能力的 PI速度估算方法能够对电机转速做出准确的估计,实验结果验证了此系统设计方案的正确性和可行性。

    时间:2018-08-14 关键词: DSP 传感器 矢量 matlab

  • 基于MATLAB的车牌识别系统设计与实现

    摘 要: 通过对车牌定位、车牌字符分割和车牌字符识别进行研究,提出了一种车牌识别系统的设计和实验仿真方法。该方法首先采用基于Canny 算子边缘检测和数学形态学相结合的方法定位出车牌,进行二值化、滤波和形态学开运算后使用投影二分法分割出7个车牌字符,最后使用模板匹配和特征统计相结合的方法识别出车牌字符。试验表明该方法是有效的、可行的,与传统使用单一算法相比较,该方法大大提高了车牌识别系统的正确率。关键词: 图像预处理; 车牌定位; 车牌字符分割; 车牌字符识别 随着世界经济和科学技术的不断发展,智能交通系统越来越多地被人们所关注。车牌识别LPR(License Plate Recognition)是智能交通系统中重要研究课题[1],已成为图像处理和模式识别研究中的热点。整个车牌识别系统主要包括图像预处理、车牌定位、车牌字符分割、车牌字符识别4个模块,其流程图如图1所示。 图像预处理主要是将输入的彩色图像转换为灰度图像,再进行灰度增强,以达到较好的凸显车牌字符的效果。这里首先将24位R、G、B的彩色图像按式(1)转换成256级的灰度图,以减少存储和计算量,图2是转换后的车牌灰度图。1 车牌定位 车牌定位是车牌识别系统中关键的一步,直接关系到车牌字符分割的准确性和系统识别的正确率[2]。通过比较4种典型的边缘检测算子,选择Canny算子对车牌进行边缘检测,然后对车牌进行形态学处理,并统计图像中白色像素点的个数定位出车牌区域。1.1 4种典型的边缘检测算子 边缘检测的目的是标识数字图像中亮度变化明显的点,车牌识别4种典型的边缘检测算子有:Roberts算子、Prewitt算子、Sobel算子和Canny算子,图3是这4种典型的边缘检测算子对车牌图像的检测效果图。 实验结果表明,Roberts算子对边缘定位比较准,但对噪声过于敏感,在图像噪声较少的情况下分割效果相当不错。Prewitt算子有一定的抗噪能力,但是这种抗噪能力是通过像素平均来实现的,相当于低通滤波,所以图像有一定模糊,其边缘检测时会受到一定影响。Soble算子对噪声有抑制作用,但对边缘的定位不是很准确,不适合对边缘定位的准确性要求很高的应用。Canny算子具有高定位精度,即能准确地把边缘点定位在灰度变化最大的像素上,同时较好地保留了原有车形的边缘特征,并能抑制虚假边缘的产生,因此本文选取Canny算子作为车牌图像边缘检测算子。 Canny算子边缘检测的实现是由MATLAB图像处理工具箱中edge函数来完成的。edge函数主要是在灰度图像中查找图像的边缘,处理图像的格式为BW=edge(I,′Canny′,thresh),其中I为灰度图像;thresh是一个包含两个阈值的向量,第一个元素是低阈值,第二个元素是高阈值,本文Canny算子边缘检测的MATLAB参数设置如下: I2=edge(I1,′Canny′,[0.25,0.65]); figure(3),imshow(I2);title(′Canny算子边缘检测′);1.2数学形态学处理 数学形态学是由一组形态学的代数运算算子组成的,用这些算子可以对图像的形状和结构进行分析及处理[3]。通过对图像的腐蚀和膨胀运算能使车牌区域连通,并最大限度地消除非车牌区域的噪声干扰。腐蚀和膨胀后的车牌图像如图4所示。

    时间:2018-09-28 关键词: 识别系统 matlab 车牌

  • 基于Matlab/Simulink的滑模软起动器仿真研究

    摘要:随着电动机的广泛使用,对电机起动的要求越来越高,对软起动装置也使用越来越多。滑模软起动器几种软起动方式的改变主要是通过对触发脉冲导通角(alpha)不同计算方法实现的,不需要对软起动装置的硬件作大的改变,也不会增加硬件成本。提出了一种滑模软起动装置,构建了斜坡起动、限流起动、转矩控制起动和分级变频起动四种软起动模型。通过滑模控制,使软起动装置能够满足在不同工作场合下电动机的起动要求,进而扩大软起动装置的使用范围。在Matlab/Simulink环境下对该软起动控制装置进行建模仿真。  关键词:滑模;软起动器;Simulink;斜坡起动;限流起动;转矩控制起动;分级变频起动  0 引言  不同的电机软起动方式具有各异的特性。斜坡起动、限流起动解决电机起动过程产生的过大冲击电流,这种起动方式适合于轻载电机起动;转矩控制起动、分级变频起动可以解决使用降压起动带来的起动转矩过小的问题,适用于重载的电机起动。构建适应不同工作场合需  要的电动机滑模软起动控制器具有工程应用价值。滑模软起动装置集斜坡起动、限流起动、转矩控制起动、分级变频起动等方式于一体,通过改变对交流模块输入的晶闸管导通脉冲选择电动机的软起动方式,进而扩大软起动装置的使用范围。本文在Matlab/Simulink环境下对滑模软起动进行了建模仿真研究。  1 软起动器的控制系统结构  1.1 仿真系统建模  在Mafiab/Simulink环境中,建立一个软起动器的模型,其综合了斜坡软起动、限流软起动、转矩控制软起动及分级变频软起动这几种软起动方式。并且使该软启动器实现能够让用户根据需要,选择一种适合用于电机软起动的方式进行起动。图1是基于Simulink的系统仿真框图。在仿真系统中,主要包括了滑模软起动控制、交流调压、电机和电气测量模块等单元。  滑模软起动控制模块是由4个软起动子模块(four soft start)和软起动方式滑模选择模块(switch subsystem)组成。输入量有电机定子电流单相有效值RMS、电机A相输入的电压值Va与电流值Ia和同步电压。  1.2 触发脉冲子模块  在整个系统中的晶闸管的触发脉冲主要使用6脉冲发生器模块来产生,并且能够对6脉冲进行延迟,生成一组可控的6相脉冲波。产生的6相脉冲在4个软起动方式中都有使用。其中图4是六脉冲发生器的子系统。  在6脉冲发生器模块中,有两个常量“Pwidth”和“freq”,“Pwidth”的值为6相触发脉冲的宽度;“freq”为同步电压频率;从“alpha deg”输入端输入触发角的值,可以是一组连续变量,通过对“alpha_deg”的值生成一组可控的晶闸管导通的6相脉冲;“block”是6脉冲发生器的锁存端,输入端为零时,模块正常工作产生一组6相脉冲;当输入端为高电平时,启动截止保护,这时脉冲将不再产生,晶闸管也就不能导通。  但是在6脉冲生成器模块中,其脉冲生成是根据电源的同步电压进行计算,子系统中的频率设置和同步电压的频率是保持一致的,生成的6相脉冲频率不可改变。在分级变频软起动模块中,晶闸管的6相导由6相脉冲发生器产生的一组基频的脉冲波和一组低频的脉冲进行与运算生成,这组脉冲是以低频脉冲的频率做为频率,以基波脉宽作为脉冲宽度,并且可以通过“alpha deg”对脉冲进行延迟。这样生成一组低频的导通角可控的低频脉冲,满足分级变频软起动的脉冲要求。在图5分级变频脉冲合成模块中,频率分别为F/2、F/4、F/5、F/7的方波脉冲和6脉冲发生器产生的脉冲进行与运算,生成F/2、F/4、F/5、F/7频率方波,并根据输入的时间选择各个分级频率运行时间,完成分级变频软起动控制。2 软起动控制方式  在软起动的仿真系统中,软起动模块中有四种软起动方式的子模块,分别是斜坡软起动、限流软起动、分级变频软起动和转矩控制软起动子模块。四种软起动是通过对晶闸管的导通角(alpha)不同计算方法,产生相适应的四种软起动方式的六脉冲,达到各自的软起动的目的。  2.1 斜坡软起动  斜坡式软起动是从初始角开始以斜坡的方式增加电动机上的电压直到额定电压的软起动方式。斜坡软起动的初始角可以根据情况进行设置,起动时间也可以由用户调节。图6是斜坡软启动alpha角计算的子模块。“uini”是软起动的初始角,“uincr”是软起动的斜坡增长的斜率控制。  斜坡电压软起动是一种常见软起动方式,这种起动方式的起动时间比直接起动长,起动电流比直接起动小,起动转矩不高,容易实现。  2.2 限流起动  限流起动是在电动机的起动过程中限制其起动电流不超过某一设定值。这种起动方法主要用在轻载起动的降压起动,其输出电压从零开始迅速增长,直到其输出电流达到预先设定的电流限制,然后在保持输出电流小于电流设定值的条件下逐渐升高电压,直到额定电压,从而使电动机转速逐渐升高,直到额定转速。图7是基于Matlab/Simulink搭建的限流软启动alpha计算子模块,alpha计算是在电流的闭环控制使用模糊控制器计算alpha角,调节电机两端电压。  限流软起动采用电流反馈的闭环模糊控制调节,可以快速、准确地触发晶闸管,避免大电流的冲击,很好地限制起动电流。    转矩控制起动是控制电动机的起动转矩由小到大线性上升,并根据起动转矩变化计算晶闸管的导通角进而控制电机的输入电压,使电机的转矩满足电动机使用要求。图8是转矩控制软起动alpha角计算子模块。  转矩控制软起动的优点是起动平滑、柔性好,对拖动系统有利,同时减少对电网的冲击,是最优的负载起动方式。  2.4 分级变频软起动  分级变频(离散频率法)就是使传统软起动器输出电压的频率从一个较低的值开始,分级上升,最后达到50Hz。分级变频虽然可以实现变频,但不能使频率连续地变化,只能使频率分级变化,而且各级频率都是50Hz的n分之一(即50Hz的分频),实现较高起动转矩。图9是分级变频软起动导通角alpha的计算子模块。在低频起动过程中,为保持电机的主磁通不变,要相应地降低定子电压,通过计算得到电机在F/2、F/4、F/5、F/7的导通角alpha的大小,在频率达到50Hz后,导通角缓慢减小到0,使电动机上的电压达到额定电压,完成软起动。  分级变频起动能有效提高电动机起动转矩,可使电动机在重负载的情况下平滑起动。  3 仿真结果分析  在matlab/simulink仿真环境中,通过对图1中软起动方式的选择,对斜坡控制、限流控制、转矩控制和分级变频控制进行仿真。分别得到四种软起动的定子有效电流、转速和转矩的波形图。  电机参数为10kW、220V、50Hz,极对数为2,定、转子端的标么值参数分别为:Rs=0.0401Ω;Rr=0.0377Ω;Ls=Lr=1.0349Ω。  通过对仿真结果的分析可以到处结论:斜坡起动是一种开环的起动控制方式,能够降低电机的起动电流,起动转矩不高,操作简单;限流软起动是采用电流的闭环控制,能够很好地限制电机的起动电流,但是起动时间较长,起动转矩不高;转矩控制软起动转矩能够平滑地上升,降低转矩突变给拖动系统造成的影响,是很好的负载起动;分级变频起动能够限制电动机的起动电流,起动转矩大,是一种有效的高转矩起动方法,适用于大负载的电机起动。  4 结论  滑模软起动器是综合了多种软起动方式的软起动装置,通过滑模控制对软起动方式进行选择,实现多种软起动,扩大了软起动装置的应用范围,提高了软起动装置的实用性,具有很大实用价值。

    时间:2018-08-06 关键词: matlab simulink 软起动器

  • 基于MATLAB与QUARTUS II的FIR滤波器设计与验证

      1 引言  FIR数字滤波器能够满足滤波器对幅度和相位特性的严格要求,避免模拟滤波器的温漂和噪声等问题,具有精确的线性相位、易于硬件实现和系统稳定等优点,可广泛应用于现代电子通信系统。实际信号处理应用往往要求系统兼具实时性和灵活性,而现有设计方案(如DSP)则难以同时达到这两方面要求。而使用具有并行处理特性的FPGA实现FIR滤波器,具有很强的实时性和灵活性,因此为数字信号处理提供一种很好的解决方案。  在嵌入式导航计算机工程项目中,石英挠性加速度计的输出信号需进行数字滤波才能为导航计算机提供原始数据,为此需要设计一款FIR数字滤波器。这里使用 MATLAB软件和Altera公司的FPGA开发软件QUARTUSⅡ进行FIR滤波器的设计仿真,该设计方案能够直观检验滤波器的设计效果,提高设计效率,缩短设计周期。  2 使用FIR IP Core设计滤波器  Altera公司提供的FIR Compiler是一个结合Altera FP-GA器件的FIR Filter Core,DSP Builder与FIR Compiler紧密结合。DSP Builder提供一个FIR Core的应用环境和仿真验证环境。而FIR滤波器设计实质上是确定能满足所要求的转移序列或脉冲响应的常数问题,设计方法主要有窗函数法、频率采样法和等波纹最佳逼近法等,这里采用窗函数法。  2.1 滤波器指标设计  FIR滤波器设计需达到以下指标:低通滤波,采样频率Fs为1 000 Hz,截止频率Fc为100 Hz,最小阻带衰减As为50dB,16阶滤波器,16位输入数据宽度,14位系数数据宽度。  2.2 利用FIR IP Core生成FIR模块  在FIR编译器中,将FIR滤波器设置为16阶低通滤波器,单速率采样。采样频率为1 000 Hz,截止频率为100 Hz,窗类型选择海明窗,然后生成系数并保存。滤波器系数的计算以所能达到最高精度为目的,计算出的滤波器系数未考虑有限字长效应,必须量化滤波器系数。由于在FPGA内要使用硬件实现滤波器,因此采用定点计算。按照指标要求设置参数,生成的FIR模块如图1所示。  3 验证方法的确定  基于FPGA的复杂DSP系统的调试验证是一项繁琐工作,采用传统的逻辑分析方法调试基于FPGA器件实现的设计几乎不可能。验证方法决定验证结果的准确性和验证工作量的大小。目前对基于FPGA的FIR数字滤波器的验证,通常采用输入一个信号序列(白噪声、多频谱混合信号等)作为激励,对滤波器的输出结果进行分析对照,判断滤波器是否符合设计要求。  4 利用Simulink检验滤波效果  Simulink是MATLAB中一个专门用于对动态系统进行建模、仿真和分析的软件包。通过调用模块,可以构成仿真数字滤波器特性的结构框图。输入低频 50 Hz和高频400 Hz的2个信号,利用所设计的滤波器进行滤波。建立仿真电路结构,导入前面所设计的FIR滤波器,如图2所示。  图3为输入波形在Simulink中Scopel的波形,图4为输出波形在Simulink中Scope的波形。比较图3和图4可看出,该FIR滤波器可有效滤除高频部分。因为在DSPbuilder中,输入正弦波形是通过查找表得到的每个周期256个点的量化值形式,故无物理单位,因此输出波形也是量化值形式。  5 使用ModelSim进行RTL级仿真  完成Simulink软件中的模型设计,仿真成功后,需要在ModelSim中仿真。因为Simulink中的仿真属于系统验证性质,是对mdl文件进行算法级仿真,而生成VHDL描述是RTL级,针对具体硬件结构。二者之间可能存在软件理解上的差异,转换后的VHDL代码实现可能与mdl模型描述的情况不完全相符,这就需要使用ModelSim进行RTL级功能仿真。图5所示是采用ModelSim仿真的结果,即低通滤波器的输出。可看出,与 simulink中的仿真结果基本一致。  6 使用QUARTUS实现时序仿真  ModelSim完成的RTL级仿真只是功能仿真,其仿真结果并不能精确反映电路的全部硬件特性,因此,时序仿真仍十分重要。图6是用QuartusⅡ实现的时序仿真,可看出,时序仿真满足设计要求。  7 使用嵌入式逻辑分析仪SignalTap II测试  只进行工程软件仿真远远不够,还必须进行硬件仿真。signalTap II逻辑分析仪是Quartus II软件中集成的一个内部逻辑分析软件,使用它可以观察设计的内部信号波形,方便用户查找引起设计的缺陷。从Simulink建模仿真到Mod- elsim RTL仿真和Quartus II时序仿真,输入正弦波都是仿真信号,而不是实际信号源。在硬件实际运行时,可以从外部信号源接入器件内部或者在其内部存储正弦波数据。这里采用后者,即在顶层文件中引入LPM_ROM宏模块,在其中存入正弦波数据的mif文件(存储初始化文件),FIR滤波器模块直接从ROM中读取数据。实际测试发现,经过设计的低通滤波器后,高频信号被滤除,只有输出低频信号(标准的正弦波),滤波效果满足系统要求,嵌入式逻辑分析仪中的输出波形如图7所示。  8 结束语  本文在FPGA内利用DSPBuilder实现FIR数字低通滤波器,通过Simulink算法仿真和ModelSim进行RTL仿真,接着在 Quartus中进行时序仿真。最后用嵌入式逻辑分析仪SignalTapII进行实际测试,结果证明采用该方法设计的FIR数字低通滤波器功能正确,性能良好,可以提高FIR滤波器的设计质量,加快设计进程,验证结果直观明了。随着各类数字信号处理的IP Cores的进一步完善,基于FPGA的DSP系统的应用会更加广泛。

    时间:2018-09-03 关键词: matlab 滤波器 quartus fir

  • Matlab与 DSP混合实现无传感器矢量控制

    摘要: 本文介绍了一种采用 MATLAB及 CCS对异步电机无速度传感器交流调速系统进行调试的方法。应用 MATLAB语言强大的分析能力和绘图功能,与 DSP高速运算的优势相结合,在自行搭建的无传感器矢量控制系统平台进行了调速实验,实验结果表明,采用 Matlab调试及直接目标代码生成的方法能避免传统计算机模拟的复杂编程过程,减少了工作量,有助于提高系统的综合效率, 且能够保持系统良好的动静态调速控制性能。  Matlab是一个强大的分析、计算和可视化工具,特别适用于控制系统的分析和模拟,但由于其依赖的平台是计算机及其 CPU,因而由于 CPU系统功耗的原因,使得 MATLAB程序的执行速度相对于高速信号的输入/输出显得很慢,远不能满足实时信号处理的要求,而 DSP就其软件的编程能力而言,与单片机及计算机的 CPU的编程设计方法有类似之处,但 DSP比单片机的运算速度快得多,又比 CPU 的功耗及设计复杂度低得多,但是其分析和可视化能力远不及 Matlab,开发过程比较复杂。不过,目前有一种新的技术,可以将 DSP和 Matlab两者密切结合起来,充分利用两者的特长,有力的促进控制系统的实现。  伺服驱动装置是印刷机无轴传动[3]控制系统中重要的组成部分,国内大部分产品是采用带速度传感器的专用变频器调速,控制精度不高 [4],而国外的产品价格又非常昂贵,由此,本文自行开发了一套基于 PI调节器的无速度传感器矢量控制系统,并且在自行搭建的实验平台进行了调速实验,在实验过程中,运用了 Matlab与 DSP混合编程的调试方法,实验结果表明,采用 Matlab调试及直接目标代码生成的方法能避免传统计算机模拟的复杂编程过程,减少了工作量,有助于提高系统的综合效率 , 且能够保持系统良好的动静态调速控制性能,很好地满足了印刷机无轴传动控制系统的要求。  2.无速度传感器矢量控制系统介绍  由于采用高性能的矢量控制方法且缺省了速度传感器,那么如何准确的获取转速信息,且保持伺服系统较高的控制精度,满足实时控制的要求,也就成为本课题研究的重要方向。在这里我们采用 PI自适应控制方法 ,利用在同步轴系中 q轴电流的误差信号实现对电机速度的估算 ,整体结构如图 1所示。角速度给定值 ω*与推算角速度反馈值 ω的误差送入速度调节器,速度调节器的输出即为电磁转矩的给定值 Te*,由 iq1 = LrTe/PmLmФd2可以计算出电流的 q轴分量给定值 iq1*,当 q轴电流没达到设定值时,可由 Rs产生的 q轴电压和 ω1σLs产生的 d轴电压来调节。因此,iq1*与定子电流 q轴分量的实际值 iq1的误差信号送入 PI调节器调节器的输出 uq1’为定子电流 q轴分量误差引起定子电压 q轴分量的调节量。  其中速度推算模块以不含有真实转速的转子磁链方程以及坐标变换方程作为参考模型,以含有待辨识转速的 PI自适应律为可调模型,以定子电流转矩分量作为比较输出量,采用比例积分自适应律进行速度估计,经过 PI调节后,输出量就是待求的电机转速。这种方法计算量小,结构简单,容易实现。  3. Matlab与 DSP混合编程的调试方法  在传统的开发过程中,总是先用 MATLAB进行仿真。当仿真结果满意时再把算法修改成 C/C++语言,再在硬件的 DSP目标板上实现。发现偏差,需要再用 Matlab对算法进行修正,再在 DSP上编写修正的算法程序。如此过程反复进行,在 DSP的开发工具、 Matlab工作空间之间来回多次切换,非常不便,当系统比较复杂时,还需要分步验证各个中间结果和最终结果。如果能够把 Matlab和 DSP集成开发环境 CCS及目标 DSP连接起来,利用 Matlab的分析能力来调试 DSP代码,那么操作 TI DSP的存储器或者寄存器就可以像操作 Matlab变量一样简单。工具包 Matlab Link for CCS Development Tools的使用,可以使上述问题迎刃而解,利用此工具箱,在 Matlab环境下,就可以完成对 CCS的操作,即整个目标 DSP对于 Matlab像透明的一样,所有操作只利用 Matlab命令和对象来实现,简单、方便、快捷。以下用调试上述无速度传感器矢量控制系统的例子来说明 Matlab-DSP集成开发环境在控制系统中的应用。在 Matlab命令窗口中输入 Simulink,打开 Simulink模块窗,建立异步电动机矢量控制变频调速系统的模型,如图 2所示,结构简单明了,全部实现模块化,容易扩展,可以根据实际需要,改变每一模块的参数。 接下来设置仿真参数和 Real-Time Workshop选项,编译仿真模型。并利用 MATLABLink for CCS Development Tools建立与目标 DSP的连接。利用 CCSLink工具,可以把数据从 CCS中传送到 Matlab工作空间中,也可以把 Matlab中的数据传送到 CCS中,而且通过 RTDX(实时数据交换技术),可以在 Matlab和实时运行的 DSP硬件之间建立连接,在它们之间实时传送数据而不使正在 DSP上运行的程序停止,这项功能可以在程序运行期间为我们提供一个观察 DSP实时运行状态的窗口,大大简化了调试工作。Matlab、CCSlink、CCS和硬件目标 DSP的关系如图 3所示。  我们可以在 Matlab中修改一个参数或变量,并把修改值传递给正在运行的 DSP,从而可以实时地调整或改变处理算法,并通过观察探针点数据来调试程序。最后把 CCSlink和 Embedded Target for C2000 DSP Platform. 相结合,可以直接由调试好的 Simulink模型生成 DSP2812 的可执行代码,并加载到 DSP目标板中,这样我们就可以在同一的 Matlab环境中完成系统算法的设计、仿真、调试、测试,并最终在 DSP2812目标板上运行。  4. 系统调试  实验台硬件结构如图 4所示,变频器系统用 DSP作为运算控制单元,用 IPM模块作为功率电路交换单元,用霍尔电流传感器检测电机三相电的两相电流。DSP控制器在对检测到的电流信号进行相应的运算处理之后,将 PI控制算法产生的三对 SVPWM脉冲信号,作用于 IPM来驱动异步电机,通过改变输出脉冲信号的频率来实现异步电动机的变频调速。  电机参数为: Rs="10"Ω;Rr=5.6Ω;Ls =0.3119H;Lr=0.3119H;Lm = 0.297H;P = 4;J=0.001 kg.m2  通过 DSP与 CCS的连接,可在 Matlab环境下对目标 DSP的存储器数据进行访问,再利用 Matlab强大的分析和可视化工具对其数据进行访问,也可以实现对工程的编译、链接、加载、运行,设置断点和探点,最后将满意的调试结果生成的目标代码直接加载到实验台上。转速输入设定为一阶跃函数,电机带额定负载运行,获得的动态响应曲线如下图所示。  5 实验结果  由图 5可见, d-q轴电压电流及磁通角响应曲线平稳,在动态过程中,在 Matlab环境下的电机转矩和实际 DSP实验平台下的转矩曲线基本一致,系统响应快,且超调量小,只需 0.6S即可达到稳定。转速的阶跃响应如图 5(d)所示,系统在电机起动时有一定的波动,但是在 PI自适应控制器的作用下,只需 0.5S系统就可以达到稳定状态,证明速度观测器下的转速能够较好地跟踪实际速度变化,在稳态时实际速度等于仿真速度值。  本文提出的 Matlab下的 DSP集成设计方法确实可行,实验证明:在此环境下可以完成对 DSP目标板的操作,包括访问 DSP存储器和寄存器等,又可利用 Matlab的强大工具对 DSP存储器中的数据进行分析和可视化处理,因此系统结构简单,调试工作量小,易于实现。同时,具有一定自适应能力的 PI速度估算方法能够对电机转速做出准确的估计,实验结果验证了此系统设计方案的正确性和可行性。

    时间:2018-08-02 关键词: DSP 传感器 矢量 matlab

  • 基于MATLAB GUI的钻井工具姿态采集

      0引 言  在石油钻井中,准确测量井眼姿态是进行井眼轨迹控制的前提。为此,本文充分结合单片机和MATLAB的优点,基于事件驱动的通信机制,提出了一种MATLAB环境下基于GUI的PC与片上系统C8051F060实时串行通信的可视化数据处理方法,并实现了对井眼姿态的监测。该方法极大地简化了开发流程,提高了系统开发效率。更重要的是MATLAB的运算能力,为数据处理提供了保障。  1 系统介绍  在本系统中,上位机是PC,下位机采用silabs公司推出的高速片上系统(SoC)C8051F060,使用三轴加速度计来敏感井眼姿态的变化。三轴加速度计两两正交,输出正方向满足右手螺旋法则,将三轴加速度的输出值通过坐标间的相互转换,利用三角关系式即可得到当前井眼空间姿态。由于PC串口与SoC的UART使用的是不同的电压标准,所以两者间通过电压转换芯片sp3223相连。三轴加速度敏感到的姿态信号经过调理电路和多路开关后,被SoC内部的A/D采样,采集得到的数据存储到片外存储器。数据的存储设备采用三星公司生产的超大容量存储器K9K8G08U0M,满足了系统长时间采集存储的需要。  借助GUI开发的上位机软件通过串口实现与下位机间的命令及数据传输,并对下位机采集的数据进行处理。  2硬件系统  C8051060是完全集成的混合信号片上系统型MCU,其内部CIP-51内核采用流水线结构,指令执行速度可达25 MIPS。使用如此高性能的单片机使得系统硬件电路设计大为简化,单片机的UART、串口通过电压转换模块SP3223与PC进行通信,而C8051060的双串口为多系统的级联提供了方便。数据采集功能由其内部的ADC完成,采集的数据通过口线存储到片外的大容量存储器K9K8G08U0M。  系统硬件框图如图1所示,其中实线为数据流,虚线为控制流。系统工作时,由上位机通过命令来控制下位机进行相应的操作。进行数据采集时,单片机控制电源给传感器供电。各路信号经过各自的调理电路后被送入多路开关。单片机通过控制多路开关来选择所要采样的信号,并将其送入SoC内置的ADC进行采样。采样值被存储后等待与上位机的通信。    3下位机软件  下位机SoC接收到PC的下发消息后,通过串口中断程序转入相应的子程序,执行相应操作,最后返回一个握手信号做为状态标志,确认命令是否被正确执行。  C8051060使用UART0与PC进行串行通信。将该串口的工作方式设置为方式3,具有硬件地址识别和多处理器通讯的功能,并且用定时器1作为波特率发生器,设定波特率为115 200 b/s,每帧数据占11位--1个起始位,8个数据位,1个可编程的第九位,1个结束位。  该软件的子程序包括:清参数区、清数据区、发送参数、接收参数、开始采集、接收数据、复位等,各子程序的具体实现在此不进行详细描述。软件框图如图2所示。    4上位机软件  本系统使用MATLAB提供的图像用户界面开发环境(GUIDE)完成界面设计及上位机软件编制。GUI"所见即所得"的编程方式简单明快,非常容易上手。本软件借助MATLAB自带的工具箱和系统中的Activex控件,编制了菜单栏和工具栏及各功能模块,实现了命令、参数以及数据的双向传输及显示、数据的滤波处理及绘图。  4.1串行通信的实现  MATLAB本身是一个跨平台的软件,并不具备直接访问硬件的能力,但是可以通过对serial类的操作,实现MATLAB对串口的支持。  要想在MATLAB中使用串行口,首先要借助serial类建立串口对象,并在使用前将该串口对象打开。数据传输完毕后,需关闭该串口对象,避免影响其他程序无法对该串口对象的使用。在系统不再使用该串口或者退出系统时,需要将该串口对象清除并从MATLAB工作空间清除,避免占用内存和影响其他系统使用。  在使用串口进行数据传输时,需要对串口进行读写操作。读写串口的方式分为二进制、文本两种,类似于一般的文件操作。为了提高传输的速度,结合实际情况,本系统采用串口二进制异步读写方式。MATLAB程序通过串行口将命令发送到下位机,并通过串行口接收下位机上传的握手信号及数据。  串行通信的部分源码如下:      使用串口进行读写操作时,还需注意的一点就是对串口数据校验方式属性(Parity)的设置,如果该设置与下位机软件不匹配,将造成读写错误而又难以查找原因。  4.2 GUI界面中activx控件的使用  在MATLAB的GUIDE中所提供的基本控件非常少,难以满足本系统的需要。因此本系统调用系统中的Activex控件FlexArray、FlexGrid实现了数据在表格中的显示,调用axes控件实现了数据图形绘制。  本程序中用到的控件(包括Activex控件),在其创建及属性设置过程中,使用了全程序法、GUIDE属性法和两者相结合的方法。全程序法是只借助MATLAB提供的句柄功能创建及设置控件。而GUIDE属性法类似VB的设计风格,容易上手,但是这种方法使得m文件过于依赖fig文件。两者结合的方法使得设计更加灵活。下面以GUIDE属性法和全程序法相结合的方法创建、调用FlexArray控件为例,讲解本系统中的数据显示部分。基本控件的操作比较简单,在此不进行详述。  FlexArray控件的全称是,该控件的文件即C:\WINDOWS\System32\VSFLEX3.OCX,如果本机上没有的话,可以到网上下载,或到其他机子上复制,然后使用regsvr32.exe注册即可。做好这些准备工作之后,点击GUI左侧的工具箱中的Activex按钮后,在设计区拖拉,弹出"Select an Activex Control"对话框,对话框中的"Activex Control List"列表框列出了在当前计算机上注册的所有Activex控件,在该列表框中选中 控件,单击"Create"按钮,该控件便在GUI的空白编辑区被创建。  创建成功后,GUI自动为该控件生成的句柄做为图形窗口句柄handles的成员被存储,对于第N个被创建的Activex控件,其句柄为handles.activexN,以后借用该句柄就可以通过函数来调用对应的Activex控件。控件的属性设置可以通过双击控件或者右键菜单打开属性设置窗口来进行,也可以通过在m文件中通过set命令设定。通过get可以获取Activex控件的属性。  要读取或设定FlexArray控件表格中某单元格的内容时,首先通过handles.activexl.row=i;handles.activexl.col=j;语句指向目标单元格,然后通过fa=get(handles.activexl,′text′);fa=str2num(fa);语句将目标单元格中的内容转换为数值赋给变量fa.通过set命令设置目标单元格中的内容,也可以设置固定栏标题,只是注意对于行固定栏的行号是0,列固定栏的列号是0。  4.3滤波处理及图形绘制  如果使用采集到的传感器输出数据直接计算井眼姿态,将会造成较大的误差。主要原因是:(1)在钻进中,由于钻进环境恶劣,振动和旋转都会对传感器输出造成较大影响;(2)电路本身的电气噪声,对采集数据存在一定的影响。  在消除旋转对实验数据的影响后,再借助MATLAB语言实现滤波功能,具体实现流程如下:根据实验数据,在MATLAB的FDAtool工具箱中设计滤波器,滤波效果与实际情况吻合后,将该滤波器的传递函数使用MATLAB语言实现,添加到"数据处理"功能按钮对应的程序中,完成数据处理的全部功能。  将滤波前后的数据借助axeS控件绘图显示,可以看到数据处理前后对真实井眼姿态描述的差异。  5应用实例  本系统已经应用于智能旋转导向系统的室内实验,图3是在室内直井钻井平台上进行模拟钻井实验的钻进过程中,利用本软件进行操作的截图。该图较好地展示了该软件的功能:数据、命令的双向传输及显示、数据的后续处理功能。图中曲线显示区域黑线代表的是采集到的y轴重量加速度的数值GY,红线代表的是经过数据处理后的GY,不难发现,后者的波动范围明显缩小,曲线更为光滑。然后利用处理过的三轴加速度数值,对钻井工具的空间姿态角进行计算,能够得到与实际情况较为吻合的空间姿态,为矿井的钻进中空间姿态的准确测量,提供了一个可供借鉴和参考的方法,能够使钻井过程中减少停钻次数,为提高钻井效率和钻井安全增加了保证。    6结论  具有数据处理、串口操作控制功能和Activex控件合理调用功能的上位机软件,再加上高性能片上系统C8051F060作为主芯片的井下电路,两者组成了模拟钻井姿态采集处理系统,在115200的串口波特率下,实现了对多路井下信号的采集、处理,从实验结果来看,井斜角、工具面角等空间角度的计算结果与实际情况较为符合,完全适用于钻井工具的空间姿态测量应用。强大的数据处理功能,再加上人机操作界面,这使得MATLAB在工业现场监控方面将获得更广阔的应用。

    时间:2018-08-13 关键词: matlab gui 工具 姿态

  • 用MATLAB设计FIR滤波器的方法解析

    介绍了利用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法:程序设计法、FDATool设计法和SPTool设计法,给出了详细的设计步骤,并将设计的滤波器应用到一个混和正弦波信号,以验证滤波器的性能。1 前言数字滤波器是一种用来过滤时间离散信号的数字系统,通过对抽样数据进行数学处理来达到频域滤波的目的。根据其单位冲激响应函数的时域特性可分为两类:无限冲激响应(IIR)滤波器和有限冲激响应(FIR)滤波器。与IIR滤波器相比,FIR的实现是非递归的,总是稳定的;更重要的是,FIR滤波器在满足幅频响应要求的同时,可以获得严格的线性相位特性。因此,它在高保真的信号处理,如数字音频、图像处理、数据传输、生物医学等领域得到广泛应用。2 FIR滤波器的窗函数设计法FIR滤波器的设计方法有许多种,如窗函数设计法、频率采样设计法和最优化设计法等。窗函数设计法的基本原理是用一定宽度窗函数截取无限脉冲响应序列获得有限长的脉冲响应序列,主要设计步骤为:(1) 通过傅里叶逆变换获得理想滤波器的单位脉冲响应hd(n)。(2) 由性能指标确定窗函数W(n)和窗口长度N。(3) 求得实际滤波器的单位脉冲响应h(n), h(n)即为所设计FIR滤波器系数向量b(n)。(4) 检验滤波器性能。本文将针对一个含有5Hz、15Hz和30Hz的混和正弦波信号,设计一个FIR带通滤波器,给出利用MATLAB实现的三种方法:程序设计法、 FDATool设计法和SPTool设计法。参数要求:采样频率fs=100Hz,通带下限截止频率fc1=10 Hz,通带上限截止频率fc2=20 Hz,过渡带宽6 Hz,通阻带波动0.01,采用凯塞窗设计。3 程序设计法MATLAB信号处理工具箱提供了各种窗函数、滤波器设计函数和滤波器实现函数。本文的带通滤波器设计及滤波程序如下:[n,Wn,beta,ftype]=kaiserord([7 13 17 23],[0 1 0],[0.01 0.01 0.01],100);%得出滤波器的阶数n=38,beta=3.4w1=2*fc1/fs; w2=2*fc2/fs;%将模拟滤波器的技术指标转换为数字滤波器的技术指标window=kaiser(n+1,beta);%使用kaiser窗函数b=fir1(n,[w1 w2],window);使用标准频率响应的加窗设计函数fir1freqz(b,1,512);%数字滤波器频率响应t = (0:100)/Fs;s = sin(2*pi*t*5)+sin(2*pi*t*15)+sin(2*pi*t*30);%混和正弦波信号sf = filter(b,1,s);%对信号s进行滤波程序执行的结果如图1所示:图1 滤波器特性和滤波效果图(1)滤波器幅频特性和相频特性 (2)滤波前后的波形4 FDATool设计法FDATool(Filter Design & Analysis Tool)是MATLAB信号处理工具箱专用的滤波器设计分析工具,操作简单、灵活,可以采用多种方法设计FIR和IIR滤波器。在MATLAB命令窗口输入FDATool后回车就会弹出FDATool界面。4.1 带通滤波器设计已知滤波器的阶数n=38,beta=3.4。本例中,首先在Filter Type中选择Bandpass;在Design Method选项中选择FIR Window,接着在Window选项中选取Kaiser,Beta值为3.4;指定Filter Order项中的Specify order为38;采样频率Fs=100Hz,截止频率Fc1=10Hz,Fc2=20Hz。设置完以后点击窗口下方的Design Filter,在窗口上方就会看到所设计滤波器的幅频响应,通过菜单选项Analysis还可以看到滤波器的相频响应、组延迟、脉冲响应、阶跃响应、零极点配置等。设计完成后将结果保存为kaiser15.fda文件。4.2 Simulink仿真在Simulink环境下,将滤波器文件kaiser15.fda导入Digital Filter Design模块,输入信号为s(t)=sin(10πt)+sin(30πt)+sin(60πt),生成的仿真图和滤波效果如图2所示。图2 Simulink仿真图和滤波效果图(1)Simulink仿真图 (2)滤波前后的离散波形5 SPTool设计法SPTool是MATLAB信号处理工具箱中自带的交互式图形用户界面工具,它包含了信号处理工具箱中的大部分函数,可以方便快捷地完成对信号、滤波器及频谱的分析、设计和浏览。在本例中按以下步骤完成滤波器的设计和滤波:创建并导入信号源。在MATLAB命令窗口输入命令:Fs=100;t = (0:100)/Fs;s = sin(2*pi*t*5)+sin(2*pi*t*15)+sin(2*pi*t*30);此时,变量Fs、t、s将显示在workspace列表中。在命令窗口键入Sptool,将弹出Sptool主界面,如图3所示;点击菜单File/Import将信号s导入并取名为s。(2)单击Filters列表下的New,按照参数要求设计出滤波器filt1,具体步骤类似于3.2.1。(3)将滤波器filt1应用到s信号序列。分别在Signals、Filters、Spectra列表中选择s、filt1、mtlbse,单击Filters列表下的Apply按钮,在弹出的Apply Filter对话框中将输出信号命名为sin15hz。(4)进行频谱分析。在Signals中选择s,单击Spectra下的Create按钮,在弹出的Spectra Viewer界面中选择Method为FFT,Nfft=512,单击Apply按钮生成s的频谱spect1。同样的步骤可以生成信号sin15hz的频谱spect2。分别选中信号s、sin15hz、spect1、spect2,单击各自列表下方的View按钮,即可观察他们的波形,如图4所示。SPTool主界面图3 SPTool主界面 图4 滤波前后的时域波形和频域特性由图4可以看出,带通滤波器filt1使输入信号s中频率为15hz的正弦波信号通过,而将频率为5hz和30hz的正弦波信号大大衰减。6 结束语本文通过一个设计实例,介绍了利用MATLAB实现 FIR滤波器设计与滤波的三种方法,从仿真结果可以看出它们均可以达到技术指标要求,而且方法简单、快捷,大大减轻了工作量。滤波器的设计工作完成后,可以借助于MATLAB的export操作导出所设计滤波器的系统函数H(z)。由于MATLAB具有强大的接口功能,仿真后的结果可以很方便的移植到 DSP、CPLD或FPGA等器件中。在实际应用中,只需按要求修改滤波器参数,并对程序作较少的改动,即可实现不同截止频率的FIR滤波器,实用性较强。

    时间:2018-10-11 关键词: 方法 matlab 滤波器 fir

  • 使用MATLAB轻松享受GPU的强大功能

    近年来,使用GPU(通用图形处理器)进行科学计算已变得十分普遍。GPU最初设计用于图像密集型视频游戏产业中的图形渲染绘制,但近年来GPU不断发展,现可用于更广泛的用途。研究人员可对其进行程序设计以执行计算,用于数据分析、数据可视化,以及金融和生物建模等应用。 MATLAB的GPU支持为活跃于许多学科的大量研究人员(不一定是CUDA编程专家)提供了一种加速科学计算的新方法。考虑到MATLAB主要是用于科学计算和工程计算,因此MATLAB最新提供的GPU支持是一种逻辑开发,以便让非编程专家同样能够使用此技术。 有了MATLAB的这些新功能之后,用户便可以利用GPU来实现其应用程序的显著提速,而无需进行低级的C语言程序设计。这一最新技术发展提供了现有方法以外的其他方法来加速特定硬件上的MATLAB算法执行。使用MATLAB进行GPU程序设计 MATLAB中的CUDA支持为GPU加速后的MATLAB操作提供了基础,并实现了现有CUDA内核与MATLAB应用程序的集成。用户现在可以使用不同的程序设计技术来实现易用性与执行优化两者的适当平衡(参考文献1)。 MATLAB支持启用了CUDA的NVIDIA GPU(具有1.3或更高版本计算功能),例如Tesla 10系列和基于Fermi架构的尖端Tesla 20系列。GPU 1.3版提供的双浮点精度全面支持是保证大多数科学计算不因速度权衡而损失精度(loss Svb)的先决条件,并且可以将代码更改的需要减到最低。 在MATLAB中实现GPU计算的三种方法加速了整个应用程序的进度,并实现了所需的建模复杂度与执行控制间的权衡方案。在GPU上执行重载的MATLAB函数 最简单的编程模式包括对GPU(GPU数组)上已加载数据的MATLAB函数直接调用。用户可以决定何时在MATLAB工作区和GPU之间移动数据或创建存储在GPU内存中的数据,以尽可能减少主机与设备间数据传输的开销。在第一个版本中,已重载了超过100个MATLAB函数(包括FFT和矩阵除法),以在GPU数组中无缝执行。用户可在同一函数调用中将在GPU上加载的数据和MATLAB工作区中的数据混合,以实现最优的灵活性与易用性。 这种方法提供了一个简单的接口,让用户可以在GPU上直接执行标准函数,从而获得性能提升,而无需花费任何时间开发专门的代码。MATLAB代码示例1,在GPU上执行矩阵除法 当处理存储在GPU内存中的数据时,会重载 操作符以便在GPU上运行。在这种情况下,用户不得对函数进行任何更改,只能指定何时从GPU内存移动和检索数据,这两种操作分别通过gpuArray和gather命令来完成。在MATLAB中定义GPU内核 作为第二种编程模式,用户可以定义MATLAB函数,执行要对GPU上的向量化数据执行的标量算术运算。使用这种方法,用户可以扩展和自定义在GPU上执行的函数集,以构建复杂应用程序并实现性能加速,因为需要进行的内核调用和数据传输比以前少。 这种编程模式允许用算术方法定义要在GPU上执行的复杂内核,只需使用MATLAB语言即可。使用这种方法,可在GPU上执行复杂的算术运算,充分利用数据并行化并最小化与内核调用和数据传输有关的开销。MATLAB代码示例2,将MATLAB函数定义为GPU内核 同样,在这种情况下,用户不得对函数进行任何更改,只能指定何时从GPU内存移动和检索数据以及使用arrayfun命令调用函数。TaylorFun函数会在A_gpu矢量的各个元素上执行,充分利用数据并行化。直接从MATLAB调用CUDA代码 为了进一步扩展在GPU上执行的集合函数,可以从CUDA或PTX代码中创建一个MATLAB可调用的GPU内核。第三种编程模式可以让用户轻松地从MATLAB直接调用已有CUDA代码,使非CUDA专家同样能够进行代码重用。 这种编程模式同样有助于CUDA开发人员的工作,因为它提供了直接从MATLAB进行CUDA代码测试的整体解决方案,无需使用GPU在环配置进行基于文件的数据交换。此外,用户还可以直接从MATLAB试用有关线程块大小和共享内存的参数。MATLAB代码示例3,直接从MATLAB调用CUDA代码 对于精通CUDA的程序员而言,这种方法可实现轻松混合串行与高度并行代码的可能,从而获得最优的性能,而无需开发整个应用程序的C语言代码。 在编译代码并生成ptx文件之后,用户可向MATLAB声明该内核,设置有关线程块大小的属性,并直接对数据调用内核。同样,在这种情况下,用户可以决定何时在主机内存与设备之间移动数据,以尽可能减少数据传输的开销。GPU和CPU间的执行权衡 相比多核处理器,GPU可显著地加速高度并行操作的执行。实践证明,GPU的大规模并行体系结构有助于从金融计算到分子动力学等许多领域的密集科学计算。通过将计算密集型内核映射到GPU并在CPU上运行应用程序的顺序部分,可以将整体执行加速5倍到超过100倍(参考文献2)。 MATLAB GPU支持可以通过无缝方式为大规模并行复杂应用程序提速,而不损失精度。通过支持1.3或更高版本的CUDA,MathWorks解决方案可完全实现GPU上的双浮点精度计算,从而保证不因任何速度权衡而损失精度。 可使用GPU实现的加速主要取决于主机内存和GPU设备间数据传输的开销。计算密集型并行应用程序可减少数据传输量,将能体验更快的程序执行。同样,以上考虑明显适用于在GPU上执行的MATLAB应用程序(参见图 1)。图1,使用双浮点精度实现矩阵除法的计算加速见MATLAB代码示例1所述。注意:对于小型矩阵而言,设备与主机间的数据传输开销是最主要的,因此可能不会发生任何加速,或者GPU上的程序执行甚至可能会比在CPU上的执行还要慢 根据计算复杂度和并行程度的不同,在所有GPU和CPU上执行复杂应用程序时,可以体验到最佳的加速效果。这视程序员的经验和水平而异,要看他是否能确定最佳的执行平台。基于这些原因,很难估计使用GPU可获得的最大加速效果。根据可用的硬件平台和应用程序的复杂性,程序员可以使用MATLAB配置代码以实现最快执行,并作出目标平台的最佳选择(图2)。图2,计算不同内核大小的泰勒级数所需的执行时间见MATLAB代码示例2所述。注意:当在四核处理器上执行该函数时,MATLAB隐式多线程已对其进行了加速,无需修改应用程序代码。当计算加速大于数据传输的开销时,GPU对复杂函数更有帮助。GPU计算时间几乎与内核复杂度无关结论 为了实现GPU的最大灵活性和易用性,MathWorks提供了不同的编程模式来更好地满足开发人员的偏好。有了MATLAB GPU支持,用户便可以一种无缝且不费力的方式加速其应用程序。此外,GPU支持已集成在Parallel Computing Toolbox中,因此可以对所有具有并行性的应用程序进行加速,无论其位于GPU上还是CPU上,并可最终扩展到集群。因此,MATLAB GPU支持只需最少的编程工作,便可将 MATLAB的任务与数据并行化功能扩展到更多硬件平台。

    时间:2018-09-03 关键词: matlab 功能 轻松 强大

  • 基于MATLAB中calibration toolbox的相机标定应用研究

    摘 要: 相机标定的目的是确定相机的几何和光学参数以及相机相对于世界坐标系的方位。calibration toolbox作为一个标定工具,容纳了如Tsai、Faugeras等多种经典的标定方法,从自主标定的使用方面详细介绍了calibration toolbox的使用方法。关键词: 相机标定; MATLAB; 标定工具箱 随着人们对可视化要求的提高,计算机视觉作为一门新兴的高科技学科,被越来越多地应用于产品在线质量监控、微电子器件的自动检测、各种模具三维形状的测量及生产线中机械手的定位与瞄准等[1,2]领域。相机标定作为计算机视觉中最基础的一部分,已形成了很多种标定方法,有关理论问题也得到了较好的解决,当前的研究工作应该集中于如何针对具体的实际应用问题,采用特定的简便、实用、快速、准确的标定方法[3-6]。 MATLAB中的相机标定工具箱(camera calibration toolbox)提供了各种例程以及标定方法,非常详细,甚至还提供了方格型的靶标。用户接口方便灵活,在相机标定时使用非常简单,而且该工具箱的C源码在开源计算机视觉库中开放,为深入学习进行二次开发提供了理想的条件[7-9]。摄像机的标定与相机同理。1 相机标定原理 标定中有3个不同层次的坐标系:世界坐标系、相机坐标系和像平面坐标系(物理坐标系和像素坐标系),如图1所示。1.1 世界坐标系 世界(world)坐标系也称真实或现实世界坐标系,用XwYwZw表示,它是客观世界的绝对坐标(所以也称客观坐标系)。一般的3D场景都用这个坐标系来表示。1.2 相机坐标系 相机坐标系是以相机为中心制定的坐标系,用XcYcZc表示,一般取相机的光学轴为Zc轴。1.3 像平面坐标系 图像物理坐标系是在相机内所形成的像平面xy坐标系,一般取像平面与相机坐标系平面平行。 图像像素坐标系是在相机内所形成的uv坐标系,一般取像平面∏的左上角为原点。 图像上每一点的亮度与物体某个表面点的反射光的强度有关,而图像点在图像平面上的位置仅与相机空间物体的相对方位和相机的内部结构有关,相机的内部结构是由相机的内部参数所决定的。为了描述相机的成像几何关系,需要对相机进行数学建模。通常采用针孔模型,也称为线性模型,这种模型在数学上是三维空间到二维平面的中心投影,由一个3×4矩阵来描述,这种模型是一个(退化的)摄影变换,因此通常又称它为摄影摄像机。1.4 相机标定原理 相机标定是指建立摄像机图像像素位置与场景点位置之间的关系,其途径是根据相机模型,由已知特征点的图像坐标和世界坐标求解相机的模型参数,如图2所示。相机需要标定的模型参数分为内部参数和外部参数,转换关系为: 世界坐标系中的点到相机坐标系的变换可用一个正交变换矩阵R和一个平移变换矩阵T表示,fx、fy、γ、u0、v0是线性模型的内部参数,其中fx、fy分别定义为X和Y方向的等效焦距,u0、v0是图像中心(光轴与图像平面的交点)坐标,γ是u轴和v轴不垂直因子;R和T是旋转矩阵和平移矩阵。若已知矩阵M1、M2,就可建立起世界坐标和像素坐标的对应关系。相机的标定任务就是求出每个变换矩阵中的参数。 由于相机光学系统并不是精确地按理想化的小孔成像原理工作,存在透镜畸变,即物体点在相机成像面上实际所成的像与理想成像之间存在光学畸变误差[2,3]。主要的畸变误差有三类:径向畸变、偏心畸变和薄棱镜畸变,分别用δr、δd、δp表示。第一类只产生镜像位置的偏差,后两类则既产生径向偏差,又产生切向偏差。 考虑畸变后,图像平面理想图像点坐标(Xu,Yu)等于实际图像点坐标(Xd,Yd)与畸变误差之和,即:2 相机标定 相机的输出画面分辨率为3 280×2 460,采用黑白棋盘作为标定模板,模板正方形边长为30 mm。实时标定过程如下: (1)运行标定主函数calib_gui,显示如图3所示模式选择窗口。 通过这个操作,可以选择一次性上传所有标定照片或在电脑内存不足的情况下分张上传。无论选择哪种模式,都会有相同的用户窗口,接下来的标定过程可全部由此窗口完成,如图4所示。

    时间:2018-08-16 关键词: 相机 matlab toolbox calibration

  • MATLAB与VC++混合编程在悬置系统优化平台中的应用

    摘 要: 首先分析了MATLAB与VC++在悬置系统优化设计编程方面的优缺点,接着阐述了悬置系统的优化设计和MATCOM转化法的基本原理,给出了求解固有特性的m文件,通过创建优化平台,结合算例和操作步骤进行混合编程,详细地提出了一种高效的优化设计编程方法。通过在系统平台的应用,表明MATCOM转化法混合编程能无缝结合,大大缩短了优化设计的周期,提高了效率。关键词: MATLAB;VC++;混合编程;优化设计;解耦 在工程计算中,多数工程的实现几乎都要涉及多目标函数的优化,常规的解决办法是运用MATLAB或VC++软件进行编程计算,但目前这些软件都还存在一些不足。一方面MATLAB虽有强大的计算能力和强大的数据处理能力,但是由于程序不能脱离其MATLAB环境运行,限制了程序的通用性和应用开发,不利于后续编程;另一方面Visual C++程序的代码运行效率高,界面设置交互性也比较好,但是由于在函数计算能力方面的不足,很大程度上加大了编程人员对一般数学函数和算法的工作量。通过合适的编译器,结合MATLAB和Visual C++混合编程能有助于界面开发和代码重用,而且算法精确度高,可扩展性强,混合编程连接性较好[1]。 近年来随着动力总成悬置系统设计工程的发展,绝大部分研发人员在系统设计时以系统的固有频率和解耦程度为合理设计目标,运用MATLAB的GUI界面实现优化面板设计,这在一定程度上可以很好地提高运算能力,但却制约了程序升级和改进的可扩展性能力。针对这些工程问题,本文提出了一种基于MATCOM转换法的VC++与MATLAB混合编程。传统的VC++与MATLAB混合编程一般是在VC++环境下调用MATLAB编写的函数,在函数参数传递方面多用MATLAB编写优化算法函数,总是将目标函数的匿名函数作为其参数之一,以此来达到优化目标函数的目的。然而在C++语言中是不能将函数作为参数调用的,关于VC++与MATLAB混编参数调用这方面的文章也相当少,本文提出了一种解决上述参数调用的方法。由于混编后的程序可以脱离MATLAB运行,程序的速度和效率都得到了极大的提升。本文充分发挥MATCOM转换法的优势,将高难度的算法研究与实际应用结合在一起,达到了程序简洁、编程效率提高和算法更易实现的目的。1 悬置系统优化分析1.1 悬置系统优化原理分析 一般情况下,都是把动力总成视为刚体,同时把动力总成悬置系统视为有3个移动自由度和3个转动自由度的一个空间6自由度振动系统,对应6个模态,包括前后移动模态、左右移动模态、上下移动模态、横向转动模态、纵向转动模态和左右转动模态,悬置系统模型如图1所示。 目前应用比较普遍的模态解耦度评价指标是用模态的能量比值概念来表示的。第j阶振型中第k个自由度的振动能量占该阶运动总能量的百分比可以表示为: 采用第二种MATCOM转化法,结合算例,将MATLAB中计算函数的m文件转化为VC++可识别的文件;接着,通过创建VC++工程,将所需文件加入工程目录中。2 VC++与MATLAB混合编程的实现

    时间:2018-10-03 关键词: 平台 vc matlab 系统优化

  • 基于Matlab GUI的整流电路仿真

    整流电路是电力电子电路中出现最早的一种,它的作用是将交流电能变为直流电能供给直流用电设备,整流电路的应用十分广泛。在整流电路的设计过程中,需要对设计电路及有关参数选择是否合理、效果好坏进行验证。如果通过实验来验证,需要经过反复多次的元件安装、调试、重新设计等步骤,这样使得设计耗资大,效率低,周期长。现代计算机仿真技术为电力电子电路的设计和分析提供了崭新的方法,可以使复杂的电力电子电路、系统的分析和设计变得更加容易和有效。Matlab是一种计算机仿真软件,它是以矩阵为基础的交互式程序计算语言。Simulink是基于框图的仿真平台,它挂接在Matlab环境上,以Matlab的强大计算功能为基础,用直观的模块框图进行仿真和计算。其中的电力系统(Power System)工具箱是专用于RLC电路、电力电子电路、电机传动控制系统和电力系统仿真用的模型库。它具有丰富的器件模型和齐全的分析功能,且操作方便。随着对仿真和程序设计通用性及可视化需求的日益增加,Matlab的图形用户界面(GUI)应用也越来越广泛,功能越来越强大。以Matlab 7.1为设计平台,利用Simulink中的Power System工具箱来搭建整流电路仿真模型,并通过Matlab GUI设计整流电路的分析界面。1 整流电路仿真模型整流电路又称交-直流变流器,在整流的同时还对直流电压电流进行调整,以符合用电设备的要求。按不同的分类方式,整流电路的种类非常多,其中单相桥式全控整流电路和三相桥式全控整流电路最为典型。以单相桥式全控整流电路为例,说明其仿真模型的建立。1.1 单相桥式全控整流电路构成单相桥式全控整流电路(纯电阻负载)如图1所示,电路由交流电源u1、整流变压器T 、晶闸管VT1~VT4 、负载电阻R以及触发电路组成。在变压器次级电压u2的正半周触发晶闸管VT1和VT3;在u2的负半周触发晶闸管VT2和VT4,则负载上可以得到方向不变的直流电,改变晶闸管的控制角可以调节输出直流电压和电路的大小。图1 单相桥式全控整流电路原理图1.2 单相桥式全控整流电路模型建立根据单相桥式全控整流电路原理图,在Simulink的Power System工具箱里提取交流电源、晶闸管、RLC 串联电路、脉冲发生器、变压器、示波器等元器件。在Simulink操作平台上连接这些模块,构成单相桥式全控整流电路模型,如图2所示。图2 单相桥式整流电路仿真模型图1.3 模型参数设置双击仿真模型中的各个模块弹出参数设置对话框,就可进行参数设置。在整流电路中,改变晶闸管触发角a,输出直流电压和电流的大小就得到改变。因此触发角a的设置是电路参数中的重要一项。晶闸管的触发采用脉冲触发器(Pulse Generator)产生,脉冲发生器的脉冲周期Td必须和交流电源u2同步,晶闸管的控制角a以脉冲的延迟时间t来表示,t=aTd/360 °。其中,Td=1/f,f为交流电源频率。仿真算法选择ODE23TB算法,当电路带阻感性负载时,应保证触发脉冲具有足够的宽度。2 整流电路GUI界面开发整流电路仿真模型参数的选择十分关键,它直接影响到仿真结果和仿真质量,从而进一步影响到整流电路的设计。为了满足整流电路更高的性能指标,在仿真过程中,就需要不断地修改和设置参数而*费大量时间。另外,还需要反复地打开示波器察看仿真结果,不仅过程繁琐,且效率很低。因此,本文借助Matlab GUI建立了一个整流电路仿真界面,通过此界面,用户可以很方便地在中文名称环境下来设置参数,选择模型等,仿真结果也会直接在界面上显示出来,不仅方便快捷,且大大提高了仿真效率。2.1Matlab GUI的实现方法Matlab可视化界面的设计方法一般有2种:一是直接通过Matlab的脚本文件来实现GUI;另一种是通过Matlab图形用户界面开发环境GUIDE来实现图形界面。Matlab软件GUIDE为用户提供了一个方便高效的集成环境,所有GUI支持的用户控件都集成在这个环境中,并提供界面外观、属性和行为响应方式的设置方法。一般而言,由于界面中的控件对象属性、行为,既可以在界面中实现,也可以在生成的M文件中用m语言代码在相应的代码段中实现。因此,使用第2种方法实现图形用户界面虽然会给编程人员在修改和重新编辑界面时带来一定的麻烦,但是,其设计过程较为直观、简单,开发周期短。在此,采用第2种方法来实现整流电路的仿真界面。2.2 仿真界面的开发整流电路仿真界面由选择界面和主界面两部分组成,选择界面如图3所示。在选择界面中,把整流电路分为单相桥式全控整流电路、三相桥式全控整流电路和带容性负载的三相不可控桥式整流电路3种。每种电路有相应的电路说明,点击“电路说明”会弹出该电路的工作原理、特性等内容,点击每种电路后的“进入”按钮,即可进入相应电路的主界面。为了保持界面风格的一致性,三类整流电路的主界面设计相似,如点击单相桥式全控整流电路的“电路说明”,弹出其电路说明图如图4所示,单击“进入”,弹出其主界面图如图5所示。电路仿真的主界面分为电路原理图显示区、参数设置区、波形显示区、功能按钮区以及相应的菜单区。图3 整流电路选择界面图4 电路说明界面图5 仿真主界面2.3 仿真主界面的实现打开控件的各个属性进行设置,包括控件的背景色、前景色、Tag值、String值、Value值等。编写相应控件的程序代码,以实现相应的功能。(1)电路原理图的显示。电路原理图是用一个数轴显示的,程序代码为:imread函数用于读取电路原理图图片,显示图片用' image '函数,代码' axis off '的作用是将数轴的坐标去掉。(2)模型参数的设置。参数设置包括负载参数以及仿真时间、电源电压和脉冲发生器的参数设置。设置参数后,点击“仿真”按钮,仿真波形在显示窗口动态显示出来,如同示波器一样。电阻值的设置先用' get '函数来读取电阻值文本框中的数值,再用'set _ param' 函数将读取的数值写入Simulink电阻模块中。仿真时间的设置既可用滑动条又可用编辑文本框。移动滑动条上的滑块位置就可改变滑动条提供的数值,文本框中的参数也会随之改变,反之亦然。文本框和滑动条之间的数据传递用语句:ldT = get(handles. Sli,'Value');set(hObject,'String',OldT)实现。电源电压和脉冲发生器参数的设置采用调用模块封装界面的方法来实现,利用'open_system' 函数,打开模块参数进行设置。(3)仿真波形在主界面的显示。在Simulink模型中,把要显示的波形数据导入workspace当中,再利用plot(tout ,yout)命令画出图形,显示在主界面上。为了在界面指定的坐标轴中输出图形,只要在plot命令执行前添加axes(h_ax es)代码即可。(4)辅助功能的实现。为了优化仿真界面的功能,系统设有一些辅助功能,如栅格开关,显示其他图形、返回和退出等。"栅格开关"是对显示区域的栅格控制,栅格的开与关分别对应'grid on '的选中与否。相关代码为:单击"显示其他波形",即可进入其他波形显示界面,如图6所示。能显示晶闸管的电压、电流波形和触发脉冲的波形,这样既可节省仿真主界面的空间,又可加强仿真界面的层次感。图6 显示其他波形界面(5)菜单的实现。菜单的实现采用的是GUI的uimenu菜单设计,包括"文件"、"负载类型"、"其他"三项。其中"文件"和"其他"菜单的下拉菜单的功能是对界面功能的同一表现,"负载类型"的下拉菜单包括电阻负载和阻感负载,界面的关闭和打开分别用到delete和figure函数。即如果选择阻感负载,系统会关闭纯电阻负载变流电路的仿真界面figure(bisheshiyan4),打开阻感负载的仿真界面figure(danxiangzugan)。由主界面仿真图来看,从对各项参数的设置到仿真运行再到结果显示整个过程操作方便,加上辅助工具的使用,使仿真结果一目了然,对比清晰。如果对仿真结果不满意,可以重新设置参数继续进行仿真。仿真结束后,可以选择"退出"按钮退出当前界面。界面友好,操作简单。3 结语计算机仿真技术是研究电力电子技术的有效手段,它可以辅助工程设计、分析和研究, 也可以辅助教学。本文利用仿真软件Matlab的Simulink和Power System工具箱对应用广泛的整流电路进行建模,并利用Matlab GUI功能建立了整流电路的仿真界面,该界面集参数设置、电路说明、模型修改、模型查看、仿真操作、结果显示和结果显示辅助工具等为一体,大大减化了仿真操作流程,极大提高仿真测试效率。整流电路仿真界面既为实际系统的元件参数选择提供帮助,也为其他变流电路系统界面的开发提供参考。作者:安树 赵霞 徐小华 来源:《现代电子技术》2011年04期

    时间:2018-07-26 关键词: 电路 matlab gui

  • 基于Matlab的FIR数字滤波器的优化设计

    摘要 通过实例介绍了基于Matlab的FIR滤波器的优化设计方法。3种结果比较发现,在同样阶数下,优化设计可以获得最佳的频率特性和衰耗特性。关键词 数字滤波器;Matlab;FIR;IIR;优化设计 数字滤波在数字信号处理中,占有重要的地位。数字滤波包括FIR和IIR两种滤波方式,其中FIR滤波具有很多优点,可以在幅度特性随意设计的同时,保证精确、严格的线性相位,滤波稳定,不会出现递归型结构中的极限振荡等不稳定现象,且误差较小,可采用FFT算法实现,因此运算效率高。设计FIR滤波器常用的方法有窗函数法与频率抽样法,但是这两种方法均不易精确控制通带与阻带的边界频率,所以在实际应用中有一定的局限性。文中用Matlab语言实现了最佳等波纹FIR滤波器的设计,通过比较显示了它在等波纹方脉冲响应方面的优化特性。1 FIR滤波器优化设计法 Matlab信号工具箱中提供的Remez函数可对数字滤波器进行优化设计,得到的数字滤波器具有等波纹特性,Remez函数实现Parks McClel-lan算法,即采用数字分析中的Remez算法和切比雪夫最佳一致逼近理论来设计,使实际频响拟合期望频率响应最优。使用Remez算法设计滤波器,首先需根据要求确定滤波器阶数。利用Remezord函数可以确定滤波器阶数n,归一化的各频带边界频率fo,归一化的各频带幅度值ao,加权系数w,其格式如下:[n,fo,ao,w]=remezord(f,a,dev)。Remezord输入参数的含义为向量f指定各频带边界频率,在 0~Fs/2之间取值。向量a指定各频带的幅度响应。f的长度是length(f)=2×length(a)-2,必须为偶数。第一频带总是从0开始,最后一个频带到Fs/2结束。向量dev指定设计出的滤波器和理想滤波器的幅度响应在每个频带的最大允许误差,因此与向量a的长度相等。2 FIR滤波器设计实例 分别使用窗函数法,频率取样,优化设计法,设计一个线性相位的带通滤波器。带通滤波器的通带为1 300~2 210 Hz,阻带O~1 000 Hz,2 410~4 000 Hz,通带最大波动为1 dB,阻带最小衰减为35 dB。设计流程是:(1)输入滤波器技术要求N,Hd(w),W(ω)。(2)按要求的滤波器类型求出W(ω),Hd(w),P(ω)。(3)给出M+2 个交错点组频率初始值ω(i),i=O,1;2,…,M+1。(4)调用Remez算法程序求解最佳极值频率和P(ω)的系数。(5)计算单位脉冲响应 h(n)。(6)输出最佳误差和h(n)。 如图1~图3为3种带通数字滤波器的仿真结果,可以看出在同样阶数下,使用优化设计方法设计的滤波器,无论是通带还是阻带都较平坦、过渡带比较窄且阻带衰减好。3 结束语 比较3种数字滤波器的设计方法可得以下结论: (1)采用窗函数法设计简单、方便、实用。但用计算机不易控制边界频率。 (2)由于窗函数法是从时域角度给出的设计方法,但一般情况都是频域角度给出,频率采样法恰好是从频域角度进行设计,比较直观,但边界频率不易控制。增加采样点数N对确定有好处,但采样点数N增大会增加滤波器的成本。 (3)同样阶数下使用优化设计方法所设计的滤波器,无论是通带还是阻带都较平坦、过渡带较窄且阻带衰减好。

    时间:2018-05-22 关键词: matlab fir 数字滤波器 优化设计

  • Matlab在电力电子技术仿真中的应用

      1. 引言  20世纪60年代发展起来的电力电子技术,使电能可以变换和控制,产生了现代各种高效、节能的新型电源和交直流调速装置,为工业生产、交通运输、楼宇、办公、家庭自动化提供了现代化的高新技术。为了更高效的利用电能,不断的有新控制技术和算法出现。那么如何验证这些算法的好坏呢?建立模型仿真是最有效,最经济的一种形式。  在实际的工程应用中,我们要经常需要改善系统的运行性能,提高系统的效益。而系统又通常是复杂的非线性的,在仿真的基础上加以实现就比较容易。电力电子技术仿真的所有元件模型都包含在MATLAB的电力系统模块环境中。在MATLAB提示符下键入powerlib命令。这个命令将打开simulink窗口。同时展示了电力系统模块工具箱中的不同子模块工具箱。在psb中几乎提供了组成电力系统的所有元件,元件模型丰富,包括:同步机,异步机,变压器,直流机,线性和非线性,有名的和标么值系统的,不同仿真精度的设备模型库,单相,三相的分布和集中参数的传输线,单相,三相断路器及各种电力系统的负荷模型,电力半导体器件库以及控制测量环节, 信号显示和模块连接等一般可以在simulink工具箱中找到。  2. 电力电子变流技术——三相全桥整流仿真  2.1整流器件  晶闸管及电力晶体管等是主要的电力电子器件,也就是说没有这些器件就没有电力电子技术,电力电子技术的核心是电力变换也就是变流技术。通过对晶闸管等器件的控制从而实现电力变换。  晶闸管整流是电力电子技术中最基础的变流技术,通过它可以实现电流从交流到直流的变换。在MATLAB仿真中可以由SimPowersystem模块中提供的电力电子模块PowerElectronic中的Thyristor来提供仿真模块实现。  2.2 模型建立  三相桥式整流电路是电力电子变流技术中非常重要的一个功能,它不仅可以将交流电压转换成直流电压,以用作直流电动机的直流电源,还可调节电动机电枢电压以进行电动机的调速。在电力电子变流电路中,三相桥式整流电路应用十分广泛,鉴于它在工业应用中的广泛性,这里以一,这里以一个带感性负荷的三相桥式整流电路为例,介绍如何运用Matlab/Simulink对它进行仿真。三相桥式整流电路的原理图如图一所示:  图一:三相桥式整流电路原理图  根据原理可以利用Simulink内的模块建立图二所示的仿真模型。设置三个交流电压源Va、Vb、Vc相角依次相差120,得到整流桥的三相电源。用6个Thyristor构成整流桥,实现交流电压到直流电压的转换。6 pulse convertor产生整流桥的触发脉冲。6个pulse convertor从上到下分别给1到6号晶闸管触发脉冲。  2.2 参数设置  2.2.1 触发脉冲的设置  给图二中的每个脉冲发生器(pulse generator)设合理的参数,从而获得三相整流桥所要求的触发脉冲。以使得触发角为30。为例,参数设置如下:  A、周期(s)0.02  B、脉冲占空比 25%  C、幅值 0.1  每个脉冲发生器这几项的参数设置均相同,不同之处在于开始时间start time的设置,这一参数用于设定触发角。为获得30。的触发角,可以设定脉冲发生器1的start time 为0.02/12+0.02/12。第i个 脉冲发生器(i=2,...,6)为0.02/12+0.02/12+0.02(i-1)/6。使得每个触发脉冲相差60度,实现整流触发。  图二 仿真模型  2.2.2 设置晶闸管的参数  电路工作正常时,6个晶闸管的参数设置:  电阻 0.1  电感 10e-6  直流电压源电压: 0  初始电流 0  缓冲电阻 103  缓冲电容 0.1e-6  2.2.3三相交流电源及负载设置  三相交流电源参数及负载参数设置如下:  负载参数设置如下:(阻感负载)  电阻 0.2  电感 20e-3  电容 inf(使电源为感性)  3 仿真结果分析  3.1正常情况下的仿真  首先对建立的正常情况下的仿真模型进行仿真,其仿真参数设置为:  开始时间: 0.04s(晶闸管第一次触发时间);  停止时间: 0.2s;  仿真算法: 可变步长的数值微分公式算法。  运行仿真程序可以得到正常的仿真波形如图三所示:  图三 正常的电压仿真波形  3.2故障波形仿真  晶闸管出现故障的几率较大,共有四种故障分别为:  3.3 仿真结果分析:  观察以上波形,对应图(a)正常工作时,每个周期(T=O.02s)连续输出6个波头,每个波头均为60度。图(a)每个周期连续少两个波头,两个波头为120度。由于正常工作时每个桥臂导通120度,因此可判定图(a)对应为有一个桥臂不导通,即有一个晶闸管发生故障。图(b)每个半周期有一个波头,再连续少两个,一个周期共少了4个波头,三相桥式电路应输出6个波头,不难看出此时只有两相导电,另一相的两个桥臂不通,即接在同一相的两个晶闸管故障。图(c)每个周期有两个连续波头,接着少了4个连续波头,由于正常情况时输出电压波形6个波头的顺序可判定接在同一半桥的两个桥臂不导通。图(d)每个周期连续输出3个波头,接着连续少了3个波头,容易得出该图对应不同相的交叉的两个晶闸管故障。可见由波形得到故障形式与设定故障形式得到仿真波形的结果是一致的。  同时,还可以利用触发脉冲参数的改变仿真不同负载与不同触发角情况下的波形,通过对电压波形的分析,我们可以了解三相全控桥的故障状态从而及时的发现与解决故障。  4 总结  通过对电力电子技术中最有代表作用的三相全控桥的仿真实现,可以看出利用matlab中的powerlib工具箱对可以对电力电子技术仿真具产生极大的现实价值,为电力电子设备的开发提供有力的帮助。

    时间:2018-05-22 关键词: 电力 电子技术 matlab

  • 多元多峰值目标函数在MATLAB中的优化

    摘 要: 采用MATLAB的遗传算法,利用强大的数学计算能力和遗传工具箱,在全局搜索空间内寻找极值点,能够有效地对多元多峰值函数进行优化,避免了利用传统优化方法在多元多峰值函数优化过程中陷入局部极值点的优化误区。同时简要介绍了遗传算法的特点、流程和优化工具箱,通过实际编程优化,说明基于MATLAB的遗传算法是一种具有良好的全局寻优的优化工具。关键词: 遗传算法;全局寻优;多元多峰值函数优化 多元多峰值函数[1-2]在定义域内有多个局部极值点,许多传统的优化方法都是单点搜索,这种点对点的搜索方法,对于多元多峰值函数的搜索空间常常会陷入局部的某个单峰的极值点。相反,遗传算法同时对群体中多个个体进行并行处理[3],即同时对搜索空间中的多个解进行评估,在搜索过程中能以很大的概率找到全局最优。遗传算法提供了一种求解非线性、多模型、多目标等复杂系统优化问题的通用框架,它不依赖问题领域的具体性,已广泛应用于众多工程领域,用以解决多变量、多目标、多峰值等约束的优化问题。1 遗传算法1.1 遗传算法的优点 (1)遗传算法采用不确定性规则,强调利用概率转换规则[4]来引导搜索过程; (2)遗传算法随机产生多个初始点,通过选择、交叉和变异三种遗传操作产生下一代种群; (3)遗传算法具有较高的搜索能力和极强的鲁棒性; (4)遗传算法采用概率的变迁规则来指导其搜索方向[5],对一个被编码的参数空间进行高效搜索; (5)遗传算法是一个多学科相结合与渗透的产物,其研究方向极其广泛。1.2 遗传算法运算流程 完整的遗传算法的运算流程可以用图1来描述。可以看出,使用上述三种遗传算子(选择、交叉和变异)的遗传算法的主要运算过程如下: (1)编码:遗传算法在进行搜索之前先将解空间的解数据表示成遗传空间的基因型串结构数据,这些串结构数据的不同组合就构成了不同的点。 (2)初始群体的生成:随机产生N个初始串结构数据,每个串结构数据成为一个个体,N个个体构成一个群体。设置进化代数计算器t(t>0)和最大进化代数T。 (3)适应度值评价检测:根据具体问题,计算群体P(t)中各个个体的适应度。 (4)对群体中的个体施加遗传操作:将选择、交叉和变异三种遗传算子作用于群体,实现群体内个体结构的重组处理。 (5)终止条件判断:若t≤T,则t←t+1,转到步骤(2);若t>T,则以进化过程中所得到的具有最大适应度的个体作为最优解输出,终止运算。2 基于MATLAB遗传工具箱的多元多峰值优化 遗传算法工具箱使用MATLAB矩阵函数为实现广泛领域的遗传算法建立了一套通用工具,这个遗传算法工具是用M文件写成的命令行形式的函数,是完成遗传算法大部分重要功能的程序集合[6-8]。 MATLAB遗传工具箱主要参数含义: (1)“@fitnessfcn”:计算适应度函数值的M文件的函数句柄; (2)“nvars”:适应度函数中独立变量的个数; (3)“x”:最终值的到达点; (4)“fval”:适应度函数在x点的值; (5)“reason”:算法停止的原因(可选项); (6)“output”:包含关于算法在每一代性能的结构体(可选项); (7)“population”:最后种群(可选项); (8)“option”:一个包含遗传算法选项参数的结构体(可选项)。 如果不设置选项函数,则遗传算法使用其本身自带的缺省选项值。该参数结构体的自带默认值分别为:种群规模为20,最大代数为100,选择概率为0.8,交叉概率为0.5,变异概率为0.2。也可通过gaoptimset函数改变默认值,以达到使用者的需求。

    时间:2018-08-27 关键词: 峰值 matlab 函数 目标

  • 模糊序贯决策算法优化设计及Matlab实现

    摘 要: 对模糊序贯决策算法进行了优化设计,构建了一种基于模糊关系矩阵的模糊序贯决策算法,并利用Matlab 程序实现了算法,给出了源程序,通过实例分析说明了算法的简洁性。关键词: 模糊序贯决策算法;模糊目标约束向量;模糊输入约束向量;Matlab实现 决策是人们在科学技术和日常生活中普遍存在的一种选择方案行为,许多实际问题是由多个按时间顺序相互关联的决策阶段组成的[1]。在每一个决策阶段,选择一个合理的方案,依次作出决策以实现整个决策过程最优化的决策问题称为序贯决策问题,也称为动态决策问题。实际上有许多问题往往是不确定的、模糊的,人们很难做出判断。基于模糊集理论的模糊决策为这类问题的解决提供了有效的方法和技术。模糊决策是从一个阶段的状态转移到下一个阶段某个状态时的选择,由模糊目标和模糊约束共同决定[2]。模糊序贯决策就是给定最终的目标,选择系统的最佳控制序列,使各部分的状态最优,也称为模糊动态规划。许多学者对模糊动态规划理论和应用研究做了大量的工作。本文鉴于模糊序贯决策算法的复杂性,对其进行了优化设计,构建了一种基于模糊关系矩阵的模糊序贯决策算法。 Matlab是MathWorks公司于1984年推出的用于基本矩阵运算的强大数值计算软件, 在许多领域得到了充分的利用。本文的模糊序贯决策算法在每个阶段都要做模糊矩阵合成运算,从而得到下一阶段的模糊目标约束向量,这样当阶段数较大时,计算量很大。针对Matlab 软件在矩阵运算方面的优势,提出了基于Matlab编程方法的模糊序贯决策方法,从而方便、快捷地得到系统的最佳控制序列。这对模糊决策理论的发展与应用具有一定的意义。3 情况吸收过程模糊序贯决策实例分析 根据参考文献[1]中实例,某蔗糖酯(SE)情报研究课题组根据课题要求,拟定研究报告由5方面知识内容组成:SE的性质和功能、用途与应用、市场需求状况、合成工艺评价、产品方案与生产规模的可行性等。为此,将整个情报研究过程分为5个阶段,并按研究报告的5个方面知识组成。每阶段的情报分析侧重其中一项内容,但又兼顾其他4方面知识,以形成该阶段的知识结构状态。 第1阶段,主要分析SE的性质与功能,知识结构状态为x1;第2阶段,主要分析SE的用途与应用,知识结构状态为x2;第3阶段,主要进行市场分析,知识结构状态为x3;第4阶段,主要进行工艺评价,知识结构状态为x4;第5阶段,主要研究生产可行性,知识结构状态为x5。 这样,SE情报吸收系统的知识结构状态集为X={x1,x2,x3,x4,x5},并按上述5个方面知识要求,将情报资料分成3类(因一份情报资料往往包含多方面知识内容,而且有的知识内容如生产可行性尚无现成情报资料之故)。因此,SE情报信息吸收的输入控制变量为U={u1,u2,u3},按照二类情报资料所含知识的特点, 在情报研究者的情报吸收能力正常的状况下, 其知识结构的状态转移矩阵如下:

    时间:2018-07-16 关键词: 算法 matlab 模糊 优化设计

  • 基于Matlab GUI的数字滤波器设计及其应用

    摘 要: 基于数字信号处理原理,在分析数字滤波器设计理论和Matlab编程技术及其GUI图形用户界面设计的基础上,开发了具有交互式特点的数字滤波器软件,界面操作简单方便,可以根据需要选择滤波器类型,输入相关参数,然后选择相应的功能按钮,就可以得到滤波器的特性参数,并进行滤波器的性能分析,打破了以往滤波器设计过程中大量繁琐的数值计算问题,为数字滤波器的设计和应用提供了一个有效的辅助工具。关键词: 数字信号处理; 数字滤波器; Matlab GUI; 图像处理; 语音信号处理 数字滤波器通常通过一定的运算关系改变输入信号所含频率成分的相对比例或者滤除某些频率成分来实现滤波,其应用非常广泛。然而, 在传统数字滤波器的设计过程中需要大量繁琐的数值计算,如果手工计算则费时费力。目前,数字滤波器的设计常借助计算机,利用Matlab软件来实现。Matlab中的图形界面编程环境GUIDE为用户开发软件界面提供了强有力的工具。本文在Matlab GUI基础上开发了数字滤波器的设计分析软件,并设计开发了应用于图像处理和语音信号处理模块。用户在使用时只需输入要设计的滤波器所需参数值,选择要设计的滤波器类型,即在分析滤波器特性时选择相应功能按钮就能得出对应的特性。该工具解决了用户在设计数字滤波器时大量繁琐的数值计算,不仅可以作为研究设计数字滤波器的辅助工具,还可以作为相关课程的辅助教学软件。1 Matlab GUI设计工具简介 Matlab是一个面向科学与工程的计算软件,它将不同领域的计算用函数的形式提供给用户;用户在使用时,只需调用这些函数并赋予实际参数就能解决实际问题[1]。它涉及数值分析、自动控制、信号处理、图像处理、小波分析及神经网络等几十个领域的计算和图形显示。在Matlab中设计数字滤波器软件的工具有GUI与FDATool,两个工具都可以设计出数字滤波器。FDATool工具可以快速设计各种类型的滤波器,但是这个工具界面单一,用户无法根据需要来设计满意的界面。而图形用户界面GUI(Graphical User Inter-face)的设计是非常灵活的,它主要是一个界面设计工具集,Matlab将所有GUI支持的控件都集成在这个环境中,并可进行各项属性设置[2];用户设计好的图形用户界面保存后生成一个.fig文件,同时自动生成包含图形用户界面初始化和组件界面布局控制代码的M文件,为实现回调函数的编写提供了一个参考框架,包含GUI设计、控制函数及控件的回调函数,主要用来控制GUI展开时的各种特征[3]。对于熟练编程者,不需要GUI向导,直接编写M程序即可生成人机交互的有效图形用户界面。2 数字滤波器的设计理论2.1系统设计主流程及主界面 系统设计主流程如图1所示,系统主功能操作界面设计如图2所示。2.2 数字滤波器的设计步骤(1)确定指标:在设计一个滤波器之前,必须首先根据实际的工程需要确定滤波器的技术指标。通常选择数字滤波器实现选频操作。因此,指标的形式一般在频域中给出幅度和相位响应。幅度指标主要以两种方式给出:①绝对指标,它提供对幅度响应函数的要求,一般应用于FIR滤波器的设计;②相对指标,它以分贝值的形式给出要求,在工程实际应用中,这种指标最受欢迎。对于相位响应指标形式,通常希望系统在通频带内有线性相位。运用线性相位响应指标进行滤波器设计具有如下优点:①只包含实数算法,不涉及复数运算;②不存在延迟失真,只有固定数量的延迟;③长度为N的滤波器(阶数为N-1),计算量为N/2数量级。因此,本文中滤波器的设计就以线性相位FIR滤波器的设计为例。(2)逼近:确定了技术指标后,就可以建立目标数字滤波器模型。通常采用理想的数字滤波器模型。之后,利用数字滤波器的设计方法,设计出一个实际滤波器模型来逼近给定的目标。(3)性能分析和计算机仿真:上两步的结果是得到以差分、系统函数或冲激响应描述的滤波器。根据这个描述就可以分析其频率特性和相位特性,以验证设计结果是否满足指标要求;或者利用计算机仿真实现设计的滤波器,再分析滤波结果来判断。2.3 IIR数字滤波器的Matlab设计 Matlab信号处理工具箱提供了几个直接设计IIR数字滤波器的函数,这些函数把IIR数字滤波器典型设计中的复杂实现过程集成为一个整体,为设计IIR数字滤波器带来了极大的方便[4]。主要函数有:(1)函数butter:设计Butterworth滤波器,其特性是通带内的幅度响应最大限度的平滑,但损失了截止频率处的下降斜度。(2)函数chebyl:设计Chebyshev I型滤波器,其通带内为等波纹,阻带内为单调。Chebyshev I型滤波器的下降斜度比II型大,但其代价是通带内波纹较大。(3)函数cheby2:设计Chebyshev II型滤波器,其通带内为单调,阻带内等波纹。Chebyshev II型滤波器的下降斜度比I型小,但其阻带内波纹较大。(4)函数ellip:设计椭圆滤波器,与前几种滤波器相比,ellip函数可以得到下降斜度更大的滤波器,得到通带和阻带均为等波纹;一般情况下,椭圆滤波器能以最低的阶实现指定的性能指标。以上4种函数都可以设计低通、高通、带通和带阻的数字和模拟滤波器。 IIR数字滤波器在系统中界面设计如图3所示,其中左方为滤波器类型、通带选择及参数输入区,可以根据需要在Butterworth型、Chebyshev I型、Chebyshev II型和椭圆滤波器4种类型中选择任意一种滤波器,并且可以在低通、高通、带通和带阻4种通带中选择任意一种,然后输入相关参数,点击“运行”按钮,就可以设计出相应的IIR数字滤波器;右上方曲线为滤波器的幅频响应图,右下方曲线为滤波器的相频响应图。图3为Chebyshev I型带通IIR数字滤波器在系统中的设计实现,其他类型IIR数字滤波器设计界面与之类似。2.4 FIR数字滤波器的Matlab设计 FIR滤波器通常采用窗函数法设计。窗函数法设计FIR滤波器的基本思想是:根据给定的滤波器技术指标,选择滤波器长度N和窗函数ω(n),使其具有最窄宽度的主瓣和最小的旁瓣,其核心是从给定的频率特性,通过加窗确定有限长单位脉冲响应序列h(n)[5]。工程中常用的窗函数共有7种,即矩形窗(Boxcar)、三角窗(Triang)、巴特利特(Bartlett)窗、汉宁(Hanning)窗、汉明(Hamming)窗、布莱克曼(Blackman)窗和凯塞(Kaiser)窗。  FIR数字滤波器设计界面如图4所示,其中左边为滤波器类型、通带选择及参数输入区,可以根据需要在Boxcar、Triang、Bartlett、Hanning、 Hamming、 Blackman和Kaiser等7种窗函数中选择任意一种设计滤波器,并且可以在低通、高通、带通和带阻4种通带中选择任意一种,然后输入相关参数,点击“运行”按钮,就可以设计出相应的FIR数字滤波器;右上方曲线为滤波器的幅频响应图,右下方曲线为滤波器的相频响应图。图4为Kaiser型高通FIR数字滤波器在系统中的设计实现,其他类型FIR数字滤波器设计界面与之类似。3 数字滤波器的应用设计3.1数字滤波器在图像处理中的应用 设图像信号f(x,y)通过线性不变系统h(x,y)的结果是g(x,y),即g(x,y)=f(x,y)*h(x,y),根据卷积定理,在频域上应有G(u,v)=F(u,v)*H(u,v)。其中,G(u,v)、F(u,v)、H(u,v)分别是g(x,y)、f(x,y)和h(x,y)的傅里叶变换[6]。频域增强的主要步骤是:(1)计算图像的傅里叶变换;(2)将其与一个根据要求设计的转移函数相乘; (3)再将其结果进行傅里叶反变换得到增强的图像。实际上,图像的能量大部分集中在幅频的低频和中频段,而图像的边缘和噪声对应于高频部分。因此,数字滤波器在图像处理中主要应用于低通和高通滤波,低通滤波能降低高频成分幅度,过滤噪声,以减弱噪声的影响,以增强图像;而高通滤波使图中各区域的边界得到较显著增强的同时滤掉了低频分量,使图中原来较平滑区域内部的灰度动态范围被压缩,因而整幅图像变得比较昏暗,但图像的轮廓却十分明显。 数字滤波器在图像处理中的应用设计界面,可以根据需要在低通、高通滤波器之间选择,然后调入要处理图像,点击“处理图像”按钮,即可看到图像滤波效果。图5为数字滤波器在图像处理方向的低通应用设计界面,右上图为原始图像,右下图为加入了噪声后的图像,左下图为经过低通滤波后的图像。从图5可以看出,低通滤波器能有效地过滤图像中的高频加性噪声,增强图像。

    时间:2018-08-03 关键词: matlab gui 数字滤波器 及其应用

  • 基于Matlab的雷达系统仿真软件包设计与实现

    基于Matlab的雷达系统仿真软件包设计与实现

    0 引言近些年来国际上相继发展了一些雷达仿真系统,而国内相控阵雷达系统和脉冲压缩雷达系统仿真软件的研究已经成为一个热点。对于一个复杂的雷达系统,系统建模与仿真技术是雷达系统设计和研究的一个重要方向和发展趋势。这些仿真软件系统主要是为工程设计人员服务的,具有较高的实用参考价值。基于此,本文参考了上述雷达系统的仿真思想,利用Matlab图形用户界面开发出一套供学生自学、教师教学的雷达系统分析辅助教学软件包。该软件包主要立足于教学自学辅助软件,供学习者高效理解和掌握雷达系统分析的相关知识。在各种教学实验软件中,往往只限于Matlab的编程实现,而在贴近学习者需求和多媒体学习中尚有不足之处。Matlab具有非常强大的数值计算、数据分析处理等功能,然而Matlab程序是一种解释执行程序,不用编译等预处理,导致程序运行速度较慢。VC具有很高的编码效率,可对操作系统和应用程序以及硬件进行直接操作。因此,该软件包利用Matlab和VC混合编程,提高了代码的运行效率,发挥了两种语言的长处。运行结果表明,该软件包具有良好的人机交互功能、较高的软件运行速率和丰富的多媒体学习方式。1 利用VC和Matlab混合编程实现MEX文件在Matlab和VC混合编程中,它们可分为在Matlab中调用VC程序和在VC中调用Matlab两个方面。前者旨在弥补 Matlab程序所不能实现的软件功能或者解决Matlab运行速度过慢的缺陷;后者一般是为了在VC环境下调用Matlab程序,充分利用Matlab 在矩阵计算、数据分析方面的强大优势。在Matlab与VC混合编程之前,首先要对Matlab的编译应用程序max和编译器mbuild进行正确的设置。对MEX编译器进行设置并生成配置文件即一个后缀为bat的批处理文件,它是通过在Matlab命令窗口输入命令:mex-setup,然后按照输出信息提示选择编译器和路径实现的。Ma- tlab调用VC的方式主要有两种:利用MEX技术和VC动态链接库。本文通过调用VC动态链接库来编写mexrun文件。实际上,在Matlab环境中就可以方便地编辑MEX文件,但对于大型的MEX程序,可能会比较复杂,容易出错,这时就可以利用Visual C++强大的调试功能。图1给出在VC环境中建立MEX文件的过程。Matlab提供了对动态链接库DLL文件的接口,且其接口支持VC编写的DLL文件,因此在对m文件进行编译后会产生一个与mexrun.cpp同名的 mexrun.dll动态链接库文件。这样在Matlab的m文件中就可以直接回调mexrun()函数。通过VC来编写mexrun文件是因为需要在 Matlab中直接运行诸如MP3,MP4,CHM和TXT等格式的文件,而用Matlab本身来实现这一过程的执行效率较低,代码具有重复性,对每种格式还需要区别对待。因而,考虑到VC语言和操作系统及硬件之间的直接联系,通过VC来编写程序并提供给Matlab调用,无疑会提高运行效率。在mexrun.cpp文件中需要包含如下头文件:C语言的MEX文件源程序主要由两个部分组成:第一部分是算法程序,用于完成实际工作;另一部分是入口子程序,它是算法程序与Matl-ab的接口。入口子程序实现接口功能是通过在输入指针数组中获得算法程序所需的数据,同时也能把计算结果返回到输出指针数组。在这里mexFunction有着输入/输出与变量转换的作用。参照本文编写的mexrun.cpp文件,需要注意以下几点:(1)void mexFunction(int nlhs,mxArray*plhs[],int nrhs,const mxArray*prhs[])。函数头中nlhs是Matlab命令行方式下输出参数的个数;*plhs[]是一个mxArray结构体类型指向所有输出参数的指针数组;*prhs[]也是是一个mxArray结构体类型指向所有输入参数的指针数组;nrhs是输入参数的个数。(2)还需定义以下几个变量:char*input_arg1,*input_arg2;int len1,len2,status1,status2。其中:*input_arg1,*input_arg2是两个字符指针;len1,len2表示分配空间长度;status1,status2是两个数据空间变量。(3)输入的必须是单行字符串,行矢量,如下:(4)把输入的字符串拷贝到C字符串里面,如下所示:按照上述流程设置好编译环境和源程序后就可以编译此工程,编译成功后,在debug文件夹中会生成mexrun.dll链接库文件。实验结果表明,只要把 mexrun.dll链接库文件放在Matlab的当前工作区中,就可以在GUI设计中的m文件编写中直接调用。2 系统模块的设计与实现雷达系统软件包的总体结构采用分离式的多模块结构,即各功能模块彼此相互独立,分别完成一定的功能。从方便用户的角度出发,设计的雷达系统软件包采用多层次的分级菜单驱动形式,先由主菜单选择进入各功能模块的子菜单,在每一个功能模块的菜单下,可以选择参数设置、程序运行、获取帮助和返回上级菜单等操作。2.1 系统实现方法图形用户界面(graphical user interfaces,GUI)是用户与计算机进行信息交流的方式。计算机在屏幕显示图形和文本,用户通过输入设备如键盘、鼠标等与计算机通信。GUI中包含各种控件,通过对控件设置一些事件响应函数,这些函数可以在控件创建或删除等事件发生时执行,从而实现特定事件触发下需要的某些功能。这些事件响应函数即是句柄图形对象的回调函数。本文使用GUIDE界面来对各种控件进行布局,并利用属性编辑器对每个控件进行设置。软件包的实验界面主要有登陆界面、主界面和各部分子界面。下面以登陆界面为例,说明图形用户界面的设计过程。2.2 登陆界面设置图2表示GUIDE界面下对登录界面进行设置,其中包含了按钮、静态文本框、编辑框和坐标轴。在对每种控件的属性编辑器进行编辑时,Matlab对于每个控件都会在其相应的m文件中初始化出一个回调函数。首先,可以通过调用混合编程实现的mexrun.dll库文件打开help文档、MP3文件和MP4文件。以video按钮为例,打开它的属性编辑器可以看到其对应的Tag属性pushbuttonl,在其回调函数中加入如下代码。video按钮打开后是关于软件包使用说明的一段简单视频。其次,编写坐标轴控件的属性和构造函数,这里的坐标轴函数是用来显示一张JPEG格式的静态图片。Matlab提供imread()函数和imshow()函数来读取和存放静态图片,函数中的X是一个矩阵。最后,关于登陆界面的密码设置,需要对()pening Fcn函数进行初始化设置,也即是软件包默认的用户账号和密码。这里需要使用函数set()来设置编辑框中输入的字符串即用户账号和密码,并对该账户和密码进行初始化赋值。3 仿真结果雷达系统分析包含各个部分仿真结果分析,这里选择雷达天线中典型的线性天线阵列仿真结果进行分析。仿真界面实例如图3所示,这里选择的实例是线性天线阵列的增益方向图。其中,阵列中的单元数为19,可以看到当单元问距为1.5个波长、扫描角度为-38°、使用Ham-ming窗进行幅度加权、并用23量化电平时,相应地在-38°处有主瓣产生,并且第一副瓣的电平约为-13.4 dB。若在面板中选择不同的设置值,则可以得到在不同的阵列天线(即阵列中的单元数不同或单元间距不同)、不同的扫描角度、不同的加窗函数、不同量化电平时的增益方向图。通过该系统进行模拟仿真,并将仿真结果进行对比,可以清晰地了解天线在各个转向角处的增益方向是如何随天线阵列的单元间距、扫描角度、加窗函数、量化电平这些参量的变化而变化的,从而形成对线性阵列天线增益方向图的直观感受。4 结语雷达系统分析课程理论性强,抽象难懂,如何帮助学习者理解课程中的基本概念、基本分析方法等是该课程教学中所要解决的关键问题。考虑到 Matlab的图形用户界面非常形象,本文采用VC和Matlab混合编程充分发扬了两种语言的优势,开发实现了该课程教学实验GUI软件包。实验表明,该雷达系统仿真软件包界面友好,参数设置灵活,并且在仿真的过程中能随时看到雷达信号发射、接收和信号处理等各方面的文字或图形描述。

    时间:2018-10-15 关键词: matlab 电源技术解析 雷达系统 系统建模

  • 基于COM的Matlab参数处理与图像嵌入在VC中的实现

    摘 要:通过运用Matlab与VC的语言和平台特性,解决了二维数组参数的传递与输出;介绍两种Matlab图像嵌入VC界面的方法,并以主成分分析为实例,讲解了相关细节与难点。同时,介绍了一种更加灵活、简便的读取Excel文件的方法。关键词: COM组件; Matlab; VC; 二维数组; 图像嵌入 基于COM组件的Matlab与C++混合编程方式因拥有独立的运行环境和两种语言的互补优势而被众多科研人员和编程人员所接受,同时也是MathWorks公司推荐使用的混编方式。但在程序设计过程中,通常会遇到两个难点问题:(1)二维数组参数的传递与输出; (2)Matlab生成图形嵌入VC工程界面中。对于第一个问题,Bruce McKinney[1]在MSDN上指出;“如果对一维数组进行操作,则SAFEARRAY函数变的简单且易操作。但是对于多维数组,同样的操作要复杂得多”,造成这一问题的根源在于Matlab与C++对多维数组元素的存储方式不同。而在本项目开发过程中回避了这个复杂的过程,转而利用Matlab强大的数组处理功能将其解决。Matlab完善的图形处理功能是其被科研人员所推崇的原因之一,但因其图形拥有独立的窗口,严重影响了整体界面美观和用户交互体验,所以Matlab图形嵌入是混合编程中不可回避的问题。对此将通过实例介绍两种图形嵌入方法并分析说明其优缺点和相关细节。 本文示例均在Matlab R2008a和VC 6.0平台下完成,且通过调试能够正常运行。1 Excel文件读取方法 VC平台下的Excel文件读取方式复杂难懂,但如果使用Matlab与VC的混合编程方式编写将更加简便,而且拥有较强的可扩展性。下面代码详细讲解了该过程。 (1)在Matlab平台下建立CExcelRead.m文件,代码如下: function [output,row,col] = CExcelRead(filePath) //filePath包含了指定文件的路径和文件名,由VC平台函数GetPathName()获取 [typ, desc] = xlsfinfo(filePath); //xlsfinfo()可获取指定Excel文件中各个sheet工作区的名称,返回值存入名为desc的cell数组中 sheet1 = cell2mat(desc(1)); //默认打开”sheet1”(名称任意),并将其转换为字符串 output = xlsread(filePath,sheet1); //返回该Excel文件中的数据,返回值存入output数组中 [row,col] = size(output); //获取录入数据的行列值,返回到VC平台以供其拷贝指定内存大小的数据 output = reshape(output,row*col,1); //将该二维数组转换为一维。这是第二部分二维数组处理的第一步 保存文件后,使用deploytool工具将其制作成名为FileOpen的COM(封装MCR),注册该控件并将相应的文件拷贝到MFC的工程中,对于基础操作此处不再赘述。 (2)在VC平台下创建名为PCA的基于对话框的MFC工程,添加一打开文件的按钮控件,ID为ID_FILE_OPEN。篇幅所限只给出部分核心代码,首先在Dlg类中添加3个私有成员变量用以保存Matlab读取的数据及行列值,即: double *m_originData; long m_row, m_col; 在响应函数中添加如下代码 CFileDialog fileDlg(TRUE); fileDlg.m_ofn.lpstrTitle="请选择你的excel数据"; fileDlg.m_ofn.lpstrFilter="Text Files(*.xls)*.xlsAll Files(*.*)*.*";  if(IDOK==fileDlg.DoModal() {  CString fileName; IFileOpenclass *pfile; VARIANT filePath,output,rowOutput,colOutput; //m文件的输入参数 fileName = fileDlg.GetPathName(); //获取文件路径并存于fileName中 CoInitialize(NULL); //COM初始化 HRESULT hr = CoCreateInstance(CLSID_FileOpenclass,NULL,CLSCTX_ALL,IID_IFileOpenclass,(void**)&pfile); //新建COM实例 VariantInit(&filePath); //VARIANT数据初始化 filePath.vt = VT_BSTR; //指定filePath变量类型 //将fileName中保存的指定文件路径名保存至filePath参数中 filePath.bstrVal = fileName.AllocSysString(); pfile->CExcelRead(3,&output,&rowOutput, &colOutput,filePath); m_row=(long) rowOutput.dblVal; //取出行列值及录入数据 m_col = (long) colOutput.dblVal; m_originData = (double *)malloc(sizeof(double)*m_row*m_col); memcpy(m_originData,output.parray->pvData,m_row*m_col*sizeof(double)); //将matlab读入数据保存到m_originData供后面程序使用 } 上述C++代码中省略了异常处理和相关的内存、COM释放代码,由于代码比较简单所以不做进一步解析。请注意,下面将省略COM初始化及实例化等相同代码。 (3) 需要重点说明的是该方法的扩展性。通常Excel文件中保存多个工作区,有时用户可能需要打开同一Excel文件中不同工作区中的数据,常规方法实现过于复杂,但对于本文介绍的方法可以通过修改添加几条语句即可实现。首先,新建一个m文件用来处理工作区的选择,代码如下: function [sheet,col] = CSheetSelected(filePath) [typ, sheet] = xlsfinfo(filePath); [row,col] = size(sheet); 由于返回值是一个cell数组,所以VC平台要使用CStringArray数据结构保存返回值,并显示各工作区名称供用户选择。然后,通过人机交互将用户选择的工作区参数保存并传递至CExcelRead.m,通过在CExcelRead.m增加一个工作区选择参数,并对代码稍作修改即可。2 二维数组参数的传递与输出[2] 下面以主成分分析为例介绍基于COM的Matlab与VC混合编程中二维数组参数处理。 (1) 主成分分析pcamat.m代码如下: function [eigenvector,eigenvalue] = pcamat(oriData,row,column) //在Excel读入时已经完成了二维数组输出的关键步骤,即输出时将二维数组转换为一维数组。但在VC平台接收还原为二维时要注意,Matlab数组存储方式是按列存储,而VC平台下数组是按行存储,所以转换时0~row-1为第一列,row~2*row-1为第二列,以此类推。本文输入参数oriData是一维数组,所以要将其还原为二维数组使Matlab程序能够正常运行,即下一行代码所示。 oriData = reshape(oriData,row,column); dataSTD=std(oriData,0,1); dataMean = mean(oriData); dataSR = (oriData-dataMean(ones(row,1),:))./dataSTD(ones(row,1),:); [eigenvector,newdata,eigenvalue,Exa]=princomp(dataSR); //第三行至此处均为主成分分析内容 eigenvector = reshape(eigenvector,column*column,1); //与Excel文件读取时类似,将二维输出转换为一维数组进行输出 (2) 保存后,封装打包为COM组件,并完成注册等相关操作。在PCA工程对话框上添加一个名为PCATest的按钮控件,核心代码如下: VARIANT oriData,row,column,eigVector,eigValue; VariantInit(&oriData); //参数初始化 oriData.vt = VT_R8|VT_ARRAY; //定义SAFEARRAY类型的一维数组 SAFEARRAYBOUND rgsadound[1]; rgsadound[0].lLbound = 0; rgsadound[0].cElements = m_row*m_col; oriData.parray = SafeArrayCreate(VT_R8,1,rgsadound); oriData.parray->pvData = m_originData; //完成相关设置后,将第一步读入的数据录入到oriData中,即赋给pcamat的oriData。到此完成了二维数组的传递 row.vt = VT_I4; col.vt = VT_I4; row.lVal = m_row; col.lVal = m_col; pca->pcamat(2,&eigVector,&eigValue,oriData,row,col); memcpy(result, eigVector.parray->pvData,m_col*m_col*sizeof(double)); 综上,二维数组参数处理就是使用reshape()函数对输入输出数据维数进行变换来完成操作。3 Matlab图像嵌入VC界面[3]3.1 基于CWnd类的图像嵌入

    时间:2018-07-04 关键词: 图像 参数 vc matlab

发布文章

技术子站

更多

项目外包

更多

推荐博客