大数据 map转string HTML框架 properties EasyCVR 云计算架构 image shiny angular material Draggabilly vue添加class jquery触发点击事件 ie内核浏览器怎么设置 spark算法 js字符串排序 当前时间减一天 matlab取绝对值 android网络请求 vue与html5 python连接mysql 安装mysql python功能 python使用教程 python实战 python指令 python平台 java接口类 java连数据库 java接口的修饰符 java的框架 tar文件怎么打开 unix操作系统下载 图片放大软件 手机主题之家 dota改键工具 dnf传说装备 java获取时间戳 微信猜拳 关闭页面 草图大师版本转换器
当前位置: 首页 > 学习教程  > 编程语言

【数字信号处理】正弦波傅里叶分析

2021/2/13 17:15:48 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

文章目录要求主要代码分析要求 测量所产生正弦信号的失真度,正弦波失真度可以定义为全部谐波电压的有效值与基波电压的有效值之比并以百分数表示: 测量系统框架如下所示: 利用STM32的DSP库中的FFT算法,获得基波和各谐波分量的…

在这里插入图片描述

文章目录

  • 要求
  • 主要代码分析

要求

测量所产生正弦信号的失真度,正弦波失真度可以定义为全部谐波电压的有效值与基波电压的有效值之比并以百分数表示:
在这里插入图片描述

测量系统框架如下所示:
在这里插入图片描述

利用STM32的DSP库中的FFT算法,获得基波和各谐波分量的电压,从而计算出失真度;
根据计算出的失真度,调整正弦信号发生器的性能,使产生的正弦信号失真度越小越好。

主要代码分析

int main(void)
{
   	unsigned short n,k,j,old_k = 0;
	  float Vmax,old_Vmax,Vo,temp=0,u;;
	  system_init();

  	printf(" \r\n\r\nFrequence Analysis starting...\r\n");
	  while(1)
		{
	      for(n=0;n<N;n++)
        {
		   //     delay(72);//经示波器分析,采样间隔接近10us,采样频率接近102.4kHz,频率分辨力接近100Hz
						delay(288);	//经示波器分析,频率分辨力接近27Hz				方波理想1.4KHZ以上,正弦波是7KHZ以上
				//	delay(440);
			      data_in[n] = ((signed short)ADC_GetConversionValue(ADC1))<<16;
	      }  
	      cr4_fft_1024_stm32(data_out, data_in, N);
        GetPowerMag();
		    k   = GetMaxMag();
				//测失真度代码
				for(j=2;j*k<N/2;j++)
				{
					//考虑频谱泄漏
					temp+=( Mag[j*k]+ Mag[j*k+1]+ Mag[j*k-1] ) * ( Mag[j*k]+ Mag[j*k+1]+ Mag[j*k-1] );					
				}
				temp=sqrt(temp);
				u=temp*100/( Mag[k]+ Mag[k+1]+ Mag[k-1] );
				Vmax = Mag[k]*3.3/4096; 
				//考虑频谱泄漏后的电压
			  Vo = (Mag[k]+Mag[k+1]+Mag[k-1])*3.3/4096-3;
				if( k!=old_k || fabs(Vmax - old_Vmax)/Vmax > 0.05)   //监测到频率有变化,刷新显示数据
	 		    printf(" The frequence of input signal is %d Hz. Vmax = %.2fV  Vo = %.2fV  U=%.2f %% \r\n\r\n",k*27,Vmax,Vo,u);
				old_k = k;
				old_Vmax = Vmax;
			
		}
}


本文链接: http://www.dtmao.cc/news_show_700104.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?