首页 » PHP教程 » phpfftpython技巧_音频去噪运用Python和FFT增强音质

phpfftpython技巧_音频去噪运用Python和FFT增强音质

访客 2024-12-12 0

扫一扫用手机浏览

文章目录 [+]

声音去噪目标是改进聆听体验以及音频剖析和处理的准确性。
过滤掉噪音对付高保真音频来说非常主要,不仅是为了聆听,也是为了创建某些机器学习任务的数据集。

空想情形下,去噪该当是数据清理步骤中的一部分。

phpfftpython技巧_音频去噪运用Python和FFT增强音质

理解FFT

我们从实际的例子开始,在派对上房间里充满了各种声音:人们在说话,音乐在播放,玻璃杯在碰撞。
在所有的噪音中,很难专注于我们对话说的声音。

phpfftpython技巧_音频去噪运用Python和FFT增强音质
(图片来自网络侵删)

我们可以把FFT(快速傅里叶变换)想想成一个一副神奇的眼镜,它可以让你能够看到房间里的每种声音都有不同的颜色。
戴上这副眼镜,你就可以在所有其他声音中轻松识别出你朋友的声音(一种特定的颜色)。
这样就可以过滤掉其他分散把稳力的声音(颜色),只专注于你朋友的声音。

FFT(快速傅里叶变换)是一种强大的工具,它将旗子暗记从原始的时域转换到频域。
通过剖析旗子暗记的频率身分,我们可以识别并去除不须要的噪音,从而提高原始声音的质量。

加载声音旗子暗记

在这个例子中,我们不会从本地或在线加载音频旗子暗记,而是利用NumPy创建我们自己的大略正弦旗子暗记。

import numpy as np import matplotlib.pyplot as pltdef generate_signal(length, freq): """天生一个正弦旗子暗记。
参数: length: 旗子暗记的长度。
freq: 旗子暗记的频率。
返回: 表示旗子暗记的numpy数组。
""" t = np.linspace(0, 1, length) signal = np.sin(2 np.pi freq t) return signal

在创建声音旗子暗记后,让我们利用NumPy中的随机函数向旗子暗记添加噪音。

def add_noise(signal, noise_level): """向旗子暗记添加噪音。
参数: signal: 原始旗子暗记。
noise_level: 要添加的噪音水平。
返回: 表示带噪旗子暗记的numpy数组。
""" noise = np.random.normal(0, noise_level, len(signal)) noisy_signal = signal + noise return noisy_signal
对旗子暗记运用FFT

def denoise_fft(noisy_signal, threshold): """利用FFT对旗子暗记进行去噪。
参数: noisy_signal: 带噪旗子暗记。
threshold: 用于过滤频率身分的阈值。
返回: 表示去噪后旗子暗记的numpy数组。
""" fft_signal = np.fft.fft(noisy_signal) fft_signal[np.abs(fft_signal) < threshold] = 0 denoised_signal = np.real(np.fft.ifft(fft_signal)) return denoised_signal
在频域中识别噪音

fft_signal[np.abs(fft_signal) < threshold] = 0 denoised_signal = np.real(np.fft.ifft(fft_signal))

在上面的代码中,这一步帮助我们在频域中识别噪音。

过滤噪音并转换回时域

通过设置阈值,我们过滤掉噪音。
将幅度低于某个阈值的频率身分设置为零。
这从旗子暗记中去除了低幅度(噪音)频率。

比较原始旗子暗记和去噪后的旗子暗记

if __name__ == "__main__": # 天生旗子暗记 signal_length = 1024 signal_freq = 50 signal = generate_signal(signal_length, signal_freq)# 添加噪音 noise_level = 0.5 noisy_signal = add_noise(signal, noise_level)# 利用FFT去噪 threshold = 100 denoised_signal = denoise_fft(noisy_signal, threshold)# 绘制结果 plt.figure(figsize=(12, 6)) plt.subplot(311) plt.plot(signal, label='Original Signal') plt.legend() plt.subplot(312) plt.plot(noisy_signal, label='Noisy Signal') plt.legend() plt.subplot(313) plt.plot(denoised_signal, label='Denoised Signal') plt.legend() plt.tight_layout() plt.show()

利用Matplotlib绘制一些带噪旗子暗记和去噪旗子暗记之间的比较图。

A)原始旗子暗记 B)带噪旗子暗记 C)去噪后的旗子暗记

总结

本文我们磋商了如何利用快速傅里叶变换(FFT)对声音旗子暗记进行去噪。
FFT是一种强大的工具,它将旗子暗记从原始的时域转换到频域。
通过剖析旗子暗记的频率身分,我们可以识别并去除不须要的噪音,从而提高原始声音的质量。

紧张的步骤如下:

加载声音旗子暗记: 我们将从利用NumPy加载一个带噪的声音旗子暗记开始。

运用FFT: 利用FFT,我们将时域旗子暗记转换为频域。
这让我们能够看到构成旗子暗记的不同频率身分。

识别和过滤噪音: 在频域中,噪音常日表现为高频身分或不属于原始旗子暗记的尖峰。
通过识别和过滤掉这些不须要的频率,我们可以减少噪音。

作者:Prerak Joshi

标签:

相关文章

拆分代码php技巧_Webpack 中的代码瓜分

Webpack 中的代码分割Webpack 供应以下代码分割功能:按模块分割:将每个模块分成多个小模块。按入口点分割:将不同的入口...

PHP教程 2024-12-14 阅读0 评论0