TI的C64X系列的DSPLib实现fft

DSP操作教程 4-7 快速傅立叶变换(FFT)算法(CCS显示) 在计算机上进行的DFT,使用的输入值是时域的信号值,输入采样点的数量决定了转换的计算规模。FFT和FFT 逆变换函数中的第五个参数brev是指向包含64个表项的位反转表的指针,因此程序中需要提供64个表项,程序中的位反向表是计算出来的,可以通过代码提前转换的。离散傅里叶变换作为信号处理中最基本和最常用的运算,在信号处理领域占有基础性的地位,如果直接按照离散傅里叶变换的公式进行计算,求出N点X(k)需要N^2次复数运算、N(N-1)次复数加法,当N很大时,运算量是非常大的,这对于实时处理是无法接受的。 阅读详情
	花了几天时间实现了一下TI的C64系列DSPLib实现fft,结果基本还行,也有一些需要改进的地方。先总结一下。
	该系列的DSPLib可以在ti的官网上下载到。把其中的examples目录下的fft_example.c例程稍微修改了一下,实现复数的FFT运算。代码很简单,如下:
/* ======================================================================= */
/* fft_example.c -- FFT Example File                                       */
/*                                                                         */
/* Rev 0.0.1                                                               */
/*                                                                         */
/* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/  */
/*                                                                         */
/*                                                                         */
/*  Redistribution and use in source and binary forms, with or without     */
/*  modification, are permitted provided that the following conditions     */
/*  are met:                                                               */
/*                                                                         */
/*    Redistributions of source code must retain the above copyright       */
/*    notice, this list of conditions and the following disclaimer.        */
/*                                                                         */
/*    Redistributions in binary form must reproduce the above copyright    */
/*    notice, this list of conditions and the following disclaimer in the  */
/*    documentation and/or other materials provided with the               */
/*    distribution.                                                        */
/*                                                                         */
/*    Neither the name of Texas Instruments Incorporated nor the names of  */
/*    its contributors may be used to endorse or promote products derived  */
/*    from this software without specific prior written permission.        */
/*                                                                         */
/*  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS    */
/*  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT      */
/*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  */
/*  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT   */
/*  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,  */
/*  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT       */
/*  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,  */
/*  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY  */
/*  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT    */
/*  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE  */
/*  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.   */
/*                                                                         */
/*        This example demonstrates the usage of the various FFT kernels   */
/*        provided with the C6x DSPLIB. The example shows:                 */
/*        - Twiddle factor generation for the various kernels              */
/*        - Scaling that needs to be applied to get similar output         */
/*          when using different kernels                                   */
/*        - Demonstrates the usage of FFT APIs                             */
/*                                                                         */
/* ----------------------------------------------------------------------- */
/*            Copyright (c) 2011 Texas Instruments, Incorporated.          */
/*                           All Rights Reserved.                          */
/* ======================================================================= */

//#define _TMS320C6400_PLUS
#include <stdint.h>
#include <math.h>
#include <ti/dsplib/dsplib.h>

#include "gen_twiddle_fft16x16.h"
#include "gen_twiddle_fft16x32.h"
#include "gen_twiddle_fft32x32.h"

/* Global definitions */
/* Number of samples for which FFT needs to be calculated */
#define N 512

/* Align the tables that we have to use */

#pragma DATA_ALIGN(x_32x32, 8);
int32_t x_32x32[2 * N];
#pragma DATA_ALIGN(y_32x32, 8);
int32_t y_32x32[2 * N];
#pragma DATA_ALIGN(w_32x32, 8);
int32_t w_32x32[2 * N];
/*
 This function generates the input data and also updates the
 input data arrays used by the various FFT kernels
 */
float x_ref_float[2 * N];
int32_t y_abs_32x32[N];

