ADI Blackfin DSP处理器-BF533的开发详解33:数字信号处理详解-FFT(含源代码)

news2024/11/20 20:30:21

硬件准备

ADSP-EDU-BF533:BF533开发板
AD-HP530ICE:ADI DSP仿真器

软件准备

Visual DSP++软件

硬件链接

在这里插入图片描述

功能介绍

FFT(Fast Fourier Transformation),即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。

代码实现了通过 Visual DSP++ 软件的 BTC(Background Telemetry Channels)功能进行后台监测,FFT 算法产生一个输入的波形数据,经计算后产生输出的波形数据,然后将输入和输出波形数据由 BTC 控制,通过视图实时输出显示。

调试步骤

  1. 按下图,选择“Restore”菜单。

在这里插入图片描述

  1. 在弹出会话框上找到工程路径下 fft_in.vps 文件,打开。

  2. 用同样的方法打开工程路径下 fft_out.vps 文件。
    在这里插入图片描述

  3. 打开后在 Visual DSP++软件下可以看到两个波形窗口。

在这里插入图片描述

  1. 打开 BTC Memory 窗口

BTC Memory 窗口必须采用 AD-HP560ICE仿真器和 ADZS- HPUSB-ICE 仿真器时,才能使用。

AD-HP530ICE 仿真器不支持该功能,该选项为灰色。

在这里插入图片描述

  1. 打开后 BTC Memory 如图

在这里插入图片描述

  1. 选中 FFT OUT 波形视图框,按鼠标右键,选择“Auto Refresh Settings…”选项。

在这里插入图片描述

  1. 在弹出会话框中,按如下设置,完后后点“OK”

在这里插入图片描述

  1. 再次调出鼠标右键菜单,选择“Auto Refresh”

在这里插入图片描述

  1. 用同样的方法,对 FFT IN 波形视图框进行设置。
  2. 选中 BTC Memory 窗口,鼠标右键调出菜单,选择格式为“Hex32”

在这里插入图片描述

  1. 选中后 BTC Memory 窗口以 32bit 显示。

在这里插入图片描述

  1. 选中 BTC Memory 下拉菜单,选择“FREQ STEP SIZE”。

在这里插入图片描述

  1. 在下面的地址中输入 10~100 任意数据,来设置改变波形和数据刷新的频率。

在这里插入图片描述

  1. 编译并全速运行代码。

运行代码后,在两个波形窗口中可以看到变化的波形图像。

在这里插入图片描述

BTC 窗口检测到的 FFT_INPUT 的数据:

在这里插入图片描述

BTC 窗口检测到的 FFT_OUTPUT 的数据:

在这里插入图片描述

程序源码

#include <sys/exception.h>
#include <complex.h>
#include <filter.h>
#include <math.h>
#include <math_const.h>

#include <btc.h>

#define NUMPOINTS 512

complex_fract16 out[NUMPOINTS];
complex_fract16 w[NUMPOINTS]; //twiddle sequence

fract16 input_arr[NUMPOINTS];
fract16 mag[NUMPOINTS];

#define MINFREQ 100.0
#define MAXFREQ 20000.0


// BTC Definitions

fract16 BTC_CHAN0[NUMPOINTS+8];
fract16 BTC_CHAN1[NUMPOINTS+8];
int BTC_CHAN2 = 0x10;

BTC_MAP_BEGIN
// Channel Name, Starting Address, Length
BTC_MAP_ENTRY(“FFT_INPUT”, (long)&BTC_CHAN0, sizeof(BTC_CHAN0))
BTC_MAP_ENTRY(“FFT_OUTPUT”, (long)&BTC_CHAN1, sizeof(BTC_CHAN1))
BTC_MAP_ENTRY(“FREQ STEP SIZE”, (long)&BTC_CHAN2, sizeof(BTC_CHAN2))
BTC_MAP_END


// function prototypes

void initTimer(void);
void create_samples(float f);

/
// interrupt handler prototypes
/
EX_INTERRUPT_HANDLER(timerISR); // timer interrupt handler

