esp32使用fft算法显示音乐频谱

简介: esp32使用fft算法显示音乐频谱

演示参考下方视频

介绍

  • 本项目使用esp32s3,ifd4.2,声音传感器以及tft显示屏构成
  • 使用快速傅里叶变换算法处理采集到的音频数据
  • fft处理后的数据使用lvgl显示在tft屏幕上

电路图

源码

void FFT_Task(void *arg)
{
  static int8_t i2s_readraw_buff[1024];
  size_t bytesread;
  int16_t *buffptr;
  int16_t *samples_sc16 = (int16_t *)i2s_readraw_buff;
  float *samples_fc32 = (float *)calloc(SAMPLES_NUM, sizeof(float));
  double data = 0;
  i2s_init();
  while (1)
  {
    if (fft_en == 1)
    {
      i2s_read(I2S_NUM_0, (char *)i2s_readraw_buff, SAMPLES_NUM * 2, &bytesread, (100 / portTICK_RATE_MS));
      fft_config_t *real_fft_plan = fft_init(512, FFT_REAL, FFT_FORWARD, NULL, NULL);
      buffptr = (int16_t *)i2s_readraw_buff;
      for (uint16_t count_n = 0; count_n < real_fft_plan->size; count_n++)
      {
        real_fft_plan->input[count_n] = (float)map(buffptr[count_n], INT16_MIN, INT16_MAX, -1000, 1000);
      }
      fft_execute(real_fft_plan);
      for (uint16_t count_n = 1; count_n < CANVAS_HEIGHT; count_n++)
      {
        data = sqrt(real_fft_plan->output[2 * count_n] * real_fft_plan->output[2 * count_n] + real_fft_plan->output[2 * count_n + 1] * real_fft_plan->output[2 * count_n + 1]);
        fft_dis_buff[CANVAS_HEIGHT - count_n] = map(data, 0, 2000, 0, CANVAS_HEIGHT);
      }
      fft_destroy(real_fft_plan);
      for (uint16_t count_y = 0; count_y < CANVAS_HEIGHT;)
      {
        lv_chart_set_next(chart_fft, series_fft, fft_dis_buff[count_y]);
        count_y += 5;
      }
    }
    else
    {
      i2s_driver_uninstall(I2S_NUM_0);
      vTaskDelete(NULL);
    }
  }
}
相关文章
|
6月前
|
算法
【MATLAB】语音信号识别与处理:滑动平均滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:滑动平均滤波算法去噪及谱相减算法呈现频谱
178 0
|
6月前
|
算法
【MATLAB】语音信号识别与处理:SG滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:SG滤波算法去噪及谱相减算法呈现频谱
239 1
|
6月前
|
算法
【MATLAB】语音信号识别与处理:T1小波滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:T1小波滤波算法去噪及谱相减算法呈现频谱
154 0
|
6月前
|
算法
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
89 2
|
6月前
|
算法
【MATLAB】语音信号识别与处理:卷积滑动平均滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:卷积滑动平均滤波算法去噪及谱相减算法呈现频谱
121 0
|
6月前
|
算法
【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱
139 1
|
6月前
|
算法
【MATLAB】语音信号识别与处理:高斯加权移动平均滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:高斯加权移动平均滤波算法去噪及谱相减算法呈现频谱
251 0
|
26天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
3月前
|
搜索推荐 前端开发 算法
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
本文介绍了一个基于用户画像和协同过滤算法的音乐推荐系统,使用Django框架、Bootstrap前端和MySQL数据库构建,旨在为用户提供个性化的音乐推荐服务,提高推荐准确性和用户满意度。
256 7
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
|
6月前
|
机器学习/深度学习 算法 图形学
告别3D高斯Splatting算法,带神经补偿的频谱剪枝高斯场SUNDAE开源了
【5月更文挑战第26天】SUNDAE,一种结合频谱剪枝和神经补偿的高斯场方法,已开源,解决了3D高斯Splatting的内存消耗问题。SUNDAE通过建模基元间关系并剪枝不必要的元素,降低内存使用,同时用神经网络补偿质量损失。在Mip-NeRF360数据集上,SUNDAE实现26.80 PSNR和145 FPS,内存仅为104MB,优于传统算法。然而,其计算复杂性、参数优化及对其他3D表示方法的适用性仍有待改进。代码开源,期待进一步研究。[论文链接](https://arxiv.org/abs/2405.00676)
51 2