最近要用C计算一些统计特征,在网络上看了一些帖子,但是并没有实现目标。以前计算这些特征均是使用Matlab计算,于是按照matlab中关于峰度和偏度的函数帮助,自己用C写了一下。
峰度
%在matlab中,使用计算峰度的函数kurtosis默认的flag是等于1, %也就是上面两个式子中的K1。 kurtosis_a_1 = kurtosis(a,1); kurtosis_a_0 = kurtosis(a,0);
下面给出使用C语言实现峰度计算的代码
#include#include double mean(double a[128], double len) { double sum = 0; double mean = 0; //求和 for (int i = 0; i < len; i++) { sum += a[i]; } //计算均值 mean = sum / len; return mean; } double kurtosis(double a[128], double len) { //数组的长度要根据自己需求更改 double kurtosis_mean = 0; double k1 = 0; double m2 = 0; double m4 = 0; double peakdnees = 0; double section_1 = 0; double section_2 = 0; kurtosis_mean = mean(a, len); //128是数组的长度 for (int i = 0; i < 128; i++) { m4 = m4 + pow((a[i] - kurtosis_mean),4); m2 = m2 + pow((a[i] - kurtosis_mean),2); } k1 = len * (m4 / (pow(m2,2))); section_1 = (len - 1)/((len - 2) * (len - 3)); section_2 = (len + 1) * k1 - 3*(len - 1); peakdnees = section_1*section_2 + 3; //根据要计算的峰度不同,选择返回K1或者peakdness return peakdnees; }



