python - 为什么逆fft与原始信号不匹配
问题描述
我有一个音频 wav 文件,其中记录了一些人声。我使用 scipy.read 将 wav 文件数字化。我已经计算了 FFT,然后我从中得到了逆 FFT。当我绘制原始信号和反向 FFT 重叠时。他们完全匹配。但是当我绘制原始信号和逆 FFT 的数据集时,它们根本不匹配。我观察到这种情况仅发生在具有人声的文件中,与乐器录音相同的情况也可以正常工作。
以下是我尝试过的代码:
import scipy.io.wavfile as wavfile
import scipy
import scipy.fftpack as fftpack
from matplotlib import pyplot as plt
import pandas as pd
import csv
import numpy as np
fs_rate, signal = wavfile.read("Sa.wav")
print ("Frequency sampling", fs_rate," Hz")
l_audio = len(signal.shape)
print ("Channels", l_audio,"Audio data shape",signal.shape,"l_audio",l_audio)
if l_audio == 2:
signal = signal.sum(axis=1) / 2
N = signal.shape[0]
length = N / fs_rate
print ("Duration of audio wav file in secs", length,"Samples chosen",signal.shape[0])
time =np.linspace(0, length, signal.shape[0])
sampling_interval=time[1]-time[0]
inverse_fft_amplitude = scipy.ifft(scipy.fft(signal))
plt.xlabel('Time[s]')
plt.ylabel('Amplitude')
plt.plot(time, signal, 'blue', time, inverse_fft_amplitude , 'red')
plt.legend(('Original Signal', 'Reconstructed Signal using Inverse FFT'))
# They match exactly same
#Getting the data points for original signal
df = pd.DataFrame({"Time" : time, "Amplitude" : signal})
df.to_csv("OriginalData.csv", header=None, index=False)
#Getting the data points for inverse FFT signal
df = pd.DataFrame({"Time" : time, "Amplitude" : abs(inverse_fft_amplitude)})
df.to_csv("ReconstructedDataSet.csv", header=None,index=False)
解决方案
推荐阅读
- xcode - 为什么会出现“将 app_id 作为 gadapplicationidentifier 写入密钥”提示?
- reactjs - uniform1i 切换到错误的纹理单元
- google-cloud-platform - 谷歌云平台权限错误:为什么错误消息没有说明哪个帐户/服务帐户正在尝试该操作?
- java - 如何在抽象数组列表中添加抽象数组列表
- pandas - 如何对 pandas 应用滚动 t.test?
- docker - Mac M1 上的 Apache Airflow 安装问题
- regex - 在 Perl 中修剪回车符 (\r)
- java - JPA 在 @ManyToOne 和 @OneToMany 中持久化和获取
- java - VSCode Maven“X.java 不在项目 Y 的类路径中”
- visual-studio-code - Visual Studio Code 同步设置、问题和建议