[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;       %用于增加直流偏置,无需直流偏置时可注释,直流偏置为1.2V
y=y';

%writematrix(y,'record.txt','delimiter',',');%将生成的初始信号保存到.m文件路径下的record.txt

fileID = fopen('record.txt','w');
for i=1:1:N/4
    fprintf(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 Q16

Windows=reshape(Windows,[4,N/4]);
Windows=Windows';
for i=1:1:N/8
    fprintf(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博客

### 回答1: TMS320F28335是德州仪器公司(TI)推出的一款数字信号处理器(DSP),该处理器被广泛应用于工业控制、汽车电子、医疗器械等多个领域。 本书《TMS320F28335 DSP原理、开发及应用》对于TMS320F28335的原理、开发以及应用进行了全面介绍。该书首先介绍了TMS320F28335的硬件结构、主要特性和性能。其次,详细讲解了TMS320F28335的程序设计与开发DSP系统的仿真与调试、DSP应用开发等内容。最后,书中还附有DSP开发板的使用说明和实例程序。 通过学习本书,读者能够全面深入地了解TMS320F28335的体系结构和原理,掌握DSP程序开发的方法和技巧,熟练掌握DSP系统调试和优化技术,并能够快速开发出各种DSP应用程序,提高工作效率。 总之,该书是一本权威且实用的DSP学习和应用指南,对于从事数字信号处理领域的技术人员、工程师和学生都是一本不可多得的工具书籍。 ### 回答2: Tms320f28335是一种数字信号处理器(DSP)芯片,它被广泛应用于各种控制系统,例如工业机器人和电动汽车。该芯片的主要应用领域是实时控制。 在Tms320f28335 DSP原理中,主要包括该芯片的硬件结构和内部架构,以及该芯片的操作系统和编程方式。该芯片具有高速和高精度的运算能力、大容量的存储器以及多种外设接口。它通过集成模数转换器、PWM信号生成器、CAN总线接口等实现对不同控制系统的实时采集和控制操作。 在Tms320f28335 DSP开发中,需要配置好芯片的软件环境并进行编程开发。该芯片支持多种编程语言和开发环境,例如C语言、MATLAB和Simulink等。其中,MATLAB和Simulink可以帮助开发者对控制系统进行建模和仿真,以确保控制系统的稳定性和可靠性,同时简化了编程工作。 Tms320f28335 DSP应用范围广泛,主要包括工业控制、电力电子、新能源、医疗设备等领域。在工业控制领域,Tms320f28335 DSP被广泛应用于工厂自动化、机器人控制、电梯控制等场景。在电力电子领域,该芯片被用于电力转换器控制、调速控制、电力质量控制等方面。在新能源领域,它被用于太阳能和风能转换器控制,以实现能源的高效利用。在医疗设备领域,Tms320f28335 DSP被用于超声诊断系统、MRI控制系统等方面。 综上所述,Tms320f28335 DSP具有高性能、高稳定性、高精度和高可靠性等特点,已经成为数字控制系统中不可或缺的重要组成部分,预计在未来会继续得到广泛应用。 ### 回答3: TMS320F28335是德州仪器公司(TI)推出的一款数字信号处理器(DSP),它采用了C28x内核架构,是TI DSP家族中的一员。作为一款高性能的DSP芯片,TMS320F28335在许多领域得到了广泛的应用,比如在控制、通信、医疗、能源、汽车等领域。 关于TMS320F28335 DSP原理,可以从内核架构、指令集、存储器和外设等方面来讲解。 首先是内核架构,TMS320F28335采用了C28x内核架构,它包含了一套高度优化的32位RISC处理器指令集,支持DSP和控制代码的高效处理。 其次是指令集,TMS320F28335的指令集在保留传统DSP指令的同时,还增了许多针对控制和通信应用的指令,比如PWM指令、CAN指令、SPI指令等,这些指令大大提高了DSP的通用性和灵活性。 再来说存储器,TMS320F28335内置了128K的Flash存储器和68K的RAM存储器,这些存储器既可以用于指令和数据存储,也可以用于预存储一些常用数据,从而提高DSP的运算速度。 最后是外设,TMS320F28335拥有十分丰富的外设接口,包括6个PWM模块、12个ADC、2个CAN、2个SPI、2个UART和1个SCI等,这些外设可以满足各种应用的需要。 在TMS320F28335 DSP开发方面,由于TI提供了完整的开发工具链,包括编译器、仿真器、调试器和开发板等,因此开发者可以通过这些工具轻松实现DSP应用的开发和调试。 当然,开发者还需要了解DSP的编程方法和算法,比如使用C语言或汇编语言编写DSP程序、掌握FFT、IIR、FIR等常用的DSP算法。 在TMS320F28335 DSP应用方面,它可以应用于许多领域,比如在控制领域可以用于电机控制、电源控制、照明控制等,而在通信领域可以用于无线通信、网络通信等。 总之,TMS320F28335是一款功能强大的DSP芯片,它具有高性能、灵活性和可扩展性等优点,在许多应用领域都有着广泛的应用前景。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值