void generateInput(int32_t numSinWaves) {
	int32_t i, j;

	/* Clear the input floating point array */
	for (i = 0; i < N; i++) {
		x_ref_float[2 * i] = (float) 0.0;
		x_ref_float[2 * i + 1] = (float) 0.0;
	}

	for (j = 0; j < numSinWaves; j++) {
		for (i = 0; i < N; i++) {
			x_ref_float[2 * i] = (float) cos(
					2 * 3.1415926 * 100 * (j + 1) / 1000 * i)
					+ 1 * (float) cos(2 * 3.1415926 * 30 * (j + 1) / 1000 * i);
			x_ref_float[2 * i + 1] = (float) sin(
					2 * 3.1415926 * 100 * (j + 1) / 1000 * i)
					+ 1 * (float) sin(2 * 3.1415926 * 30 * (j + 1) / 1000 * i);
		}
	}

	/* Convert the floating point data to reference fixed point data */

	for (i = 0; i < N; i++) {
		x_32x32[2 * i] = (int32_t) (x_ref_float[2 * i] * 1024);
		x_32x32[2 * i + 1] = (int32_t) (x_ref_float[2 * i + 1] * 1024);
	}
}

seperateRealImg() {
	int i;

	for (i = 0; i < N; i++) {
		y_abs_32x32[i] = (int32_t) sqrt(
				(double) (y_32x32[2 * i]) * (double) (y_32x32[2 * i])
						+ (double) (y_32x32[2 * i + 1])
								* (double) (y_32x32[2 * i + 1]));

	}
}

/*
 The main function that implements the example functionality.
 This example demonstrates the usage of the various FFT kernels provided
 with the C6x DSPLIB. The example shows:
 - Twiddle factor generation for the various kernels
 - Needed scaling to get correct output
 - Demonstrates usage of FFT APIs
 */

void main() {
	/* Generate the input data */
	generateInput(1);

	/* Genarate the various twiddle factors */
	gen_twiddle_fft32x32(w_32x32, N, 2147483647.5);

	/* Call the various FFT routines */
	DSP_fft32x32_cn(w_32x32, N, x_32x32, y_32x32);

	/* Call the test code to seperate the real and imaginary data */
	seperateRealImg();
	while (1)
		;
}

/* ======================================================================== */
/*  End of file:  fft_example.c                                             */
/* ------------------------------------------------------------------------ */
/*            Copyright (c) 2011 Texas Instruments, Incorporated.           */
/*                           All Rights Reserved.                           */
/* ======================================================================== */




效果如下图:
C64的FFT
总结一下:
1.用了两个复数单频信号(解析信号,没有负频率),频率分别为30和100,采样频率为1000.用graph显示基本正确(好像偏了一个分辨率?)。图里面显示的是x_32x32。
2.浮点转整型没有用例程的方法,简单乘以了1024,有些简陋(输入信号幅值为-2到2的小数)。
3.模值y_abs_32x32的结果看着不错,可惜在graph中未看到能调节x轴尺度的参数,所以y_abs_32x32的显示的频率位置要比正确的频率位置小一半。
4.FFT的运行速度真快,前面函数的运行速度真慢。

TMS320F28335 调用DSP函数库实现复数的FFT的方法 在数字信号处理中,FFT变换是经常使用到的,在DSP中自己编写的FFT变换函数通常会存在计算效率太慢的问题,有时需要调用DSP函数库自带的变换函数。但是,DSP在对FFT运算效率优化的同时,对于函数的调用方式也就有了比较多的要求,下面结合自己的调试经验做一下简单的介绍。 1、准备工作 DSP的数字信号处理的一系列函数都在C28x_FPU_Lib.lib库中,因此,首先需要在CCS的工程文件中连 阅读详情

相关推荐

利用TI的fftlib进行简单的FFT

今天终于把DSP中的FFT弄清楚了,现在总结下成果。一、首先介绍下FFT的理论知识 快速傅里叶变换(FFT)是DFT的一种快速算法实现。二、然后介绍下具体的编程实现#include #include #include /* Create an Insta

r91987的专栏 1万+

DSP6455开发: dsp.lib库使用总结

TI公司为DSP64x+系列的DSP芯片提供了一系列常用的DSP运算库函数,这些库函数由于在硬件上的优化速度往往比直接用C甚至汇编语言编写效率更高。 库函数使用注意事项:大部分函数对输入数组参数的大小有特殊要求(内部优化的需要),使用时需特别注意,使用不当将可能会引起输出错误。文中在描述数据长度要求时,使用xN表示数据长度应为x的倍数。 一.MATH类 1.对单个向量的操作 (1)short DSP_maxval (short *x, int nx) 函数介绍:返回数组中的最大值 ...

