Scipy的快速傅里叶变换

该代码示例展示了如何使用Python的librosa、numpy和scipy库对音频文件进行傅立叶变换(FFT)和逆傅立叶变换(IFFT)。首先,读取音频文件,然后计算FFT得到复数序列,接着利用相位和模构建新的复数序列,最后通过IFFT将结果转换回时域并保存为新音频文件。过程中,还绘制了波形图以可视化结果。
摘要由CSDN通过智能技术生成

1. 编程实现

读取音频文件,fft后在频域上使用模和相角的方式构造复数序列,再逆变换回时域,对比两个音频文件。

import numpy as np
import librosa
from scipy.fftpack import fft,ifft
import matplotlib.pyplot as plt
import soundfile as sf
from matplotlib import rcParams

config = {
    "font.family": 'serif',     # 衬线字体
    "font.size": 10,            # 相当于小四大小
    "font.serif": ['SimSun'],   # 宋体
    "mathtext.fontset": 'stix', # matplotlib渲染数学字体时使用的字体,和Times New Roman差别不大
    'axes.unicode_minus': False # 处理负号,即-号
}
#配置当前终端
rcParams.update(config)

audio_data = 'num1.wav'
x , fs = librosa.load(audio_data, sr=None)
N = x.shape[0]
xx = np.linspace(0, 1, N)  # 将0到1平分成N份

# FFT 
fft_y = fft(x)

# 求相角
phase_x= np.angle(fft_y)

# print(len(phase_x))
# 取复数的绝对值,即复数的模
mag_x = np.abs(fft_y)

# 使用模和相角构建复数序列
new_spec = mag_x*np.exp(1j*phase_x)
# IFFT
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值