你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

st-img
chrome
st-img
firefox
st-img
safari
st-img
ie8及以上
shequ.stmicroelectronics.cn
  • ST意法半导体官网
  • STM32中文官网
  • ST全球论坛
登录/注册
  • 首页
  • 技术问答
  • 话题
  • 资源
  • 创客秀
  • 视频
  • 标签
  • 积分商城
  • 每日签到
MrLi...

MrLi...

 

回答数 0 关注数 0
关注 私信
  • 动态99
  • 提问
  • 回答0
  • 创客秀 0
  • 分享 0
  • 关注0
13 回答

STM32L432 FFT运算结果1024个点从第512点向两边是对称的,求解

STM32L4
MrLi... MrLi... 最优答案 回答时间: 2016-10-9 16:27

本帖最后由 MrLi... 于 2016-10-14 11:49 编辑 现在我的输入信号:CH1: 800HZ 3Vpp 加了1.5V的直流偏置的正弦波(函数发生器产生)                                         CH2: 200HZ 2Vpp 加了1V的直流偏置的正弦波(函数发生器产生)采样频率是16.322K 做1024点FFT    输出的后换算出来的直流分量和频率点都能对的上   但是800HZ和200HZ的幅值却不对应  打印:CH1 DC1= 1501.525879 CH1 maxvalue1= 614.746094 Index1= 51 CH2 DC2= 974.417603 CH2 maxvalue1= 431.114563 Index2= 13 我的换算: CH1: 直流分量:1501/1024=1.46V 频点:51*16.322/1024=0.812K 800HZ频点幅值:614/(1024/2)=1.19V     实际用函数发生器输出的正弦波幅值是1.5V    难道是误差?求解?谢谢 main函数如下: int main(void) {   /* USER CODE BEGIN 1 */   //arm_status status;   float32_t maxValue1;   float32_t maxValue2;   //float32_t maxValue3;   uint16_t i;   int32_t timer=0,timer1=0,timer2=0,timer3=0;   /* USER CODE END 1 */   /* MCU Configuration----------------------------------------------------------*/   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */   HAL_Init();   /* Configure the system clock */   SystemClock_Config();   /* Initialize all configured peripherals */   MX_GPIO_Init();   MX_DMA_Init();   MX_ADC1_Init();   MX_USART1_UART_Init();   /* USER CODE BEGIN 2 */   HAL_ADCEx_Calibration_Start(&hadc1,ADC_SINGLE_ENDED);     /* 启动AD转换并使能DMA传输和中断 */   HAL_ADC_Start_DMA(&hadc1,ADC_ConvertedValue,ADC_NUMOFCHANNEL);     timer=HAL_GetTick();            //arm_status status;   //status = ARM_MATH_SUCCESS;   /* USER CODE END 2 */   /* Infinite loop */   /* USER CODE BEGIN WHILE */   while (1)   {   /* USER CODE END WHILE */   /* USER CODE BEGIN 3 */   if(__HAL_DMA_GET_COUNTER(&hdma_adc1)==1)           {         timer1=HAL_GetTick();         //printf("ADwc time1:%d\r\n",timer1-timer);                         HAL_ADC_Stop_DMA(&hadc1);         HAL_ADC_Stop(&hadc1);         for(i=0;i<1024;i++)                 {                 ADC_ConvertedValueLocal1[2*i]=(float)(ADC_ConvertedValue[3*i]&0xFFF)*3.3/4096;                 ADC_ConvertedValueLocal1[2*i+1]=0;                 ADC_ConvertedValueLocal2[2*i]=(float)(ADC_ConvertedValue[3*i+1]&0xFFF)*3.3/4096;                 ADC_ConvertedValueLocal2[2*i+1]=0;                 //ADC_ConvertedValueLocal3[2*i]=(float)(ADC_ConvertedValue[3*i+2]&0xFFF)*3.3/4096;                 //ADC_ConvertedValueLocal3[2*i+1]=0;                 }                 //                for(i=0;i<2048;i++) //                { //                printf("Bufwc[%d]:%f\r\n",i,ADC_ConvertedValueLocal1); //                }                         timer2=HAL_GetTick();                 //printf("Bufwc time2:%d\r\n",timer2-timer1);                         HAL_ADC_Start_DMA(&hadc1,ADC_ConvertedValue,ADC_NUMOFCHANNEL);                  arm_cfft_f32(&arm_cfft_sR_f32_len1024, ADC_ConvertedValueLocal1, ifftFlag, doBitReverse);                 //                for(i=0;i<2048;i++) //                { //                printf("Bufwc[%d]:%f\r\n",i,ADC_ConvertedValueLocal1); //                }                         arm_cmplx_mag_f32(ADC_ConvertedValueLocal1, testOutput1, fftSize);                 //        for(i=0;i<1024;i++) //                { //                printf("fft_outputbuf[%d]:%f\r\n",i,testOutput1); //                }                         printf("CH1 DC1= %f \r\n",testOutput1[0]);         for(i=513;i<1024;i++)                 {                 testOutput1=0;         }         testOutput1[0]=0;                  arm_max_f32(testOutput1, fftSize, &maxValue1, &testIndex1);         printf("CH1 maxvalue1= %f Index1= %d\r\n",maxValue1,testIndex1);                  arm_cfft_f32(&arm_cfft_sR_f32_len1024, ADC_ConvertedValueLocal2, ifftFlag, doBitReverse);         arm_cmplx_mag_f32(ADC_ConvertedValueLocal2, testOutput2, fftSize);                  printf("CH2 DC2= %f \r\n",testOutput2[0]);         for(i=513;i<1024;i++)                 {                 testOutput2=0;         }         testOutput2[0]=0;                  arm_max_f32(testOutput2, fftSize, &maxValue2, &testIndex2);         printf("CH2 maxvalue1= %f Index2= %d\r\n",maxValue2,testIndex2);                  //arm_cfft_f32(&arm_cfft_sR_f32_len1024, ADC_ConvertedValueLocal3, ifftFlag, doBitReverse);         //arm_cmplx_mag_f32(ADC_ConvertedValueLocal3, testOutput3, fftSize);         //arm_max_f32(testOutput3, fftSize, &maxValue3, &testIndex3);                         timer3=HAL_GetTick();                 printf("FFTwc time3:%d\r\n",timer3-timer1);         //while(1);           }     } }

赞0
6 回答

STM32L4 FFT 自带arm_math.h编译不成功

STM32L4
MrLi... MrLi... 最优答案 回答时间: 2016-10-9 10:23

MrLi... 发表于 2016-9-22 10:59 现在我修改了程序,给FFT的输入buf单独写了个data.c(也还原论坛上有个师兄代码)编译后出现../Drivers/CMSI ... 后来我参照这个帖子修改成功,http://home.eeworld.com.cn/my/space-uid-53362-blogid-255017.html

赞0
6 回答

STM32 ADC中断方式采集多路模拟量

未设置标签
MrLi... MrLi... 最优答案 回答时间: 2016-10-14 11:50

我怀疑是中断响应不过来

赞0
1 回答

抢购L432开发板+综合定位系统

未设置标签
zero99 zero99 回答时间: 2016-8-2 18:23

请尽快把以下相关信息填写下,以便我们核实确认! https://www.eefocus.com/survey/20150802 另外,请使用社区账号直接登陆爱板网商城,爱板网将在1个工作日内发出优惠券,即可享受19.9元购买~ http://www.eeboard.com/shop/inde ... amp;t=s&id=3853

赞0
MrLi... MrLi...


阅读作者更多的帖子

所在话题

参与活动

  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16