[C.C++] rms c语言 函数,C中任何更快的RMS值计算?

704 0
Honkers 2025-9-29 15:39:25 | 显示全部楼层 |阅读模式

我正在用C编写一个小型8位微控制器的软件.部分代码是读取电流互感器(ZCT)的ADC值,然后计算RMS值.流过ZCT的电流是正弦曲线但可能会失真.我的代码如下:

float adc_value, inst_current;

float acc_load_current; // accumulator = (I1*I1 + I2*I2 + ... + In*In)

double rms_current;

// Calculate the real instantanous value from the ADC reading

inst_current = (adc_value/1024)*2.5; // 10bit ADC, Voltage ref. 2.5V, so formula is: x=(adc/1024)*2.5V

// Update the RMS value with the new instananous value:

// Substract 1 sample from the accumulator (sample size is 512, so divide accumulator by 512 and substract it from the accumulator)

acc_load_current -= (acc_load_current / 512);

inst_current *= inst_current; // square the instantanous current

acc_load_current += inst_current; // Add it to the accumulator

rms_current = (acc_load_current / 512); // Get the mean square value. (sample size is 512)

rms_current = sqrt(rms_current); // Get RMS value

// Now the < rms_current > is the real RMS current

但是,它有许多浮点计算.这给我的小型MCU增加了很大的负担.我发现sqrt()函数在我的编译器中不起作用.

有没有可以运行得更快的代码?

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行