plotup的博客 3357

C55x DSP库基准测试实战:从FFT到FIR的性能与功耗深度解析

在嵌入式信号处理领域,数字信号处理器(DSP)的性能与功耗优化是核心挑战。其原理在于通过高度优化的硬件架构和指令集,对滤波、变换等算法进行加速。这项技术的价值在于,它直接决定了电池供电设备、实时音频处理等应用的续航与响应能力。为了在实际工程中做出精准选型,例如在通用FIR滤波器(fir1)与快速FIR滤波器(fir2)之间抉择,或评估软件FFT与硬件加速器(HWAFFT)的优劣,必须进行严谨的基准测试。本文以TMS320C55x DSP库为例,手把手详解如何搭建从项目导入、编译配置到运行分析的全套测试环境,

weixin_30729609的博客 307

利用CUBEMX中的DSP库实现ADC的DMA传输和调用FFT算法

主函数代码分析,因为使用的是单次DMA传输,如果需要使用多次DMA传输,在while中多次调用 HAL_ADC_Start_DMA();该函数即可,并且需要清除FFT的输入数据(更新数据),防止前一次的计算数据重叠到下一次的数据上。然后接下来为ADC+DMA配置,这里我配置ADC的时钟为2MHz,对32MHz的时钟进行16分频。用户初始化,ADC的DMA传输在hal库的adc.h中能找到。为当开启DMA时,数据存储完成后会重新从数据0开始重新存储,进行debug,将数据导出,然后是DMA的配置,

qq_51479328的博客 1681

TI DSP的 FFT与IFFT库函数的使用测试

