音频干扰检测(频域方法)

测试音响系统的通路上是否有外部干扰时,可以通过播放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生成,本人调试完成,实测可用! :)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/773322.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++类和对象、面向对象编程 (OOP)

文章目录 一、封装1.抽象、封装2.类和对象(0)学习视频(1)类的构成(2)三种访问权限(3)struct和class的区别(4)私有的成员变量、共有的成员函数(5)类内可以直接访问私有成员,不需要经过对象 二、继承三、多态1.概念2.多态的满足条件3.多态的使用条件4.多态原理剖析5.纯…

MySQL详细教程

文章目录 前言一、数据库管理1.查看已有的数据库2.创建数据库3.删除数据库4.进入数据库 二、 数据表管理1.查看当前数据库下的所有数据表2.创建数据表3.删除表4.查看表结构 三、常用数据类型1.整型tinyintintbigint 2.浮点型floatdoubledecimal 3.字符型char(m)varchar(m)textm…

MacBook终端安装brew命令

关于MacBook终端安装brew命令,官方的操作流程会报错 Failed during: /usr/bin/git fetch --force origin 有没有跟我一样的小伙伴遇到了一样的难题 终于 经过我来回来去的搜索找到了可以利用国内镜像源进行安装brew 简直非常Nice!!&#x…

linux在使用重定向写入文件时(使用标准C库函数时)使处理信号异常(延时)--问题分析

linux在使用重定向写入文件时(使用标准C库函数时)使处理信号异常(延时)–问题分析 在使用alarm函数进行序号处理测试的时候发现如果把输出重定向到文件里面会导致信号的处理出现严重的延迟(ubuntu18) #include <stdio.h> #include <stdlib.h> #include <unist…

7.3*3卷积核生成

1.卷积核 在数字图像处理中的各种边沿检测、滤波、腐蚀膨胀等操作都离不开卷积核的生成。下面介绍如何生成各种3X3的卷积核。为后面的数字图像操作打下基础。   由于图像经过卷积操作后会减少两行两列&#xff0c;因此在生成卷积核的时候一般会对图像进行填充&#xff0c;填充…

javax mail邮件发送(sockts代理)

1.pom引入 <!--hutool工具类--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.21</version></dependency> <!-- 邮件--><dependency><groupId>javax.m…

【CXL协议-ARB/MUX层(5)】

5.0 Compute Express Link ARB/MUX 前言&#xff1a; 在CXL协议中&#xff0c;ARB/MUX层&#xff08;Arbitration/Multiplexer layer&#xff09;是负责管理资源共享和数据通路选择的一层。CXL协议包含了几个子协议&#xff0c;主要有CXL.io、CXL.cache 和 CXL.memory。ARB/MU…

LeetCode 面试经典150题 383.赎金信

题目&#xff1a; 给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 思路&#x…

生态修复相关的书籍推荐

近期&#xff0c;为了解生态修复找了很多的书籍阅读&#xff0c;其中有基本书都下来感觉还不错。以此&#xff0c;做个记录。 《生态修复理论与实践》 李锋 这本书写得有点空&#xff0c;更多的是从规划的视角来写。因而&#xff0c;这本书看起来就像是看规划的文本一样。因而…

计算机网络——网络基础1

网络基础一 1.初识网络 ​ 网卡也是一种文件&#xff0c;所以对于网络的编程也是一种文件操作&#xff1b; ​ 早期由于不同的计算机之间要根据数据进行协作&#xff0c;但是计算机之间是独立的&#xff0c;所以使用了光驱或者软盘之类的进行协作&#xff1b;对于将计算机连…

速盾:本地高防 和 cdn

本地高防和CDN是两种网络安全解决方案&#xff0c;主要用于保护网站免受DDoS攻击和提高网站的性能和可用性。本文将介绍本地高防和CDN的定义、原理、优缺点以及如何选择适合自己的解决方案。 本地高防是指在本地网络环境中部署的一种防御DDoS攻击的解决方案。它通过在网络入口…

计算机网络——数据链路层(差错控制)

计算机网络——数据链路层&#xff08;差错控制&#xff09; 差错从何而来数据链路层的差错控制检错编码奇偶校验码循环冗余校验&#xff08;CRC&#xff09;FCS 纠错编码海明码海明距离纠错流程确定校验码的位数r确定校验码和数据位置 求出校验码的值检错并纠错 我们今年天来继…

【Linux】-Linux下的编辑器Vim的模式命令大全及其自主配置方法

目录 1.简单了解vim 2.vim的模式 2.1命令模式 2.2插入模式 2.3底行模式 3.vim各模式下的命令集 3.1正常&#xff08;命令模式下&#xff09; 3.1.1光标定位命令 3.1.2 复制粘贴 3.1.3 删除 3.1.4 撤销 3.1.5大小写转换 3.1.6替换 「R」&#xff1a;替换光标所到之处的字符&…

ComfyUI SDWebUI升级pytorch随记

目前使用的版本是去年10月的1.6版本&#xff0c;有点老。希望支持新的特性&#xff0c;于是乎开始作死。从升级torch开始。先看看已有的版本&#xff1a; (venv) rootubuntu-sd-server:~# pip show torch Name: torch Version: 2.0.1 Summary: Tensors and Dynamic neural net…

maya获取帧长度

目录 maya获取帧长度 python实现 获取对象的帧长度 maya获取帧长度 python实现 import maya.cmds as cmds# 获取动画的起始帧和结束帧 start_frame cmds.playbackOptions(queryTrue, minTimeTrue) end_frame cmds.playbackOptions(queryTrue, maxTimeTrue)# 计算帧长度 fr…

论文翻译 - Multilingual Jailbreak Challenges in Large Language Models

论文链接&#xff1a;https://arxiv.org/pdf/2310.06474.pdf 项目代码&#xff1a;https://github.com/DAMO-NLP-SG/multilingual-safety-for-LLMs Multilingual Jailbreak Challenges in Large Language Models Abstract1 Introduction2 Preliminary Study2.1 Setup2.2 Result…

【贪心]【字符串】【分类讨论】420 强密码检验器

本文涉及知识点 贪心 字符串 分类讨论 LeetCode420 强密码检验器 满足以下条件的密码被认为是强密码&#xff1a; 由至少 6 个&#xff0c;至多 20 个字符组成。 包含至少 一个小写 字母&#xff0c;至少 一个大写 字母&#xff0c;和至少 一个数字 。 不包含连续三个重复字…

Reactor 模式全解:实现非阻塞 I/O 多路复用

Reactor网络模式是什么&#xff1f; Reactor网络模式时目前网络最常用的网络模式。如果你使用Netty&#xff0c;那么你在使用Reactor;如果你使用Twisted,那么你子啊使用Reactor;如果你使用netpoll&#xff0c;那么你在使用Reactor。 这里先给出答案&#xff1a;Reactor I/O多…

204基于matlab的图像融合

基于matlab的图像融合&#xff0c;包括三种方式&#xff0c;加权、PCA、IHS变换。比较三者融合后的图像差异。程序已调通&#xff0c;可直接运行。 204 matlab 图像融合 信息融合 - 小红书 (xiaohongshu.com)

软件工程的相关知识点

软件工程是一个广泛的领域&#xff0c;涉及到从软件的概念化设计到开发、测试、维护以及最终的退役全过程。它不仅仅关注编程&#xff0c;还包括需求分析、系统设计、项目管理、质量保证等多方面的知识。下面是一些软件工程的关键知识点&#xff1a; 需求工程&#xff1a;需求工…