[DSP学习笔记]基于TMS320F28335的FFT及加窗函数实现
一、新建工程
首先我们先将C2000 wave中我们所需要的函数库给导入到我们的新建工程中(可见于我实现FIR滤波文章中导入函数库的操作)。
工程中可见有以下文件。(仅FFT可删除滤波有关文件)
接着新建我们所需的文件INPUT.c于Window.c。
二、输入信号
借助MATLAB我们来生成所需的输入信号于窗函数
生成输入信号的MATLAB程序如下:
%生成固定点数固定频率的正弦信号
%fs为采样率
%f为多频信号频率
%N为采样点数
%amp为信号幅值
%phase为信号初相位
function [input,t] = mult_freq_signal_test(fs,f,N,amp,phase)dt = 1/fs; %采样周期t = dt*N; %采样时间temp = (0:dt:(N-1)*dt)';y = amp.*sin(2*pi*f.*temp+phase/180*pi);Num = size(f,2); %获取f频率个数input = y*ones(Num,1);subplot(1,2,1);plot(temp/dt,input);title('信号时域');xlabel('点数 N');ylabel('幅值 A');subplot(1,2,2);Y = fftshift(fft(input));%做傅里叶变换并把零频点移到频谱中心F = (-N/2:N/2-1)*(fs/N);%设置横坐标plot(F,abs(Y)/max(abs(Y)));title('信号频域');xlabel('频率 f');ylabel('幅值 A')
end
%与mult_freq_signal_test.m函数式文件配合使用,将生成的输出信号保存到本地
fs=8e4; %设采样率为80K
f = [1e4,1.5e4,3e4]; %频率矩阵(1*N)测试信号频率为10K,15K,30K
phase = [20,0,40]; %初相位分别为为20,0,40
amp = [0.5/3*4095,0.3/3*4095,0.4/3*4095];%对应幅值为0.5V,0.3V,0.4V信号的采集值(ADC为0-3V)
N=1024; %采样点数y=mult_freq_signal_test(fs,f,N,amp,phase);y=reshape(y,[4,N/4]);
y=y+1.2/3*4095; %用于增加直流偏置,无需直流偏置时可注释,直流偏置为1V
y=y';%writematrix(y,'record.txt','delimiter',',');%将生成的初始信号保存到.m文件路径下的record.txtfileID = fopen('record.txt','w');
for i=1:1:N/4fprintf(fileID,'%.6f,%.6f,%.6f,%.6f,\n',y(i,1),y(i,2),y(i,3),y(i,4));
end
fclose(fileID);%将生成的初始信号保存到.m文件路径下的record.txt
将record.txt的文件内容复制到INPUT.c中,如下:
//#############################################################################
//! \file input.c
//! \brief Input Vector (2048)
//! \author Vishal Coelho
//! \date 19-Jan-2023
//!
//
// Group: C2000
// Target Family: $DEVICE$
//
//#############################################################################
//
//
// $Copyright: Copyright (C) 2020 Texas Instruments Incorporated -
// http://www.ti.com/ ALL RIGHTS RESERVED $
//##############################################################################include <stdint.h>#pragma DATA_SECTION(FFT_input, "FFT_buffer3")// Matrix is 2 times its required sizeas it will be used to store
// 1024 floats at a later point
uint16_t FFT_input[2048] = {2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,2222.390783,2682.470769,2150.640175,2313.650403,644.109217,815.149034,1704.480279,1183.969400,2222.390783,1925.813432,1571.519721,2627.068134,1463.109217,1128.566765,1125.359825,427.312063,
};// End of File
三、窗函数
接下我们进行窗函数的生成。
1.加窗之前,首先我们要明白我们为什么要加窗。
在实际应用中,我们采集到的信号通常是较长的非周期时间序列,在进行FFT时,需要对信号进行截断。截断后得到的信号通常是非周期信号,所以FFT结果就变成了连续的谱线,周期信号的频率-幅值不再是一条垂直的直线,而是一条曲线,同时幅值下降,泄露到曲线其他频率点,即我们常说的频谱泄露。而窗函数一个周期函数,窗函数与截断信号相乘后,会变成比较接近周期函数的波形(实际上就是利用窗函数进行调制)。加窗后的信号进行FFT后,得到的频谱曲线会更窄,趋向于垂直直线。因此对频谱泄露有一定改善。
2.知道为什么要加窗后,我们再来根据实际情况来选择我们所需要的窗函数。
通常情况下,我们不对输入信号进行处理,而直接截断情况下相当于给信号加了一个矩形窗。
如果我们对于FFT后的结果要求精确的幅值,平顶窗是我们的首选。
如果我们对应FFT后的结果要求精确的频率点,则可以选择汉宁窗。
如果检测两个频率相近、幅度不同的信号,可以选用布莱克曼窗。
如果对应频率于幅值均有一定要求,则可以选用凯赛窗。
3.选择完窗函数,我们还要对FFT后的结果乘以他们对应的恢复系数(窗函数对信号有衰减),如下表:
了解完以上知识,我们便可以继续我们的实验。
在MATLAB命令行窗口敲入window,进入下列界面并完成下列配置。(本次测试选用汉宁窗)
点击文件,导出
导出到工作区,我使用默认的变量名。我们便在工作区得到了从我们所需要的窗函数。
但是,我们工程实际应用,还需对得到的窗函数进行处理,将其转化为Q16型。
官方例程中提出,如下
通过编写MATLAB文件实现,并保存到本地的window.txt文件中。
%将窗设计器生成的窗系数打印到window.txt文件中fileID = fopen('window.txt','w');
N=1024;%生成窗点数Win=reshape(Win',N,1);
Windows=uint16(floor(Win.*(2^16))); % convert to Q16Windows=reshape(Windows,[4,N/4]);
Windows=Windows';
for i=1:1:N/8fprintf(fileID,'%d,%d,%d,%d,\n',Windows(i,1),Windows(i,2),Windows(i,3),Windows(i,4));
end
fclose(fileID);%将生成的初始信号保存到.m文件路径下的window.txt
将window.txt的内容复制到window.c中,如下:
//#############################################################################
//! \file window.c
//! \brief window Vector (512)
//! \author yang
//! \date 19-Jan-2023
//! 此窗函数为汉宁窗,由MATLAB生成,加窗后FFT结果需乘以恢复系数,汉宁窗恢复系数为2
//
// Group: C2000
// Target Family: $DEVICE$
//
//#############################################################################
#include "dsp.h"const uint16_t Window[512]={0,0,2,5,9,15,22,30,39,50,61,74,88,104,121,138,158,178,200,222,246,272,298,326,355,385,416,449,483,518,554,592,630,670,711,754,797,842,888,935,983,1033,1084,1136,1189,1243,1299,1355,1413,1472,1533,1594,1657,1720,1785,1851,1919,1987,2057,2128,2199,2273,2347,2422,2499,2576,2655,2735,2816,2898,2982,3066,3152,3238,3326,3415,3505,3596,3688,3782,3876,3972,4068,4166,4265,4364,4465,4567,4670,4774,4880,4986,5093,5201,5311,5421,5532,5645,5758,5873,5988,6105,6222,6341,6460,6581,6702,6825,6948,7072,7198,7324,7451,7580,7709,7839,7970,8102,8235,8369,8504,8640,8776,8914,9052,9192,9332,9473,9615,9758,9901,10046,10191,10338,10485,10633,10782,10931,11082,11233,11385,11538,11692,11846,12002,12158,12315,12472,12631,12790,12950,13110,13272,13434,13597,13760,13924,14090,14255,14422,14589,14757,14925,15094,15264,15434,15606,15777,15950,16123,16296,16471,16646,16821,16997,17174,17351,17529,17708,17887,18066,18246,18427,18608,18790,18972,19155,19339,19522,19707,19891,20077,20263,20449,20636,20823,21010,21198,21387,21576,21765,21955,22145,22336,22527,22718,22910,23102,23295,23487,23681,23874,24068,24262,24457,24652,24847,25042,25238,25434,25630,25827,26024,26221,26418,26616,26813,27011,27210,27408,27607,27806,28005,28204,28403,28603,28802,29002,29202,29402,29603,29803,30003,30204,30405,30606,30806,31007,31208,31409,31611,31812,32013,32214,32415,32617,32818,33019,33220,33422,33623,33824,34025,34226,34427,34628,34829,35030,35231,35431,35632,35832,36033,36233,36433,36633,36832,37032,37232,37431,37630,37829,38028,38226,38425,38623,38821,39018,39216,39413,39610,39807,40003,40199,40395,40591,40786,40981,41176,41370,41564,41758,41951,42144,42337,42529,42721,42913,43104,43294,43485,43675,43864,44054,44242,44431,44618,44806,44993,45179,45365,45551,45736,45921,46105,46288,46471,46654,46836,47017,47198,47379,47559,47738,47917,48095,48272,48449,48626,48802,48977,49151,49325,49499,49672,49844,50015,50186,50356,50526,50694,50862,51030,51197,51363,51528,51693,51857,52020,52182,52344,52505,52665,52825,52984,53142,53299,53455,53611,53766,53920,54073,54226,54378,54529,54679,54828,54976,55124,55271,55416,55561,55706,55849,55991,56133,56273,56413,56552,56690,56827,56963,57099,57233,57366,57499,57630,57761,57891,58020,58147,58274,58400,58525,58649,58772,58894,59015,59135,59254,59372,59489,59605,59720,59834,59947,60058,60169,60279,60388,60496,60602,60708,60813,60916,61019,61120,61221,61320,61418,61515,61611,61706,61800,61893,61985,62075,62165,62253,62340,62426,62511,62595,62678,62760,62840,62919,62998,63075,63151,63226,63299,63372,63443,63513,63582,63650,63717,63782,63847,63910,63972,64033,64092,64151,64208,64264,64319,64373,64425,64477,64527,64576,64624,64670,64716,64760,64803,64844,64885,64924,64962,64999,65035,65069,65102,65134,65165,65195,65223,65250,65276,65301,65324,65346,65367,65387,65406,65423,65439,65454,65467,65480,65491,65501,65509,65517,65523,65528,65532,65534,65535,
};
四、FFT以及计算幅值
接下来进行编写对FFT进行初始化的函数。
void RFFT_Init()
{RFFT_f32_setInputPtr(hnd_rfft, (float *)FFT_input);RFFT_f32_setOutputPtr(hnd_rfft, FFT_output);RFFT_f32_setStages(hnd_rfft, FFT_STAGES);RFFT_f32_setFFTSize(hnd_rfft, FFT_SIZE);RFFT_f32_setMagnitudePtr(hnd_rfft, FFT_magnitude_phase);RFFT_f32_setPhasePtr(hnd_rfft, FFT_magnitude_phase);RFFT_f32_setTwiddlesPtr(hnd_rfft, FFT_twiddleFactors);RFFT_f32_sincostable(hnd_rfft);RFFT_ADC_f32_setTailPtr(hnd_rfft_adc, &(hnd_rfft->OutBuf));RFFT_ADC_f32_setInBufPtr(hnd_rfft_adc, FFT_input);RFFT_adc_f32_win(FFT_input, Window, FFT_SIZE );
}
进行FFT以及对FFT结果进行计算的函数。
void RFFT_Caculate()
{float* mag;RFFT_adc_f32(hnd_rfft_adc);RFFT_f32_mag(hnd_rfft); //计算幅度mag=RFFT_f32_getMagnitudePtr(hnd_rfft);RFFT_Analyse(mag);
}
需注意的是,FFT的返回值不是幅值,我们需对其进行转换。
首先对FFT的结果进行取模,使用RFFT_f32_mag()函数,得到幅度。
接着对幅度再进行相应的处理,如下表:
即,直流分量的幅值等于幅度除以采样点数,其余的的幅值等于幅值除以采样点数的一半。
对幅度进行分析的函数
void RFFT_Analyse(float *src)
{Uint16 i;float FFT_Value; //FFT_Value为该频率点的FFT后的幅度Uint16 peak_index[RFFT_Analyse_MaxNum];//存放的峰值个数为RFFT_Analyse_MaxNum个memset(peak_index, 0U, RFFT_Analyse_MaxNum*sizeof(Uint16)); //初始化将指定区块为0值memset(rfft_analyse.freq, 0U, RFFT_Analyse_MaxNum*sizeof(float));memset(rfft_analyse.Amp, 0U, RFFT_Analyse_MaxNum*sizeof(float));rfft_analyse.Wave_Num=RFFT_Peak_Find(src,FFT_SIZE/2,peak_index);for(i=0;i<rfft_analyse.Wave_Num;i++){rfft_analyse.freq[i]=(float) Fs / FFT_SIZE * peak_index[i];//计算频率,已调试过,为准确频率FFT_Value=*(src+peak_index[i]);rfft_analyse.Amp[i] = 2 * FFT_Value / FFT_SIZE * 3 * 2; //将幅度转换为幅值公式:幅值=(幅度/(采样点数/2))该点不为FFT后结果的第一个点和最后一个点,乘3是ADC的转化范围为0-3V,乘2是汉宁窗的幅度恢复系数}rfft_analyse.DC_Amp=src[0]/FFT_SIZE * 3 * 2; //直流分量的幅值=幅度/采样点数,乘2是汉宁窗的幅度恢复系数
}
在主函数中,对RFFT_Init()和RFFT_Caculate()完成调用,即可。
五、核验结果
准备阶段结束,进入仿真。
仿真结果如下:
频率点:
对应幅值:
直流分量:
可以看到加窗后FFT的结果于输入信号相吻合,测试结束。
需要工程文件的可以私信我,本文如有错误,也请多多指出。
本文编写时,参考了以下相关文章:
【1】窗函数总结_wxyczhyza的博客-CSDN博客_窗函数衰减【2】TMS320F28335调用官方库进行FFT频谱分析_PeepFuture橙子的博客-CSDN博客
[DSP学习笔记]基于TMS320F28335的FFT及加窗函数实现相关推荐
- [DSP学习笔记]基于TMS320F28335的FIR滤波实现
首先进入TI官网,搜索C2000 wave,进行下载安装. 安装完成后,在2000 wave的安装目录下,进入以下目录:C2000Ware_4_02_00_00\libraries\dsp\FPU\c ...
- DSP学习笔记之EPWM
DSP学习笔记之EWPM学习 \qquad 学习PWM模块的知识,最少需要掌握频率可调.占空比可调.互补死区可调.多个PWM相位差可调等.内容较多,主要是参照英文手册中几个模块的介绍,内容很多,最基本 ...
- STM32学习笔记——基于正点原子例程编码器模式小结
STM32学习笔记--基于正点原子例程编码器模式小结 最近一段时间学习了,STM32f4的编码器功能,经过自己探索和他人的热心帮助,对于编码器模式有了一定了解.STM32f4单片机提供编码器模式,以便 ...
- 激光slam学习笔记——基于图优化的激光slam方法
激光slam学习笔记--基于图优化的激光slam方法 1.slam基础 整体来说,在激光slam中,滤波器的误差要小于图优化的误差. 图优化通俗点说就是里程计计算的位姿与观测到的位姿之间会形成一个误差 ...
- 嵌入式学习笔记——基于Cortex-M的单片机介绍
基于Cortex-M的单片机介绍 前言 1生产厂商及其产品线 1.1ARM单片机的产品线 1.2命名规则 作业1 2习单片机的资料准备 2.1STM32开发所需手册 2.1.1芯片的数据手册 芯片基本 ...
- 学习笔记 —— 基于C加速的Python高效计算 (Cython pybind11)
目录 引言 Cython 示例介绍 第一阶段优化 第二阶段优化 Cython Annotation tool 优化方法 第三阶段优化 比对下 JIT的Numba 总结 pybind11 Links I ...
- HaaS学习笔记 | 基于HaaS Python轻应用的LED跑马灯明细教程
[1]题目要求 [案例]:在HaaS框架下实现LED跑马灯. 蓝蜻蜓ESP32开发板的LED灯电路连接如下: D3灯----GPIO14,高电平点亮,低电平熄灭. ...
- ROS学习笔记——基于Prometheus无人机开源项目仿真环境配置
本笔记基于ubuntu18.04版本,配置基于Prometheus无人机开源项目仿真环境. 需要事先在电脑上安装了ROS,Mavros功能包,其余可参考Amov教程, ...
- 学习笔记 | 基于FPGA的伪随机数发生器(附代码)
今天给大侠带来在基于FPGA的伪随机数发生器,话不多说,上货. 今天是画师本人第一次和各位大侠见面,执笔绘画FPGA江湖,本人写了篇关于FPGA的伪随机数发生器学习笔记,这里分享给大家,仅供参考. 1 ...
最新文章
- 验证数字的正则表达式集
- android学习第一天
- Android Service和Binder、AIDL
- tomcat quartz 被触发两次
- 颠覆认知!完美赌徒,到底是如何用数学打造经济神话?!
- PowerBuilder调用.Net编译好的DLL
- 华为云整合三朵云能力,第二阶段决战大政企战场
- 软件工程的 第二天贪吃蛇
- 06-continue和break的区别
- 33. PHP Sessions
- bat 判断文件名字含有某些字段_PE文件头及其简单逆向运用
- radius认证服务器无响应,squid radius认证“RADIUS服务器没有响应”
- 菜鸟教程html5常用标签,HTML5 Canvas | w3cschool菜鸟教程
- 数字图像处理知识(3)
- 大型互联网产品的全链路压测
- 生物信息学导师推荐(持续更新)
- 使用代理ip进行反反爬虫——爬取句子迷网站,获取小说龙族经典句子
- PS笔记:调色部分理论基础
- 教你一个快速掌握知识的学习方法
- 纸壳CMS现已支持自定义扩展字段