欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

GD32E103移植stm32 fft函数

程序员文章站 2022-03-07 23:41:13
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、移植fft函数后占用空间对比二、代码实现1.GD32代码2.matlab代码总结前言GD32E103移植stm32 fft函数cr4_fft_1024_stm32。一、移植fft函数后占用空间对比移植前![在这里插入图片描述](https://img-blog.csdnimg.cn/20201126112256444.png#pic_center移植后大约多了10K二、代码实现1.GD32代码代码...


前言

GD32E103移植stm32 fft函数
void cr4_fft_1024_stm32(void *pssOUT, void *pssIN, uint16_t Nbin);


一、移植fft函数后占用空间对比

移植前
GD32E103移植stm32 fft函数

移植后大约多了10K
GD32E103移植stm32 fft函数

二、代码实现

1.GD32代码

代码如下:

#include "main.h"
#include <math.h>
#include <stdint.h>
#include "DSP.h"

#define NPT 1024
#define PI2 6.28318530717959
#define Fs 44800

uint32_t lBufInArray[NPT];
uint32_t lBufOutArray[NPT/2];
uint32_t lBufMagArray[NPT/2];

void InitBufInArray()
{
    unsigned short i;
    float fx,fs;
     fs = (float)Fs;
    for(i=0; i<NPT;i++)
    {
        fx = 1000 + 1500 * sin(PI2 * i * 350.0 / fs) +
            2500 * sin(PI2 * i * 8400.0 / fs) +
            4000 * sin(PI2 * i * 18725.0 / fs);
        lBufInArray[i] = ((signed short)fx) << 16 ;
    }
}

void GetPowerMag()
{
    signed short lX,lY;
    float X,Y,Mag;
    unsigned short i;

    for(i=0; i<NPT/2;i++)
    {
        lX  = (lBufOutArray[i] << 16) >> 16;
        lY  = (lBufOutArray[i] >> 16);
        X = NPT * ((float)lX) / 32768;
        Y = NPT * ((float)lY) / 32768;
        Mag = sqrt(X * X + Y * Y) * 1.0 / NPT;
        if(i == 0)
           lBufMagArray[i] = (unsigned long)(Mag * 32768);
        else
           lBufMagArray[i] = (unsigned long)(Mag * 65536);
    }
}

void DSP_FFT1024(void)
{
	InitBufInArray();
	cr4_fft_1024_stm32(lBufOutArray, lBufInArray, NPT);
	GetPowerMag();
}




2.matlab代码

代码如下:

clear
Fs = 44800;                  % 采样率
N  = 1024;           % 采样点数
n  = 0:N-1;           % 采样序列
t  = 0:1/Fs:1-1/Fs;     % 时间序列
f = n * Fs / N;          %真实的频率

x = 1000 + 1500 * sin(2*pi*350*t) +2500 * sin(2*pi*8400*t) +4000 * sin(2*pi*18725*t);
y = fft(x, N);               %对原始信号做FFT变换

subplot(2,1,1);
Mag = abs(y)*2/N;         %求FFT转换结果的模值
plot(f, Mag);               %绘制幅频相应曲线
title('Matlab计算结果');
xlabel('频率');
ylabel('幅度');

总结

这里对文章进行总结:GD32在第9个点,真实频率f=350hz,幅值1492。matlab计算结果为1500。可以使用此库。
GD32E103移植stm32 fft函数

GD32E103移植stm32 fft函数

本文地址:https://blog.csdn.net/weixin_39309257/article/details/110179776

相关标签: fft