㈠ 如何用c语言实现AVR单片机电压峰值测量
有硬件软件两种方式,硬件的网上搜峰值检波培孙禅电路,软件的就用AD口快速采集配尘,找到一定时间内的最大值,即为峰值凯陪。
㈡ c语言怎么获取波形脉尖
findpeaks函数搜档尘可以获得峰蠢碰值位置。
1、a=findpeaks(data),获得data的局部峰值,此方法即峰值点大于相世禅邻两点即可。
2、a,b=findpeaksd(ata),可以返回峰值位置,峰值位置赋予给b。
㈢ 您好:我想问你一下,一组数据有多个峰值点,用matlab画出的图上可以看出,怎么用c语言或c++实现算法
说句实话,看你要什么样的峰值了,如果是只要是念卖峰值就行的,可以找到最大值就行了让高岁。如果是找坦睁到一段图像中的峰值的话,就需要先平滑一下图像了。用窗口过滤一下,对你帮助估计不大,但是可以参考一下思路,平滑后就好一些了。。
㈣ 请求高手帮忙!!C语言编程序
找个威客网站挂上吧 20积分肯定没人给你搞得
㈤ 快速查找二维数组的所有峰值,c语言实现最好,python也可以,最好能实现滤波。
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
#include<malloc.h>
#definemaxsize6//每个波形数据最大采集个数默认6
typedefstructarray1
{
int*data;
structarray1*next;
}ARR1;
ARR1*addNewArr(ARR1*arrHead,ARR1*arrTail);//插入一组波形数据节点返回尾节点
intfindMaxF(ARR1*arrHead);//查找最大峰值
intremoveMinF(ARR1*arrHead);//移除最小峰值数据组返回最小峰值
voidprintfArr(ARR1*arrHead);//打印数据链表
intmain()
{
ARR1*arrHead=(ARR1*)malloc(sizeof(ARR1));
arrHead->next=NULL;
ARR1*arrTail=NULL;
arrTail=addNewArr(arrHead,arrTail);//想插入几组,就调用几次我就测试6组
arrTail=addNewArr(arrHead,arrTail);
arrTail=addNewArr(arrHead,arrTail);
arrTail=addNewArr(arrHead,arrTail);
arrTail=addNewArr(arrHead,arrTail);
arrTail=addNewArr(arrHead,arrTail);
printf("采集的原数据组为:
");
printfArr(arrHead);
printf("最大峰值:%d,最小峰值值:%d
",findMaxF(arrHead),removeMinF(arrHead));
printf("删除最小峰值数据组后的数据为:
");
printfArr(arrHead);
return0;
}
voidprintfArr(ARR1*arrHead)//打印数据链表
{
while(arrHead->next!=NULL)
{
printf("%d,%d,%d,%d,%d,%d
",arrHead->next->data[0],arrHead->next->data[1],arrHead->next->data[2],arrHead->next->data[3],arrHead->next->data[4],arrHead->next->data[5]);
arrHead=arrHead->next;
}
}
ARR1*addNewArr(ARR1*arrHead,ARR1*arrTail)//插入一组波形数据返回尾节点
{
int*data=(int*)malloc(sizeof(int)*maxsize),i;
printf("采集一组波形数据(最大采集个数%d):",maxsize);
for(i=0;i<maxsize;i++)
scanf("%d",&data[i]);
ARR1顷雀*arrNew=(ARR1*)malloc(sizeof(ARR1));
arrNew->data=data;
闭唯arrNew->next=NULL;
if(arrHead->next==NULL)//插入第一组数组作为首节点
arrHead->next=arrNew;
else
arrTail->next=arrNew;
arrTail=arrNew;
returnarrTail;
}
intfindMaxF(ARR1*arrHead)//查找最大峰值
{
inti,maxNum=0,maxf=0;
while(arrHead->next!=NULL)
{
雀态早maxNum=0;
for(i=0;i<maxsize;i++)//获取每组数据的峰值
{
if(arrHead->next->data[i]>maxNum)
maxNum=arrHead->next->data[i];
}
if(maxNum>maxf)//获取最大峰值
maxf=maxNum;
arrHead=arrHead->next;
}
returnmaxf;
}
intremoveMinF(ARR1*arrHead)//移除最小峰值数据组返回最小峰值
{
inti,maxNum=0,minf=INT_MAX;
ARR1*minDataSave=NULL,*arrHeadSave=arrHead;
while(arrHead->next!=NULL)
{
maxNum=0;
for(i=0;i<maxsize;i++)//获取每组数据的峰值
{
if(arrHead->next->data[i]>maxNum)
maxNum=arrHead->next->data[i];
}
if(maxNum<minf)//获取最小峰值
{
minDataSave=arrHead->next;
minf=maxNum;
}
arrHead=arrHead->next;
}
arrHead=arrHeadSave;
//移除最小峰值数据组
while(arrHead->next!=NULL)
{
if(arrHead->next==minDataSave)//删除节点重组链表
{
arrHead->next=minDataSave->next;
minDataSave->next=NULL;
free(minDataSave->data);//释放节点内存
free(minDataSave);
break;
}
arrHead=arrHead->next;
}
returnminf;
}
㈥ c语言如何求函数极限
如果是用程掘李序近似判首迟计芹激算的话,可以这样做
#include<stdio.h>
#include<math.h>
main()
{ long int n,k;
double s1,s2,e=1e-8; //e代表计算精度
n=1;k=1; //k=n×n
s1=(3.0*k+n)/(2*k+3);
do{
s2=s1;
k=k+2*n+1; //(n+1) ^2=n^2+2n+1
n=n+1;
s1=(3.0*k+n)/(2*k+3);
}while(fabs(s1-s2)>e) ;
printf("%lf",s1);
}
㈦ c语言如何求数组最大值
解题思路:先键盘输入10个整数,假设数组的第1个是最大数max,同时设置最大值下标为0,接着for循环依次判断其是否大于最大数,如果大于替换掉最大值,并更新最大值下标,最后输出最册桐颂大数和数组下标。
参考代码:
#include<stdio.h>
intmain(){
inti,a[10],max,maxi;
//输入10个整数
for(i=0;i<轮让10;i++)
{
scanf("%d",&a[i]);
}
//假设数组的第1个是最大数max,同时设置最大值下标为0
max=a[0];
maxi=0;
//for循环依次判断其是否大于最大数,如果大于替换掉最大值,并更新最大值下标
for(i=1;i<州郑10;i++){
if(a[i]>max){
max=a[i];
maxi=i;
}
}
//输出最大数和数组下标
printf("最大数为:%d,数组下标为:%d",max,maxi);
return0;
}
程序运行结果如下:
㈧ 求一个C语言程序
20分太少了吧
㈨ C语言周期信号曲线峰值判断(基于加速度传感器的信号,测量出上下周期运动的上行和下行)图片马上上传
你的办法估计可行性不高,稍微出个毛刺行谈就不对了。
建议采用fft分析,根据档陵碰频域的结果判断一个合理值汪腔。
㈩ 用C语言生成一个频率是160HZ,峰值是45,相位是45度的正弦波
输出 y = H* sin( 2*pi*f*t + 45.0/180.0*pi) 的信号即可。
下面歼隐程晌腊序产生 360个点。
#include <stdio.h>
#include <math.h>
int main () {
double f=160.0;
double h=45.0,om;
double phase=45.0; //degrees
double pi;
double t,dt;
double s[360]; //存放生成的信号
int i;
pi = 4.0*atan(1.0); //圆周率
om = 2.0*pi*f; //圆频率
phase = 45.0/宴改滑180.0*pi; //相位
printf("pi=%f om=%f phase=%f\n",pi,om,phase);
dt = 0.00002; //时间步长
for (i=0;i<360;i++) s[i]= h * sin(om * dt * i + phase);
for (i=0;i<360;i++) {printf("%8.3f ",s[i]);if (i%5==0) printf("\n");};
return 0;
}