void main()
{
int i,j;
int wst = 1;
int n = NUMPOINTS;
int block_exponent;
int scale_method = 1;
float freq;

btc_init();
	
// install our interrupt handlers
register_handler(ik_timer, timerISR);

//init twiddle factors
twidfftrad2_fr16(w, NUMPOINTS);

//increment freq
freq = MINFREQ;
create_samples(freq);

// initialize the timer and the programmable flags
initTimer();

while (1) {
	
	//generate input
	create_samples(freq);
	
	//fft
	rfft_fr16(input_arr, out, w, wst, n, &block_exponent, scale_method);

	for (i=0; i<NUMPOINTS; i++) {
		mag[i] = cabs_fr16(out[i]);
	}
		
	//write to BTC channel
	btc_write_array(0, (unsigned int*)input_arr, sizeof(input_arr));
	btc_write_array(1, (unsigned int*)mag, sizeof(mag));
	
	
	freq += BTC_CHAN2;
	if (freq > MAXFREQ) freq = MINFREQ;
	
}

}

void create_samples(float f)
{
int i,j;

float fs = 48000.0;
float step;

//generate input
for (i=0; i<NUMPOINTS; i++) {
	step = (float)i/fs;
	input_arr[i] = (fract16) (sin(2*PI*f*step)*32760.0);
}

}

//
// initTimer
//
void initTimer()
{
unsigned int *mmrPtr;

mmrPtr = (unsigned int*)0xffe03000;		// timer control register
*mmrPtr = 5;							

mmrPtr = (unsigned int*)0xffe03004;		// timer period register
*mmrPtr = 0x00001000;

mmrPtr = (unsigned int*)0xffe03008;		// timer scale register
*mmrPtr = 0x00000000;

mmrPtr = (unsigned int*)0xffe0300c;		// timer count register
*mmrPtr = 0x00001000;

mmrPtr = (unsigned int*)0xffe03000;		// timer control register
*mmrPtr = 7;							// enable the timer

}


// timer interrupt handler