/** * Copyright (C) 2013 Guangzhou Tronlong Electronic Technology Co., Ltd. - www.tronlong.com * * @file dsplib_fft.c * * @brief Example application main file. * This application will run FFT performance test. * * @author Tronlong <support@tron.

ToneChip的专栏,一个传统的嵌入式码农,裸机编程 2678

C66x DSP并行计算架构解析与FFT算法优化实践

在嵌入式高性能计算领域,VLIW(超长指令字)和SIMD(单指令多数据)是两种核心的并行计算架构思想。VLIW通过将多条无依赖指令打包成超长指令字,在编译期完成指令调度,实现指令级并行;而SIMD则允许一条指令同时处理多个数据元素,极大提升数据级并行度。这两种技术的结合,为数字信号处理(DSP)等计算密集型任务带来了革命性的性能提升,尤其适用于雷达信号处理、医学影像和通信基带等对实时性和吞吐量要求严苛的场景。C66x DSP核心正是这一设计哲学的杰出代表,它通过精细化的功能单元划分(如.M乘法单元、.D存取

weixin_34184561的博客 394

16bit 基4 fft c 语言,【C6678FFT】关于C64X与C66X DSPLIB中FFT的问题

TI工程师:你们好,关于C6678的FFT小弟有以下几个问题请教,求解答!====================================================DSP板:自己开发的DSP板,板上芯片TMS320C6678ACYP25OS:win xp win32CCS:CCS V5.3.0.0.00090DSPLIB:dsplib_c66x_3_2_0_1_Win32dsplib...

weixin_35715474的博客 799

ti有感FOC电机控制程序

ti有感交流感应电机FOC控制代码,PI控制,可以使用。用来控制3KW左右的交流感应电机,很强大。

TMS320C6455二维FFT和IFFT实现

目录FFT原理简介DSPLib配置图像数据生成DSPLib中的FFT和IFFT二维FFT和IFFT实现图像分析工具(Image Analyzer)测试结果相关资源链接 参考资料: Rafael C. Gonzalez, Richard E. Woods, 数字图像处理(第三版)4.11,配套书内资源 Alan V.Oppenheim, Ronald W.Schafer, 离散时间信号处理(第三版)9.5 SPRUEB8B - TMS320C64x+ DSP Little-Endian DSP Librar

小裘的博客 1725

官方例程_28035_28035电机_无感foc_TI点击驱动程序_无感无刷

使用的是28035平台,DRV8301驱动芯片,包含无感,有感的FOC和无刷电机驱动

基于CNN对抗嵌入的图像隐写——CNN-Based Adversarial Embedding for Image Steganography

CNN-Based Adversarial Embedding for Image Steganography https://ieeexplore.ieee.org/abstract/document/8603808 这篇论文发表在TIFS( IEEE TRANSACTIONS ON INFORMATION FORENSICS AND SECURITY),TIFS是网络与信息安全领域的国际两大顶级期刊之一,中国计算机学会(CCF)推荐的A类期刊,SCI一区TOP期刊,目前影响因子有7多了。 1 概

weixin_48654804的博客 2279

TI DSP28335的各种库文件

TI DSP各种库文件 1 概述 主要对各种TI提供的C2000系列DSP芯片的开发支持库进行整理介绍,持续更新。 RTS DSPLIB IMGLIB IQMATH VLIB XDCtool&amp;amp;amp;RTSC 2 RTS 官方介绍:Some of the features of C/C++ (such as I/O, dynamic memory allocation, string operat...

qq_25809103的博客 6921

傻白入门芯片设计,指令集架构、微架构、处理器内核(十一)

通俗理解指令集架构、微架构和处理器内核的关系

qq_46675545的博客 6017

从零开始:DSPLIB在TMS320 DSP上的高效算法实现与性能调优

本文详细介绍了如何在TMS320 DSP上使用DSPLIB实现高效数字信号处理算法并进行性能调优。从开发环境搭建、核心算法实现到内存子系统优化,提供了全面的实践指南,帮助开发者充分利用DSP硬件加速能力,提升信号处理效率。

melon的博客 1045

AC7811无感FOC实战:从开环到闭环的电机控制调试全记录

本文详细记录了基于国产AC7811芯片实现无感FOC电机控制的全过程。从硬件软件环境搭建、开环I/F启动调试,到滑模观测器参数整定,再到平滑切入闭环及双环PID调节,提供了完整的实战步骤与参数调试心法。文章重点分享了无感控制从开环到闭环切换的关键技巧与常见问题排查清单,为工程师提供了一份避坑指南。

kotlin6android的博客 713

CentOS7 内核升级

可在http://ftp.sjtu.edu.cn/sites/elrepo.org/linux/kernel/el7/x86_64/RPMS选择对应架构平台不受影响的内核版本文件下载,然后离线安装,也可通过yum下载包后进行安装。通过 #uname -sr ,可以看到当前的内核版本 Linux 3.10.0-1160.el7.x86_64。首先找台能访问互联网的机器,通过联网的机器进行内核包下载。lt:longterm的缩写:长期维护版;ml:mainline的缩写:最新稳定版;

Jian Sun_的博客 602

告别独立DSP?实测ARM Cortex-A72与TI C66x的FFT性能,结果有点意外

本文通过实测对比ARM Cortex-A72与TI C66x DSP在FFT性能上的表现,颠覆了传统认知。结果显示,Cortex-A72在2048点复数FFT中的耗时仅为C66x的63%,功耗降低40%,展现出显著的性能与能效优势。文章深入分析了两者在内存子系统、编译器优化等方面的差异,并提供了针对不同应用场景的选型建议。

weixin_33720956的博客 306

手眼标定----眼在手上(eye-in-hand)

@TOC 标定之前你可以先拿个怡宝盖子进行测试。 第一步:打开halcon,采集,然后生成代码,显示十字架 第二步:把怡宝盖子放在十字架中心位置,在图像处理,找到怡宝盖子 第三步:找到怡宝盖子然后进行九点标定(眼在外帖子有讲),移动机器手然后分别拍9次照片,记录怡宝盖子坐标和当前机器坐标。这里移动到中心位置的时候记录一下单独记录一下坐标,等下要用。 顺序 第四步:拍完后利用vector_to_hom_mat2d算子求出矩阵,然后在利用write_tuple (HomMat2D, ‘路径’)进行保存。这里

苏州程序大白的博客 4282

TI DSP各种库文件

TI DSP各种库文件1 概述主要对各种TI提供的C6000系列DSP芯片的开发支持库进行整理介绍,持续更新。 RTS DSPLIB IMGLIB IQMATH VLIB XDCtool&RTSC 2 RTS官方介绍:Some of the features of C/C++ (such as I/O, dynamic memory allocation, string operations,

水可马二的博客 1万+

IgH EtherCAT 从入门到精通:第 30 章 实战:高可用 EtherCAT 系统设计

摘要:构建高可用EtherCAT系统的关键技术 本章详细介绍了工业级EtherCAT系统的高可用性设计方法,主要包括: 冗余链路架构:采用双网卡环形拓扑设计,主备网卡同时工作,通过IgH Master的冗余配置实现线缆故障自动切换。 状态监控机制:提供专用API实时监控主备链路状态,包括从站响应数、链路状态和冗余激活标志,形成完整的故障判断矩阵。 自动恢复功能:系统内置FSM架构支持热插拔自动检测和重配置,从站断线/重连时可自动完成状态恢复,同时允许应用层实施安全措施。 这些技术共同构成了生产环境下Ethe

从事嵌入式linux android驱动开发,拥有全栈能力 247

39、高频 LLC 谐振转换控制系统动态优化算法分析与研究

本文针对高频下LLC谐振转换器动态性能差的问题,提出一种基于谐振电容器充放电估计动态切换时间的优化控制算法。通过改进状态轨迹控制方法,突破传统算法在谐振频率与开关频率相等条件下的限制,并结合新型采样策略有效抑制电压过冲。算法在MATLAB和SABER中完成仿真验证,并搭建基于STM32F407的原型系统进行测试,结果表明该方法显著缩短动态响应时间,提升系统稳定性。研究为高频、高功率密度开关电源的动态优化提供了可行解决方案。

linux6sysadmin的博客 111

【实战指南 TMS320***DSP】DSPLIB库函数在数字信号处理中的高效应用与性能优化

本文详细介绍了TMS320 DSPLIB库函数在数字信号处理中的高效应用与性能优化。从DSPLIB的安装配置到核心函数使用,包括滤波、FFT运算和矩阵操作等,通过实测数据展示其性能优势。文章还分享了内存对齐、循环展开等高级优化技巧,以及常见问题的排查方法,帮助开发者充分发挥TMS320 DSP的硬件潜力。

wood5的博客 213

Python 爬虫实战:付费 IP 代理使用技巧与爬虫稳定性优化

付费IP代理实战指南:突破反爬与优化稳定性 本文系统讲解付费IP代理在爬虫项目中的高效应用方法。首先对比分析静态代理、动态代理和隧道代理的优缺点及适用场景,推荐高并发项目优先选择隧道代理。然后详细演示了主流代理服务商的集成方法,包括代理池的自动更新和健康检测机制。核心部分重点介绍了爬虫稳定性优化策略,如智能重试、频率控制和请求间隔优化等关键技术。最后通过压力测试验证优化效果,并提供成本控制方案,包括代理复用、错峰爬取等实用技巧。通过本教程,开发者可有效解决高并发爬虫中的IP封禁问题,显著提升系统稳定性和抗风

2503_91057718的博客 2450

第一篇 关于DSP中的fft的相关问题

    前面下载了Ti的DSPLIB,其中的FFT函数是用手工优化的,效率极高,主循环可以达到每个指令周期都可以8条指令并行执行。    fft库中有以下函数:    DSP_radix2    DSP_r4fft    DSP_fft    DSP_fft16x16t    DSP_fft16x16r    DSP_fft16x32    DSP_fft32x32    DSP_fft32x32

GoodGoodStudy 9374

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

TMS320C55x DSP库函数性能与功耗基准测试实战指南

在嵌入式信号处理与实时系统开发中,性能优化与功耗评估是核心挑战。理解算法在特定硬件上的执行效率,需要从指令周期、内存访问和流水线等底层原理入手。通过精确的基准测试,工程师可以量化DSP(数字信号处理器)库函数的实际性能,评估其技术价值,为算法选型与系统设计提供数据支撑。在音频处理、通信基带和低功耗物联网设备等应用场景中,这种基于实测的评估方法至关重要。本文以TI TMS320C55x平台为例,详细拆解了如何搭建完整的基准测试框架,并深入分析了FFT、FIR滤波器等关键DSP函数的性能数据与功耗特性,为嵌入式

weixin_33898233的博客 380

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

下一篇: FMCW雷达多运动目标检测
netccdn
博客等级 码龄12年 40粉丝 29原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值