音频信号的AGC

音频信号的AGC,第1张

使放大电路的增益随信号强度的变化而自动调整的控制方法,就是AGC-自动增益控制。实现AGC可以是硬件电路,即AGC闭环电子电路,也可以是软件算法。本文主要讨论用软件算法来实现音频信号的AGC。

音频AGC是音频自动增益控制算法,更为准确的说是峰值自动增益控制算法,是一种根据输入音频信号水平自动动态地调整增益的机制。当音量(无论是捕捉到的音量还是再现的音量)超过某一门限值,信号就会被限幅。限幅汪档指的是音频设备的输出不再随着输入而变化,输出实质上变成了最大音量位置上的一条水平线;当检测到音频增益达到了某一门限时,它会自动减小增益来避免限幅的发生。另一方面,如果捕捉到的音量太低时,系统将自动提高增益。当然,增益的调整不会使音量超困神乱过用户在调节向导中设置的值。图3是音频AGC算法的结构框图。 首先从串口获取音频数据,它是16位的整型数,一般来说,这些数都是比较小的,通过AGC算法将输入的音频数据投影在一个固定区间内,从而使得不论输入的数据点数值大小都会等比例地向这个空间映射。一方面将获得的音频数据最大值与原来的峰值进行比较,如果有新的峰值出现就计算新的增益系数;另一方面在一定的时间周期内获取一个新的峰值,这个峰值就具有检测性能,又与原峰值比较,然后就计算新的增益系数。这个增益系数是相对稳定的。当音量加大时,信号峰值会自动增加,从而增益系数自动下降;当音量减小时,新的峰值会减小并且取代原来的峰值,从而使峰值下降,使增益系数上升。最后输出的数据乘以新增益系数后映射到音频信号输入的投影区间内。图4是音频信号AGC算法的程序流程图。

AGC_Coff是初始增益系数,初始值为1;maxAGC_in是增益峰值,初始值为0;time是采样点计数,门限值为4096;AGC_in是新的音频瞎隐数据,MAXArrIn是新的音频增益峰值;映射区间【-20000,20000】。

整个系统的软件部分为5人模块。系统主函数main( )、CMD文件、中断向量表、DSP5402头文件和专为C语言开发的库函数rtdx.lib。其中主函数部分是核心,主要包括:DSP器件初始化、MCBSP1初始化、MCBSP0初始化、AIC23初始化(内部12个可编程寄存器设置)及算法程序等。

在CCS2.0集成开发环境下,采用*.c语言和*.asm语言相结合的方式编写程序。将编写的程序*.c、*.asm和链接程序*.cmd文件编译链接后生成执行目标文件*.out,通过仿真器将执行目标文件*.out下载到系统板上,经过调试、编译并运行,以音乐作为音频信号源输入到系统板上。