EX_INTERRUPT_HANDLER(timerISR)
{
btc_poll();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/81718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web前端期末大作业:JavaScript大作业——福五鼠动漫网页制作(6页)带轮播图效果 学生个人单页面网页作业 学生网页设计成品 静态HTML网页单页制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

R语言大数据分析纽约市的311万条投诉统计可视化与时间序列分析

介绍 本文并不表示R在数据分析方面比Python更好或更快速&#xff0c;我本人每天都使用两种语言。这篇文章只是提供了比较这两种语言的机会。 本文中的 数据 每天都会更新&#xff0c;我的文件版本更大&#xff0c;为4.63 GB。 CSV文件包含纽约市的311条投诉。它是纽约市开放…

MySQL 数据库 C/C++ 常用函数

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

火爆出圈的OpenAI模型ChatGPT体验

1、ChatGPT简要介绍 ChatGPT是一种高效的语言模型&#xff0c;全称为"聊天式自动回复生成技术"&#xff08;Chat-based Automatic Reply Generation Technology&#xff09;&#xff0c;用于预测人类语言的后续内容。它是基于OpenAI的GPT-3模型构建的&#xff0c;具…

XCIE-HUAWEI-超级完整的BGP-1

XCIE-HUAWEI-超级完整的BGP-1 声明&#xff0c;内容对比前面的可能差一点&#xff0c;因为这个BGP我是会的&#xff0c;但是华为的特性啥的不太会 所以相对来说可能没那么详细&#xff0c;不过应该也够的了&#xff0c;要看思科的翻我的文章去有思科的 先说一个东西 面试会问…

S7-200SMART实现MODBUS TCP通信(客户端+服务器)的具体方法和步骤示例

S7-200SMART实现MODBUS TCP通信(客户端+服务器)的具体方法和步骤示例 STEP7-Micro/WIN SMART 从V2.4 版本开始,软件中直接集成 Modbus TCP 库指令,安装软件后,Modbus TCP 指令位于 STEP7-Micro/WIN SMART 项目树中“指令”文件夹的“库”文件夹中。 如下图Modbus TCP库指令…

R语言曲线回归:多项式回归、多项式样条回归、非线性回归数据分析

最近我们被客户要求撰写关于曲线回归的研究报告&#xff0c;包括一些图形和统计输出。本文将使用三种方法使模型适合曲线数据&#xff1a;1&#xff09;多项式回归&#xff1b;2&#xff09;用多项式样条进行B样条回归&#xff1b;3&#xff09; 进行非线性回归。在此示例中&am…

微信小程序 | 一比一复刻世界杯点球大战

&#x1f4cc;个人主页&#xff1a;个人主页 ​&#x1f9c0; 推荐专栏&#xff1a;小程序开发成神之路 --【这是一个为想要入门和进阶小程序开发专门开启的精品专栏&#xff01;从个人到商业的全套开发教程&#xff0c;实打实的干货分享&#xff0c;确定不来看看&#xff1f; …

Codeforces Round #837 (Div. 2) Hossam and Friends

原题链接&#xff1a;https://codeforces.com/contest/1771/problem/B 题意 &#xff1a;你总共有n个朋友编号1~n&#xff0c;其中m对互不认识&#xff0c;求1~n区间中没有互不认识的子段的总个数。 思路&#xff1a;总字段个数为每个编号前面的编号个数&#xff08;包括自己…

RK3568平台开发系列讲解(安卓适配篇)Android11 预安装应用功能

&#x1f680;返回专栏总目录 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; &#x1f4e2;Android11 上的应用预安装功能&#xff0c;主要是指配置产品时&#xff0c;需要将提前准备好的第三方应用 apk 放进 android 系统。在实际的研发过程…

【NumPy 数组连接、拆分、搜索、排序】

&#x1f935;‍♂️ 个人主页老虎也淘气 个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f44d;&#x1f3fb; 收藏…

[附源码]Python计算机毕业设计宠物领养系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等…

数学基础从高一开始5、充分必要条件

数学基础从高一开始5、充分必要条件 目录 数学基础从高一开始5、充分必要条件 概念复习 命题 真命题与假命题 命题的形式 概念定义 例1&#xff1a; 例2 练习 总结 概念复习 命题 命题:把用语言、符号或式子表达的&#xff0c;可以判断真假的陈述句称为命题。 真命题…

杨校老师课堂之MySQL数据库面试题【开发工程师面试前必看】

1.说一说三大范式 「第一范式」&#xff1a;数据库中的字段具有「原子性」&#xff0c;不可再分&#xff0c;并且是单一职责 「第二范式」&#xff1a;「建立在第一范式的基础上」&#xff0c;第二范式要求数据库表中的每个实例或行必须「可以被惟一地区分」。为实现区分通常需…

Rasa 基于规则的对话管理: 天气预报机器人

文章目录1. fallbackNLU fallback2. 意图触发动作3. 表单定义表单激活表单执行表单任务4. 天气预报机器人nlu.ymlstories.ymlrules.ymlcities.ymldomain.ymlconfig.ymlendpoints.ymlcredentials.ymlactions.py测试learn from https://github.com/Chinese-NLP-book/rasa_chinese…

Keras深度学习实战(40)——音频生成

Keras深度学习实战&#xff08;40&#xff09;——音频生成0. 前言1. 模型与数据集分析1.1 数据集分析1.2 模型分析2. 音频生成模型2.1 数据集加载与预处理2.2 模型构建与训练小结系列链接0. 前言 我们已经在《文本生成模型》一节中学习了如何利用深度神经网络生成文本&#x…

智能、人机融合智能和深度态势感知

内容摘要&#xff1a;人工智能的符号主义、联结主义和行为主义三大学派&#xff0c;分别从不同角度切入智能的本质&#xff0c;其研究观点相互补充但各有局限。在人机融合过程中&#xff0c;怎样进行人机功能分配&#xff0c;人机怎样融合学习、理解、决策、推理乃至感知。数据…

获取微信公众号token

access_token是公众号的全局唯一接口调用凭据&#xff0c;公众号调用各接口时都需使用access_token 接口调用请求说明 https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credential&appidAPPID&secretAPPSECRET参数说明 参数是否必填说…

牛!单表千万行数据库: LIKE 搜索优化手记

我们可以在 txt 列上建立索引&#xff0c;用于优化该查询&#xff1a; CREATE INDEX tbl_like_txt_idx ON [tbl_like] ( [txt] ) 应用索引后&#xff0c;查询速度大大加快&#xff0c;仅需 5 毫秒&#xff1a; 由此可知&#xff1a;对于左前缀匹配&#xff0c;我们可以通过增…