Skip to content

About

使用C编写FFT,并将声音信号进行频谱分析

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

6 Commits

Folders and files

Repository files navigation

(一) 实践主要内容及进程

一、 确定题目

我们小组选择的题目是基于Cortex-M3的傅里叶变换,在此基础上我们进行了拓展,因为我们在数字信号处理课上我们进行过快速傅里叶(FFT)算法的编写,所以我们初步想法是在此基础上将之前算法进行优化。但是,我们考虑到没有输入与输出的直接表现,我们又在此基础上加入输入与输出模块,即语音传感器和OLED显示。

二、 程序编写

  • 2.1 FFT算法优化 之前的FFT算法的旋转因子部分我们是通过调用math.h头文件里面的sin和cos函数,然后通过欧拉公式进行运算,我们的具体优化是:因为旋转因子是相对固定的,所以我们选择通过查表法,即通过事先计算好的值,进行运算。
  • 2.2 输入部分——声音传感器 传感器部分是一个输出模拟信号的咪头,通过AD采集获取声音信号。根据采样定理:采样频率须大于原始信号最高频率的两倍。我们选择的频率为0-500Hz,采样频率需要为1KHz,即定时器频率为1KHz,然后进入中断,采集信号幅值,采集128点后进行FFT变换。
  • 2.3 输出部分——OLED显示 OLED为128*64像素点的显示屏,我们将FFT变换后的复数取模后,进行频谱图(也就是乐谱)。

三、 硬件连接

输入部分有VCC、GND、OUT部分,3.3v供电,OUT连接单片机AD采集通道口,输出部分按照SPI协议进行连接即可。

四、 硬件测试

FFT部分通过输出时间计算,证明我们的优化与我们的想法一致。 输入部分通过串口打印数据验证结果正确。 输出部分在连接时出现问题,主要是RIS复位IO口连接错误导致。

五、 BUG调试

我们通过观察发现,FFT的图像是对称的图像,我们通过查阅资料得出存在负频域部分,我们将输出部分进行修改:将128点减为64点,然后将X轴翻转即得到正确的频谱。

About

使用C编写FFT,并将声音信号进行频谱分析

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages