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函数后占用空间对比
移植前
移植后大约多了10K
二、代码实现
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。可以使用此库。
本文地址:https://blog.csdn.net/weixin_39309257/article/details/110179776
上一篇: C#事件处理的代理机制
下一篇: 微信小程序商城怎么推广?