1、 什么是 AGC AGC--Automation Generate Control 自动发电控制, 是能量管理系统 EMS 中的一项重要功能, 控制着调频机组的出力, 以满足不断变化的用户电力需求, 并使系统处于经济运行状态。 AGC 是按预定条件和要求, 以迅速经济的方式控制电厂的有功功率来满足电力系统多方面需求的技术。 2、 电网 AGC 电网 AGC 主要由各省或各区域调度中心控制, 根据整个电网的频率来察芹毕调节负荷。通过调节调频机组的出力, 来维持电网频率的稳定。 以首谨及在满足安全约束的条件下, 对发电量实行经济调度控制。 主要任务包括: A、 维持系统频率为一额定值, 正常稳定运行工况下, 其允许的频率偏差在±(0.05~0.2)HZ,视系统容量大小而定。 B、 控制本区与其他区间联络线上的交换功率为协议规定的数值。 C、 满足系统安全稳定要求, 并达到经济运行的目的。 3、 电厂 AGC 电厂 AGC, 主要是电厂根据自身实际的条件实现机组负荷的最优组合。 一般由调度根据全网负荷下发给电厂负荷定值, 电厂再由 AGC 实现自动控制机组负荷分配。 电厂 AGC 是在水轮发电机组自动控制的技术上, 实现全厂自动化的一种方式。 根据水库上游来水量或电力系统的要求, 考虑电厂及机组的运行限制条件, 在保证电厂安全运行的前提下, 以经济运行为原则, 确定电厂机组运行台数、 运行机组的组合和机组间的负荷分配。 可以根据需要满足运行人员的一些特殊要求, 或者自动对全厂有关、 系统频率及一些非常情况作出迅速反应, 从而大大提高电网的安全性和可靠性。 AGC • 随着电力系统自动化水平得提高, 越来越多的水电站都需要有 AGC 功能。 • 根据 TalentView 的特点, 结合我们工程实际的需求, 开发 AGC 控件是一种最方便的方式。 • AGC 控件使用方便, 简化现场工作量。 AGC AGC 一般在水电站用的比较多, 但对于火电厂也有应用, 特别是大容量机组的发电机。 目前四川省的 AGC 应用是全国最早的, 而且要求也比较严格, 对于 50MW 以上容量的机组一般都要求具有 AGC 功能。 TalentViewAGC 由于 Talentview 不支持复杂的控制逻辑, 故无法在监控系统中直接编写代码实现该功能。 所以我们通过开发专门的 AGC 控件, 将主要计算步骤都封装在控件内部, 然后在 Talentview 中调用 AGC 控件的算法来解决这个问题。 AGC AGC 控件的使用方法及设置步骤与历史趋势曲线、 报警控件等系统控件类似, 工程人员在现场实施时无需编写控制逻辑, 只需要关联监控系统中一些相关变量即可。 大大简化了现场工作量。败芹 AGC AGC 控件运行界面较为简单, 用了几个字符标识该控件的存在, 然后通过控件颜色的变化表明目前电厂 AGC 处于什么状态 AGC 功能退出时控件的状态 AGC 功能投入时控件的状态 AGC 调节机组负荷过程中控件在这两种状态中变化、 闪烁 AGC AGC 控件通过属性和事件与 TalentView 进行数据交互。 • AGC 事件包括 AgcAdjust()、 JzAgcSet()、 JzParameter()三个函数, 把 AGC 控件中的数据传给 TalentView。 AGC 属性把 TalentView 中的数据传给 AGC 控件, 供 AGC 控件进行计算。 AGC 属性主要包括 AGC 头退标志、 调度下发负荷、 全厂当前总有功、 系统频率、上游水位、 下游水位、 净水头等全厂参数和 一些机组参数, 包括各机组的当前负荷、当前状态、 当前 AGC 标志等。 通过 AGC 属性把这些参数传给 AGC 控件, 以供 AGC控件进行计算。 AGC 事件包括的三个函数: AgcAdjust()、 JzAgcSet()、 JzParameter()。 其中 AgcAdjust()用于把计算结果输出给 TalentView, JzAgcSet()把机组的 AGC 投退标 志输出给 TalentView, JzParameter()把机组的参数输出给 TalentView, 主要针对变水头。 AGC 事件介绍 AgcAdjust()---调用事件函数 JzLoadAdjust(long JzNo,float JzLoad,long JzStatus) 参数意义: JzNo----机组编号 JzLoad---调节后机组负荷 JzStatus---机组 AGC 调节标志 JzAgcSet()---调用事件函数 JzAgcSet(long JzNo,long JzAgcSign) 参数意义: JzNo---机组编号 JzAgcSign---机组 AGC 投退标志, 即此机组是否参与 AGC 调节 JzParameter()---调 用 事件函 数 JzParameter(long JzNo,float JzMaxP,float JzMinP,float JzMaxVibrate,float JzMinVibrate) 参数说明: JzNo ---机组编号 JzMaxP---当前水头下机组的负荷上限 JzMinP---当前水头下机组的负荷下限 JzMaxVibrate---当前水头下机组振动区上限 JzMinVibrate---当前水头下机组振动区下限 AGC 定义变量 插入控件、 设置控件 链接监控变量, 填写控件属性 编写事件函数 制作 AGC 画面 配置控件参数 • AGC 功能的实现必须要添加一些内存变量, 包括全厂 AGC 变量和各个机组的变量。 全厂基本变量包括 7 个, 每个机组参数有 9 个。 • 在添加内存变量的时候一定要注意: 数据类型必须是下表所设定的数据类型, 不然会出错 变量的数值范围一定要正确。 比如机组当前状态、 机组 AGC 调节标志等变量有可能是负值, 所以在 TalentView 中设置数据的最大、 最小值时要注意。 有几台机组就添加几台机组的变量, 例如: 电厂共有 3 台机组, 则仅定义 3 台机组的变量, 链接变量也仅链接 3 台机组, 其余的不用定义, 也不用链接。 变量名 变量类型 对应控件属性名 AGC 投退标志 内存离散 IsAgcSet 调度给定负荷 内存实型 PPlantSet 电厂当前负荷 内存实型 PPlantCurrent 电厂频率 内存实型 Frequency 电厂上游水位 内存实型 WaterUpLevel 电厂下游水位 内存实型 WaterDownLevel 电厂静水头 内存实型 WaterHead 1# 机组定义的变量如下, 其他机组类似 变量名 变量类型对应控件属性名含义 1#机组当前负荷 内存实型Jz1PCurrent 1#机组当前负荷 1#机组当前状态 内存整型Jz1Status -1 故障0 停机1 开机1#机组 AGC 调节标志 内存整型Jz1Flag -2 停机-1 降负荷0 不变1 增负荷2 开机 5: PLC 延时 101: 机组永久故障 AGC 调节后的负荷目标值, 直接下发到 PLC 1: 投入 0: 退出 1#机组 AGC 调节后负荷 1#机组 AGC 投退标志 1#机组最大有功 内存实型内存实型无 内存离散无 无 根据当前水头计算出当前机组最大有功 1#机组最小有功 内存实型无 根据当前水头计算出当前机组最小有功 1#机组振动区上限 1#机组振动区下限 内存实型无 根据当前水头计算出振动区上限 内存实型无 根据当前水头计算出振动区下限 • 从工具箱的“插入通用控件”选项中选择“NasAgcControl Control”, 将控件摆放在窗体的合适位置上。 • 左键双击控件, 在控件的动画连接属性中为控件设置正确的控件名, 最好设置有意义的控件名, 如“机组 AGC 调节控件”等, 不要采用系统默认的控件名如“Ctrl0026”,不便于系统维护。 • 左键双击控件, 在控件的动画连接属性对话框中, 为各个控件属性设置相应的监控变量。 • 没有的机组不要链接变量。 上游水位、 下游水位也可暂时不用链接变量。 • 左键双击控件, 在控件的动画连接事件对话框中, 为各个事件编写相应的函数。 AGC • AGC 画面一般包括一个 AGC 控件、 一个 AGC 投退按钮、 一个 AGC 设置按钮以及一些变量的显示和负荷曲线等。 • 可以根据现场的具体情况, 自行布置画面。 • AGC 设置按钮, 可以调用 AGC 控件的 PopupProperty()来实现。 实际的现场可以根据情况自行布置画面, 下面的历史曲线控件可以去掉。 上图所示为 5 台机组画面, 比较拥挤, 下面历史曲线控件去掉后会比较好点。 • 控件参数配置可以在 TalentView 的开发环境中进行, 也可以在运行环境中进行。 • 开发环境: 右键单击 AGC 控件图标, 选择“控件属性”菜单, 即d出参数配置对话框。 • 运行环境: 直接点击“AGC 设置”按钮, 即可d出参数配置对话框。 • 监控必须为 AGC 配合调节编写一定的逻辑, 否则无法完成调节过程。 • 监控系统根据各个机组 AGC 调节标志以及计算出来的调节后负荷来实际调节机组有功。 • 在调节到位后, 监控系统需要把各个机组的 AGC 调节标志清零, 准备进行下次调节。 1. 当电厂中某台机组的负荷需要调节时, AGC 会给该机组的“n#机组 AGC 调节标志” 赋相应的值(-2 停机-1 降负荷0 不变1 增负荷2 开机)。 2. 监控系统在“n#机组 AGC 调节标志” 数据改变命令语言中将“n#机组 AGC调节后负荷” 或开停机令下发到机组。 机组开始按预定的目标值进行调节。 3. 当机组负荷或状态调整到目标值或状态以后, 需要将“n#机组 AGC 调节标志” 清零, 否则无法启动下一轮 AGC 运算。 此处的清零工作需要由监控系统来完成, 即由 PLC 来完成。 如果发生了 PLC 延时问题, 则把“n#机组 AGC调节标志” 的值置为“5”, AGC 控件在获取到此标志后, 立即重新进行计算分配负荷。 在此轮的调节过程, 标志为“5” 的机组将不参与 AGC 调节, 直到此轮调节完成后, AGC 控件自动把标志清零, 然后进行下一轮调节时便可自动参与调节。 如果是机组故障, 无法再进行 AGC 调节, 则把“n#机组 AGC调节标志” 的值置为“101”。 AGC 控件获取到此标志后, 立即重新进行计算分配负荷, 并永远把标志为 101 的机组排除在外, 即不再参与 AGC 调节,直到用户手动把此标志置零后才能继续参与 AGC 调节。 • 运行状态下修改的参数无法保存。 应该在开发状态退出的情况下进行修改才能保存。 • 不能正常调节时的故障排查。 A、 看各个变量链接是否正确。 B、 检查各个数据变量是否正常, 是否超过了参数设置范围。 C、 检查各个变量的数据类型是否正确、 数据值的范围是否正确。 • 参数设置区出现随意数据。 尝试先将控件反注册, 然后再次注册才能解决。 1. 首先看控件属性中的变量关联是否正确, 没有定义的机组不要去关联任何变量, 比如电站只有三台机组, 那第四台机组以后的属性就不要去关联任何变量了。 2. 检查控件属性页中参与调节的机组参数设置是否正确。 特别是机组的调节顺序、 开停机顺序、 负荷调节死区、 调节上下限、 频率上下限、 调度有功最大变幅等, 这些值都必须设置正确。 若现场没有提供机组振动区, 则机组的振动区上下限可以不用设置, 默认为 0。 例如参与调节的机组编号一栏正常情况下应显示“1# 机组”“2# 机组” 等, 若是出现“-2234” 等一些无关数值则为异常还有若是选择的机组只有两台, 但在开停机顺序 一栏却出现超过两台机组的情况也为异常。 出现这种情况, 只有先将控件反注册, 然后再次注册才能解决。 反注册命令: regsvr32 **.ocx /u 注册命令: regsvr32 **.ocx • 按优先级进行调解的算法, 目前适应于两台机组。 此算法对于两台以上的机组无法使用。 • 平均分配负荷的算法。 适用于机组参数相同的机组, 即认为各机组的等耗量微增率相同。 • AGC 自动开停机 *** 作 按照目前大多数电厂的调节经验, 平均分配负荷算法用的比较多, 按优先级调节的算法用的较少。 • 优先级: 手动设置优先级和按照调节容量优先级。 • 手动设置优先级: 机组分配负荷时按照手动设置的优先级进行负荷分配。 即调节优先级别最高的机组, 如果调节不满足, 再继续调节次优先级的机组。 • 若没有选择手动设置优先级, 则机组按照调节容量优先级进行调节, 即首先对调节容量最大的机组进行调节, 再对调节容量次大的机组进行调节…… • 增负荷时: 机组调节容量 = 机组功率调节上限 – 机组当前有功 • 减负荷时: 机组调节容量 = 机组当前有功 – 机组功率调节下限 • 把需要调节的容量平均分配到个机组上, 即各个机组调节的负荷量相同。 不管哪种算法, 都必须确保机组躲开振动区运行, 而且满足机组运行的条件限制。 对于不同的电厂会有不同的调节要求, 需要工程人员事先与客户进行充分沟通, 确定好调节方案, 再根据具体要求修改、 完善程序。 AGC • 考虑开停机时, 按照尽量少开停机 *** 作的原则进行。 只有调节所有机组都无法满足要求时才考虑开停机。 • 自动停机: 当机组负荷降到全厂负荷下限, 通过调节其他机组无法满足要求时, 需要进行停机 *** 作。 • 自动开机: 当运行机组的总负荷调节到上限, 仍无法满足要求时, 需要进行开机 *** 作。 • 如果人工设置了开停机顺序, 则开停机时按照设定的顺序进行。 • 如果没有人工设定开停机顺序, 开机时则按以下顺序进行: 按机组编号顺序从高到低排列, 先开 1#机组, 再开 2#机组, 最后是 3#机组。 • 如果没有人工设定开停机顺序, 停机时按以下原则进行: 先停当前出力最小的机组,如果出力一样, 按照机组编号由高到低顺序进行。 • 首先需要客户确定好调节方案, 并提供相关的参数, 工程人员根据调节方案和参数进行 AGC 配置。 • 参数配置包括全厂参数配置和机组参数配置。 • 通过 AGC 算法选择选项来选择算法: 按优先级分配或者平均分配算法。 • 把参加 AGC 调节的机组添加到列表框中。 如采用优先级算法, 并且没有选择“手动设置优先级”选项, 则按照调节容量优先级进行调节, 如选择了“手动设置优先级”,则可以通过“上移”、 “下移”按钮来设定机组优先级。 如果选择了“考虑开停机控制”, 并手动设定开停机顺序, 则会按照设定的顺序进行开停机。 否则不进行开停机 *** 作。 • 跨振动区提示: 如果选择此选项, 则当有机组跨越振动区时都会d出提示对话框,如果选择“确定”, 即手动跨越振动区, 则会退出 AGC 调节, 待手动跨越后再投入继续调节, 如果选择“取消”, 则会自动跨越振动区。 如果没有选择此选项, 则当跨越振动区时会自动跨越, 并且不会有提示对话框。 • 调频: 选择此选项, 则会按照给定的频率进行调节。 一般电厂不需要按照频率进行调节, 都由调度给定值进行调节。 全网 AGC 一般按照频率进行调节。 • 低频自启动、 高周减出力选项目前暂未实现, 为以后预留接口功能。 • AGC 运行方式和 AGC 控制权限目前选择无效, 此项功能在 TalentView 中实现。 • 全厂有功最大变幅目前在程序中未采用, 只是预留一变量接口, 程序中采用的是调度有功最大变幅。 机组参数设置 水头设置 • 首先要设置各个机组的水头。 • 其次设置各个水头下的机组参数。 不同的水头机组参数不一样。 • 对于中间的水头, 按照线性关系计算出当前水头下的参数。 AGC 参数配置的详细说明参见“AGC 参数配置说明”文档, 里面对 AGC 的配置进行了详细的说明, 并对每个参数的意义进行了说明, 此处不再详述。 • AGC 功能目前在多数水电站都有需求。 四川省调对于 50MW 以上的机组都要求必须具备 AGC 功能, 而且调试要求比较严格。 但是一般对于机组容量较小的电厂, 目前虽然也要求有 AGC 功能, 但 AGC 调试完毕后不一定投入运行, 因为一些容量小的电厂自动化程度不是很高, 对整个电网的影响也不是很大。 对于大容量机组的电厂, AGC 要求会很严格, 需要与用户沟通后, 通过修改完善程序来很好的满足需求。 • AGC 调节之前要求工程人员要与电厂进行充分的沟通, 根据他们所要求的调节方案来进行配置, 同时需要电厂与调度协商后, 提供详细的参数。 根据调节方案和调节参数进行 AGC 配置。 因为每个电厂的实际情况都不一样, 对调节的要求也不一样,所以不能有一套通用的 AGC 算法来满足所有电厂的需求, 如有需要程序修改完善的, 应提前通知相关人员做好准备。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12209674.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存