13浏览
查看: 13|回复: 2

[项目] 【Arduino 动手做】带有 Arduino Nano 的音乐频谱可视化器

[复制链接]
使用 Arduino Nano 在 8*8 LED 点阵上可视化不同条形的频率峰值。

它是关于什么的?
该项目是关于我们如何将复杂的信号转换为简单信号或主要信号。这里我们使用音频信号,并将它们分解成不同频率的信号。
我们正在使用傅里叶变换,它可以帮助我们分解信号。 傅里叶分析将信号从其原始域(通常是时间或空间)转换为频域中的表示。
我们通过音频信号的峰值来可视化不同的频段。并且可以在 8*8 LED 点阵上看到它。
傅里叶分析具有巨大的计算成本,这在小型计算机上是无法完成的。这就是为什么我们将使用快速傅里叶变换,这是一种计算序列的离散傅里叶变换且计算成本较低的算法,也可以在 Arduino 上完成。
Arduino 提供了一个快速傅里叶变换库,有助于更有效地完成我们的工作。

这个怎么运作?
这里的 3.5 毫米音频插孔将信号从计算机传送到电路。然后,它被馈送到额定值为 10 微法的电容器,该电容器用作滤波器。然后连接与 Arduino 模拟输入 A0 连接,因为我们将读取模拟值。它随后与一个额定 1k 欧姆的电阻器连接,接地 (0 伏),另一个与前一个接头并联,连接到正极 (+5 伏) 以实现固定增益。

结论:
使用点阵并熟悉新库是一次有趣的经历,这真的很令人兴奋。我们也可以使用液晶显示器代替LED点阵。对于大型显示器,我们需要改变的只是提高采样率。最后,它也可以是一个很好的学习工具!

【Arduino 动手做】带有 Arduino Nano 的音乐频谱可视化器图2

【Arduino 动手做】带有 Arduino Nano 的音乐频谱可视化器图1

【Arduino 动手做】带有 Arduino Nano 的音乐频谱可视化器图3

【Arduino 动手做】带有 Arduino Nano 的音乐频谱可视化器图4

【Arduino 动手做】带有 Arduino Nano 的音乐频谱可视化器图5

驴友花雕  中级技神
 楼主|

发表于 昨天 17:51

【Arduino 动手做】带有 Arduino Nano 的音乐频谱可视化器

项目代码

  1. #include "fix_fft.h"
  2. #define CLOCK 3
  3. #define LATCH 4
  4. #define DATA 5
  5. #define SAMPLES 32 //define according to your need
  6. #define AUDIO A0
  7. char im[SAMPLES];
  8. char data[SAMPLES];
  9. int barht[SAMPLES];
  10. int binary[] = {1, 2, 4, 8, 16, 32, 64, 128};
  11. int columnBinary[] = {1, 2, 4, 8, 16, 32, 64, 128};
  12. void setup()
  13. {
  14.   pinMode(CLOCK,OUTPUT);
  15.   pinMode(LATCH,OUTPUT);
  16.   pinMode(DATA,OUTPUT);
  17. }
  18. void loop()
  19. {
  20.   static int i, j;
  21.   int val;
  22.   
  23.   // get audio data
  24.   for(i = 0; i < SAMPLES; i++)
  25.   {
  26.     val = analogRead(AUDIO); // 0-1023
  27.     data[i] = (char)(val/4 - SAMPLES); // store as char
  28.     im[i] = 0; // init all as 0
  29.   }
  30.   // run FFT
  31.   fix_fft(data, im, 5, 0); //2^5=32, as we are taking 32 samples
  32.   // extract absolute value of data only, for 32 results
  33.   for(i = 0; i < SAMPLES/2; i++)
  34.   {
  35.     barht[i] = (int)sqrt(data[i] * data[i] + im[i] * im[i]);
  36.   }
  37.   
  38.   for(i = 0, j = 0; i < SAMPLES/2; i++, j += 2)
  39.   {
  40.     barht[i] = barht[j] + barht[j + 1];
  41.   }
  42.   // display barchart
  43.   for(int k = 0; k < SAMPLES/4; k++){ //as we have 8rows and 8columns, so only 8 times we need to iterate. That's why 32/4=8 .
  44.     digitalWrite(LATCH, LOW);
  45.     int x = columnBinary[barht[k]%8]-1;
  46.     shiftOut(DATA, CLOCK, LSBFIRST, ~x); // columns
  47.     shiftOut(DATA, CLOCK, LSBFIRST, binary[k]); // rows
  48.     digitalWrite(LATCH, HIGH);
  49.     }
  50. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 昨天 17:54

【Arduino 动手做】带有 Arduino Nano 的音乐频谱可视化器

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail