音频傅里叶变换(基于开源kissffs)

主要参考资料:

深入浅出的讲解傅里叶变换(真正的通俗易懂): https://zhuanlan.zhihu.com/p/19763358

推荐开源项目:KISS FFT: https://blog.csdn.net/gitblog_00031/article/details/138840117

数字硅麦数据的处理(傅里叶FFT):https://blog.csdn.net/shayk/article/details/130305761

目录

概念

傅里叶变换

傅里叶变换是一种数学变换,用于将信号从时间域(或空间域)转换到频率域。这种变换揭示了信号的频率成分,是信号处理和系统分析中非常重要的工具。以下是傅里叶变换的一些基本概念:

汉明窗

汉明窗(Hamming Window)是一种常用的窗函数,主要用于信号处理领域,特别是在傅里叶分析中。它是由理查德·汉明(Richard Hamming)提出的,因此得名汉明窗。

汉明窗的目的是减少信号在进行离散傅里叶变换(DFT)时的频谱泄露现象。频谱泄露是由于信号在时间上被截断而产生的,它会导致频谱分析中的误差。使用窗函数可以对信号的边缘进行平滑处理,从而减少这种误差。

C++代码实现

cpp 复制代码
//得到频谱
void AudioProcessor::get_spectrogram(int16_t *audio, float *output) {
  // 初始化一个浮点数mean,用于存储音频样本的平均值。
  float mean = 0;
  for (int i = 0; i < audio_length; i++) {
    mean += audio[i];
  }
  mean /= audio_length;

  // 初始化一个浮点数max,用于存储样本与平均值之差的绝对最大值。
  float max = 0;
  for (int i = 0; i < audio_length; i++) {
    max = std::max(max, fabsf((float)audio[i] - mean));
  }

  // 通过步长step_size在音频长度范围内移动,每次提取window_size大小的窗口。
  // 将当前窗口的样本复制到快速傅里叶变换(FFT)的输入缓冲区fft_input中,并减去平均值mean,然后除以最大值max进行归一化。
  // 对于FFT输入缓冲区中窗口之外的部分,填充0。
  for (int i = 0; i < audio_length - window_size; i += step_size) {
    // Copy the samples into the FFT input buffer.
    for (int j = 0; j < window_size; j++) {
      fft_input[j] = ((float)audio[i + j] - mean) / max;
    }

    for (int j = window_size; j < fft_size; j++) {
      fft_input[j] = 0;
    }

    // 对每个窗口调用spectrogram_segment函数,并将计算得到的频谱图数据存储到输出数组output中。输出数组的索引由当前窗口的
    // 位置和池化能量大小pooled_energy_size决定。
    spectrogram_segment(output + i / step_size * pooled_energy_size);
  }
}
相关推荐
be or not to be7 小时前
HTML入门系列:从图片到表单,再到音视频的完整实践
前端·html·音视频
LCG米8 小时前
基于ESP32-S3与OV5640的高清低延迟无线视频传输系统构建教程
音视频
Angelina_Jolie10 小时前
基于 Retinex 的 TempRetinex:适用于不同光照条件下低光视频的无监督增强方法
计算机视觉·音视频
山海青风12 小时前
藏文TTS介绍:6 MMS 项目的多语言 TTS
人工智能·python·神经网络·音视频
Everbrilliant8916 小时前
FFmpeg解码OpenSL、ANativeWindow播放实现音视频同步
ffmpeg·音视频·opensl音视频同步播放·音视频同步播放·唇音同步·音视频时钟漂移·播放时钟同步
一点晖光17 小时前
ffmpeg实现图片转视频效果
ffmpeg·音视频
咕噜船长18 小时前
使用Qwen3-VL模型批量标注视频内容(视频理解)
人工智能·pytorch·深度学习·音视频·视频
音视频牛哥18 小时前
内网RTSP直连 + 公网RTMP上云:基于SmartMediakit的 Android双引擎架构设计
音视频·安卓rtsp服务器·安卓轻量级rtsp服务·安卓rtsp摄像头推流·安卓摄像头rtmp推流·安卓 camera2 rtsp·安卓camera2 rtmp
二等饼干~za89866818 小时前
碰一碰发视频系统源码开发搭建--技术分享
java·运维·服务器·重构·django·php·音视频
EasyCVR19 小时前
视频汇聚平台EasyCVR筑牢消防领域可视化监控防线
运维·人工智能·音视频