音频干扰检测

测试音响系统的通路上是否有外部干扰时,可以通过播放1000赫兹的正弦波信号,在输出端采集数字信号(I2S,TDD,A2B)并保存为.wav文件。 然后通过以下Python代码检测。

import numpy as np

import librosa

import matplotlib.pyplot as plt

def load_and_normalize_audio(audio_path, sr=48000, apply_window=True, channel=2):

    """channel参数指定要分析的声道,索引从0开始"""

    y, sr = librosa.load(audio_path, sr=sr, mono=False)

    # 确保选取多声道中的指定声道,如果是单声道信号,则直接使用

    if y.ndim > 1 and y.shape[0] > channel:

        y = y[channel, :]

    elif y.ndim > 1:

        print("Warning: Requested channel not found. Using first channel instead.")

        y = y[0, :]

    # 先归一化音频信号到[-1, 1]

    y = y / np.max(np.abs(y))

    # 应用窗函数

    if apply_window:

        window = np.hanning(len(y))

        y = y * window

    return y, sr

def find_interference(y, sr, target_freq, threshold_db=-80):

    """分析音频,找出除目标频率外的干扰信号"""

    # 计算FFT

    Y = np.fft.rfft(y)

    freqs = np.fft.rfftfreq(len(y), d=1/sr)

    # 计算幅度(dBFS)

    Y_amplitude = np.abs(Y) / len(Y)

    Y_dbfs = 20 * np.log10(np.maximum(Y_amplitude, 1e-12))

    # 将目标频率附近的幅度设置为非常低的数值来忽略目标频率

    target_idx = np.abs(freqs - target_freq).argmin()

    ignore_band = 10  # 忽略目标频率附近±10Hz范围

    Y_dbfs[target_idx-ignore_band:target_idx+ignore_band] = -np.inf

    # 寻找最大幅度的干扰频率

    max_idx = np.argmax(Y_dbfs)

    # 检查干扰是否高于阈值

    if Y_dbfs[max_idx] > threshold_db:

        print(f"检测到干扰频率:{freqs[max_idx]}Hz,幅度 {Y_dbfs[max_idx]}dB")

    else:

        print("未检测到显著干扰。")

def plot_spectrum(y, sr):

    """绘制频谱图"""

    Y = np.fft.rfft(y)

    freqs = np.fft.rfftfreq(len(y), d=1/sr)

    Y_amplitude = np.abs(Y) / len(Y)

    Y_dbfs = 20 * np.log10(np.maximum(Y_amplitude, 1e-12))

    plt.figure(figsize=(10, 6))

    plt.plot(freqs, Y_dbfs)

    plt.xlabel('Frequency (Hz)')

    plt.ylabel('Amplitude (dB)')

    plt.title('Frequency Spectrum')

    plt.ylim(-120, 0)

    plt.xlim(0, sr // 2)

    plt.show()

# 替换audio_path为你的音频文件路径

audio_path = 'sine.wav'

y, sr = load_and_normalize_audio(audio_path)

plot_spectrum(y, sr)

find_interference(y, sr, target_freq=1000)

以上代码由AI生成,本人调试完成,实测可用! :)

相关推荐

  1. 音频干扰检测

    2024-03-24 14:24:01       35 阅读
  2. 音频干扰检测(时域方法)

    2024-03-24 14:24:01       43 阅读
  3. 利用干扰源模型确定多通道音频信号盲源分离

    2024-03-24 14:24:01       34 阅读
  4. 深度伪造音频普遍检测的Codecfake数据集和对策

    2024-03-24 14:24:01       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-24 14:24:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-24 14:24:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-24 14:24:01       87 阅读
  4. Python语言-面向对象

    2024-03-24 14:24:01       96 阅读

热门阅读

  1. 基于联合概率分布角度的深度学习方法风险浅析

    2024-03-24 14:24:01       37 阅读
  2. C++按位运算

    2024-03-24 14:24:01       41 阅读
  3. Selenium 驱动配置 和 元素定位

    2024-03-24 14:24:01       39 阅读
  4. Redis

    2024-03-24 14:24:01       38 阅读
  5. BERT与GPT

    2024-03-24 14:24:01       44 阅读
  6. 浏览器强缓存和弱缓存的主要区别

    2024-03-24 14:24:01       46 阅读
  7. 如何结合NLP和图像描述技术

    2024-03-24 14:24:01       41 阅读
  8. Python实战:枚举类型enum及应用

    2024-03-24 14:24:01       44 阅读
  9. make | ubuntu源码编译指定版本make

    2024-03-24 14:24:01       40 阅读
  10. 通用型服务器和专用型服务器的区别

    2024-03-24 14:24:01       40 阅读
  11. 【React】React中将 Props 传递给组件

    2024-03-24 14:24:01       42 阅读
  12. 自定义Redis工具类(解决缓存穿透和击穿)

    2024-03-24 14:24:01       49 阅读
  13. qiankun实现基座、子应用样式隔离

    2024-03-24 14:24:01       44 阅读
  14. npm 常用命令详解

    2024-03-24 14:24:01       35 阅读
  15. 好玩的AI生产PPT工具分享

    2024-03-24 14:24:01       42 阅读
  16. Spark面试整理-Spark是什么?

    2024-03-24 14:24:01       36 阅读
  17. lin_20240321_calculating_rG4score.R

    2024-03-24 14:24:01       36 阅读