在電力等行業(yè),分析電壓極值,是一項(xiàng)重要的參數(shù)分析,可以分析電壓的波動(dòng);示波器中也有自動(dòng)測(cè)量極值的功能更。
基于本板設(shè)計(jì)了信號(hào)處理前端也實(shí)現(xiàn)了該功能。
算法來(lái)源于論文https://www.mdpi.com/1999-4893/5/4/588/htm
核心代碼如下
void ampd (int32_t* data, int32_t len)
{
int row_sum;
for (int k=1; k< len/2+1; k++)
{
row_sum = 0;
for (int i=k; i< len-k; i++)
{
if ((data[i] > data[i - k]) && (data[i] > data[i + k]))
{
row_sum -= 1;
}
}
arr_rowsum[k-1] = row_sum;
}
int min_index = argmin(arr_rowsum,len/2+1);
max_window_length = min_index;
for (int k=1; k< max_window_length + 1; k++)
{
for (int i=k; i< len - k; i++)
{
if ((data[i] > data[i - k]) && (data[i] > data[i + k]))
{
p_data[i] += 1;
}
}
}
for (int k=0; k< len; k++)
{
if (p_data[k] == max_window_length)
{
/* 極大值 */
}
}
}
測(cè)試
添加命令行
{ (const uint8_t*)"max", MaxFun, "max"}, /*打印幫助信息*/
void MaxFun ( void * param)
{
max_test();
}
void MaxFun ( void * param);
測(cè)試代碼如下,串口命令行輸入命令max,開(kāi)始采集ADC值,并計(jì)算極值,打印到PC串口通過(guò)seraistudio可視化顯示
int max_test(void)
{
for(int i=0; i< 10; i++)
{
memset(p_data,0,sizeof(p_data));
//adc_samp(sim_data_buffer,1000);
sim_data();
ampd(sim_data_buffer, sizeof(sim_data_buffer)/sizeof(sim_data_buffer[0]));
for(int k=0; k< sizeof(sim_data_buffer)/sizeof(sim_data_buffer[0]); k++)
{
if(p_data[k] == max_window_length)
{
/* 極大值 */
printf("/*%ld,%ld*/\\r\\n",sim_data_buffer[k],sim_data_buffer[k]);
}
else
{
printf("/*%ld,%d*/\\r\\n",sim_data_buffer[k],0);
}
cyhal_system_delay_ms(10);
}
}
return 0;
}
效果如下,IN是原始數(shù)據(jù),MAX是檢測(cè)到的極大值,如果檢測(cè)極小值將原始數(shù)據(jù)取反即可。
檢測(cè)語(yǔ)音,效果如下
審核編輯:湯梓紅
-
英飛凌
+關(guān)注
關(guān)注
66文章
2188瀏覽量
138716 -
PSoC
+關(guān)注
關(guān)注
12文章
170瀏覽量
91914 -
信號(hào)處理
+關(guān)注
關(guān)注
48文章
1029瀏覽量
103283 -
信號(hào)
+關(guān)注
關(guān)注
11文章
2791瀏覽量
76757 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
5050瀏覽量
97456 -
RTT
+關(guān)注
關(guān)注
0文章
65瀏覽量
17126
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論