当前位置: 首页 > article >正文

别再傻傻分不清!用Python+Matplotlib手把手教你画出NBI和WBI的频谱与时频图

用PythonMatplotlib实战解析NBI与WBI的频谱与时频特性在信号处理领域窄带干扰(NBI)和宽带干扰(WBI)的区分对雷达系统、通信工程等应用至关重要。理论教材中复杂的数学公式常常让初学者望而生畏而可视化呈现能瞬间让抽象概念变得直观可感。本文将带您用Python的NumPy和Matplotlib库从零构建三种典型干扰模型并通过频谱图和时频图的对比分析掌握识别干扰类型的核心技巧。1. 环境准备与基础概念工欲善其事必先利其器。我们需要配置适合科学计算的Python环境并理解几个关键术语窄带干扰(NBI)能量集中在极窄频率范围内的干扰表现为频谱上的尖峰宽带干扰(WBI)能量分布在较宽频率范围的干扰包括线性调频(LFM)和正弦调频(SFM)等变种频谱图信号频率成分的能量分布展示时频图信号频率成分随时间变化的二维可视化推荐使用Anaconda创建专用环境conda create -n signal_analysis python3.9 conda activate signal_analysis pip install numpy matplotlib scipy提示Jupyter Notebook是交互式调试的理想选择但本文代码同样适用于.py脚本文件2. 构建基础信号生成框架所有干扰信号都可以视为对基本正弦波的调制。我们先建立信号生成的通用函数import numpy as np import matplotlib.pyplot as plt def generate_signal(duration, sample_rate, freq_func, amplitude1.0): 生成时变频率信号 :param duration: 信号时长(秒) :param sample_rate: 采样率(Hz) :param freq_func: 频率随时间变化的函数 f(t) :param amplitude: 信号幅度 :return: 时间轴t, 信号数组signal t np.linspace(0, duration, int(duration * sample_rate), endpointFalse) phase 2 * np.pi * np.cumsum(freq_func(t)) / sample_rate return t, amplitude * np.sin(phase)这个核心函数通过数值积分实现相位计算支持任意时变频率信号生成。下面我们用它实现三种典型干扰2.1 窄带干扰(NBI)实现窄带干扰是最简单的单频信号def nbi_freq(t): 固定频率的窄带干扰 return np.full_like(t, fill_value10e3) # 10kHz固定频率 t_nbi, signal_nbi generate_signal( duration0.1, sample_rate100e3, freq_funcnbi_freq )2.2 线性调频宽带干扰(LFM-WBI)频率随时间线性变化的典型宽带干扰def lfm_freq(t): 线性调频信号5kHz到15kHz线性变化 return 5e3 10e3 * t / 0.1 # 0.1秒内从5kHz扫到15kHz t_lfm, signal_lfm generate_signal( duration0.1, sample_rate100e3, freq_funclfm_freq )2.3 正弦调频宽带干扰(SFM-WBI)频率按正弦规律变化的复杂宽带干扰def sfm_freq(t): 正弦调频信号中心频率10kHz±5kHz变化 return 10e3 5e3 * np.sin(2 * np.pi * 20 * t) # 20Hz调制频率 t_sfm, signal_sfm generate_signal( duration0.1, sample_rate100e3, freq_funcsfm_freq )3. 频谱分析与可视化对比频谱分析是区分NBI和WBI的首要工具。我们使用快速傅里叶变换(FFT)实现def plot_spectrum(t, signal, sample_rate, title): n len(signal) freq np.fft.fftfreq(n, d1/sample_rate)[:n//2] spectrum np.abs(np.fft.fft(signal)[:n//2]) * 2 / n plt.figure(figsize(10, 4)) plt.plot(freq/1e3, spectrum) # 转换为kHz显示 plt.xlabel(Frequency (kHz)) plt.ylabel(Amplitude) plt.title(title) plt.grid(True) plt.xlim(0, 20) # 聚焦0-20kHz范围三种信号的频谱特征对比干扰类型频谱特征能量分布典型应用场景NBI单一尖锐峰值集中1%带宽同频段通信干扰LFM-WBI宽平台状分散在5-15kHz雷达对抗SFM-WBI多峰连续谱分散在5-15kHz复杂电子战执行可视化plot_spectrum(t_nbi, signal_nbi, 100e3, NBI Spectrum) plot_spectrum(t_lfm, signal_lfm, 100e3, LFM-WBI Spectrum) plot_spectrum(t_sfm, signal_sfm, 100e3, SFM-WBI Spectrum) plt.show()4. 时频分析与联合域特征频谱分析只能反映全局频率成分时频分析则能揭示频率随时间的变化规律。我们使用短时傅里叶变换(STFT)def plot_spectrogram(t, signal, sample_rate, title): plt.figure(figsize(10, 4)) n_per_seg 256 f, t_spec, Sxx spectrogram( signal, fssample_rate, windowhann, npersegn_per_seg, noverlapn_per_seg - 1, scalingspectrum ) plt.pcolormesh(t_spec, f/1e3, 10*np.log10(Sxx), shadinggouraud) plt.colorbar(labelIntensity (dB)) plt.ylabel(Frequency (kHz)) plt.xlabel(Time (s)) plt.title(title) plt.ylim(0, 20)三种信号的时频特征对比NBI时频图一条平行于时间轴的直线表示频率恒定LFM-WBI时频图斜直线反映频率线性变化SFM-WBI时频图正弦曲线展示周期性频率调制from scipy.signal import spectrogram plot_spectrogram(t_nbi, signal_nbi, 100e3, NBI Spectrogram) plot_spectrogram(t_lfm, signal_lfm, 100e3, LFM-WBI Spectrogram) plot_spectrogram(t_sfm, signal_sfm, 100e3, SFM-WBI Spectrogram) plt.show()5. 实际工程中的干扰识别技巧结合理论分析和可视化实践我们总结以下实用识别方法快速筛查法频谱图中出现孤立尖峰 → 可能为NBI频谱呈现连续宽平台 → 可能为WBI细节确认法def check_bandwidth(spectrum, threshold_db20): peak_idx np.argmax(spectrum) peak_power 10 * np.log10(spectrum[peak_idx]) mask 10 * np.log10(spectrum) (peak_power - threshold_db) bandwidth np.sum(mask) * (sample_rate / len(spectrum)) return bandwidth抗干扰策略选择对NBI窄带陷波滤波对LFM-WBI时变滤波或匹配滤波对SFM-WBI自适应滤波或盲源分离6. 高级应用干扰信号的参数估计对于已识别的干扰信号我们还可以进一步估计其关键参数6.1 NBI参数估计def estimate_nbi(signal, sample_rate): spectrum np.abs(np.fft.fft(signal)) peak_idx np.argmax(spectrum[:len(spectrum)//2]) est_freq peak_idx * sample_rate / len(signal) est_power 20 * np.log10(2 * np.max(spectrum) / len(signal)) return est_freq, est_power6.2 LFM-WBI参数估计def estimate_lfm(signal, sample_rate): # 计算瞬时频率 analytic_signal hilbert(signal) instantaneous_phase np.unwrap(np.angle(analytic_signal)) instantaneous_freq (np.diff(instantaneous_phase) / (2.0*np.pi) * sample_rate) # 线性拟合 t np.arange(len(instantaneous_freq)) / sample_rate slope, intercept np.polyfit(t, instantaneous_freq, 1) return intercept, slope # 起始频率和调频斜率注意实际应用中需要考虑噪声影响可能需要添加预处理步骤7. 性能优化与工程实践建议在大规模信号处理中效率至关重要。以下是几个优化技巧向量化计算避免Python循环使用NumPy的向量操作# 低效方式 result np.zeros(len(t)) for i in range(len(t)): result[i] np.sin(2 * np.pi * f * t[i]) # 高效方式 result np.sin(2 * np.pi * f * t)内存预分配对于大型数组预先分配内存output np.empty(int(duration * sample_rate))并行处理对于多信号分析使用multiprocessingfrom multiprocessing import Pool def process_signal(params): # 信号处理函数 return result with Pool(4) as p: # 使用4个进程 results p.map(process_signal, param_list)在真实项目中我通常会先在小数据集上验证算法正确性再逐步扩展到全量数据。对于实时性要求高的场景可以考虑使用Numba加速或移植到C实现核心算法。

相关文章:

别再傻傻分不清!用Python+Matplotlib手把手教你画出NBI和WBI的频谱与时频图

用PythonMatplotlib实战解析NBI与WBI的频谱与时频特性 在信号处理领域,窄带干扰(NBI)和宽带干扰(WBI)的区分对雷达系统、通信工程等应用至关重要。理论教材中复杂的数学公式常常让初学者望而生畏,而可视化呈现能瞬间让抽象概念变得直观可感。本文将带您用…...

为vscode中的claude code插件配置taotoken后端以解决封号困扰

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为vscode中的claude code插件配置taotoken后端以解决封号困扰 许多开发者在 Visual Studio Code 中使用 Claude Code 插件时&#…...

音乐解锁终极指南:打破平台限制,释放你的音乐收藏

音乐解锁终极指南:打破平台限制,释放你的音乐收藏 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址…...

pdf2pptx:三分钟实现LaTeX幻灯片到PowerPoint的无缝转换

pdf2pptx:三分钟实现LaTeX幻灯片到PowerPoint的无缝转换 【免费下载链接】pdf2pptx Convert your (Beamer) PDF slides to (Powerpoint) PPTX 项目地址: https://gitcode.com/gh_mirrors/pd/pdf2pptx 还在为学术演示的格式兼容问题烦恼吗?你是否需…...

基于MCP协议与Playwright构建AI浏览器自动化服务器

1. 项目概述:当AI助手学会“动手”,一个浏览器自动化MCP服务器的诞生如果你和我一样,日常重度依赖Claude、Cursor这类AI编程助手,那你肯定遇到过这样的场景:你正和AI热烈地讨论一个技术方案,突然需要它帮你…...

新手避坑指南:用Virtuoso和Calibre做DRC/LVS检查时,IO Pad和电源连接的那些坑

数字后端验证实战:Virtuoso与Calibre中的DRC/LVS避坑指南 第一次用Virtuoso和Calibre做DRC/LVS检查的新手工程师,往往会在IO Pad和电源连接上栽跟头。这些看似基础的问题,轻则导致验证失败,重则影响芯片功能。本文将结合SIMC 0.18…...

OmenSuperHub:彻底释放惠普OMEN游戏本性能的终极开源解决方案

OmenSuperHub:彻底释放惠普OMEN游戏本性能的终极开源解决方案 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 还在为惠普OMEN游戏本官方软件臃…...

终极指南:如何通过AKShare金融数据接口库快速获取全球交易所数据

终极指南:如何通过AKShare金融数据接口库快速获取全球交易所数据 【免费下载链接】akshare AKShare is an elegant and simple financial data interface library for Python, built for human beings! 开源财经数据接口库 项目地址: https://gitcode.com/gh_mirr…...

CAJ转PDF神器:caj2pdf-qt让学术文献格式转换变得如此简单

CAJ转PDF神器:caj2pdf-qt让学术文献格式转换变得如此简单 【免费下载链接】caj2pdf-qt CAJ 转 PDF 转换器(GUI 版本) 项目地址: https://gitcode.com/gh_mirrors/ca/caj2pdf-qt 还在为CAJ格式的学术文献无法在手机、平板或其他设备上阅…...

深度解析:PC端即时通讯防撤回功能的技术实现

深度解析:PC端即时通讯防撤回功能的技术实现 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcode.com/GitHub_…...

Applite:Mac软件管理的图形化革命,告别命令行操作

Applite:Mac软件管理的图形化革命,告别命令行操作 【免费下载链接】Applite User-friendly GUI macOS application for Homebrew Casks 项目地址: https://gitcode.com/gh_mirrors/ap/Applite 还在为Mac软件安装更新而烦恼吗?Applite作…...

【Gemini JavaScript开发支持终极指南】:20年谷歌AI工程师亲授7大避坑法则与实时调试秘技

更多请点击: https://intelliparadigm.com 第一章:Gemini JavaScript开发支持概览 Gemini API 的 JavaScript 集成能力 Google Gemini 提供了官方 Node.js SDK( google/generative-ai),支持在服务端与浏览器环境中调…...

3分钟掌握Tuna插件:让OBS直播拥有专业级歌曲信息显示功能

3分钟掌握Tuna插件:让OBS直播拥有专业级歌曲信息显示功能 【免费下载链接】tuna Song information plugin for obs-studio 项目地址: https://gitcode.com/gh_mirrors/tuna1/tuna 你是否曾在直播中手动输入正在播放的歌曲信息,或者因为忘记切换歌…...

Windows Cleaner专业级深度优化实战:高效解决C盘空间不足与系统卡顿难题

Windows Cleaner专业级深度优化实战:高效解决C盘空间不足与系统卡顿难题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款基于Py…...

React 18 + Vite + Tailwind CSS 构建现代化SaaS落地页实战

1. 项目概述与设计思路最近在做一个保险科技(InsurTech)相关的概念项目,需要为这个名为“Insura”的SaaS平台打造一个现代化的落地页(Landing Page)。这个页面的核心目标很明确:向潜在客户(主要…...

node.js、node、nvm、npm、npx的关系

1、node.js Node.js:一个基于Chrome V8引擎的JavaScript运行环境。Node.js是一个开源的、跨平台的JavaScript运行环境,用于在服务器端运行JavaScript代码。它使得开发人员可以使用JavaScript来编写服务器端应用程序,从而简化了开发过程&#…...

DownKyi终极指南:简单快速获取B站8K超高清视频的完整解决方案

DownKyi终极指南:简单快速获取B站8K超高清视频的完整解决方案 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等…...

Cursor Pro功能解锁:3步实现免费无限制使用AI编辑器完整指南

Cursor Pro功能解锁:3步实现免费无限制使用AI编辑器完整指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached yo…...

低代码平台表单设计器 unione form editor 组件介绍--文件上传

低代码平台表单设计器 unione form editor 组件介绍--文件上传 在企业级低代码表单开发中,文件上传组件是实现“附件提交、资料归档、证据留存”的核心组件,广泛应用于合同上传、简历提交、凭证上传、图片上传等场景。不同于其他输入类组件,文…...

叫不动下属、又不能裁?中层必看!不撕破脸、不内耗,3招拿捏摆烂员工

很多中层都有这样的困境:上面领导催进度,下面员工躺平摆烂,叫不动、推不动;想辞退,却因编制、合同等原因动不了,要么硬刚撕破脸,要么忍气吞声自己扛,内耗严重还没成效。 其实&#…...

在Docker环境中安装Hadoop cluster 实验报告三

在Docker环境中安装Hadoop cluster 实验报告三 1个namenode, 3个datanodes 班 级:物联网2303 学 号:231040700302 姓 名:杜子健 (30%) 安装过程 ContainersHadoop 1.1 Containers 创建与配置 (1)拉取稳定镜像…...

【仿真实战】AnyLogic地铁站客流仿真:从零搭建带安检与限流的多层车站模型

1. 从零开始搭建地铁站仿真模型 第一次接触AnyLogic做地铁站客流仿真时,我完全被各种模块和参数搞晕了。后来在几个实际项目中摸爬滚打,终于总结出一套小白也能快速上手的方法。这次我们就来搭建一个包含安检区和限流措施的多层地铁站模型,整…...

如何用OBS插件打造专业音乐直播?Tuna插件完整指南

如何用OBS插件打造专业音乐直播?Tuna插件完整指南 【免费下载链接】tuna Song information plugin for obs-studio 项目地址: https://gitcode.com/gh_mirrors/tuna1/tuna 想让你的OBS直播画面瞬间升级为专业音乐电台风格吗?Tuna插件正是你需要的…...

HoRain云--PHP操作MySQL:三种创建数据库方法详解

🎬 HoRain 云小助手:个人主页 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …...

边缘AI落地实战:从软件平台到NPU硬件的协同开发路径

1. 边缘AI的现实挑战与破局思路在2025年的阿姆斯特丹,一场汇聚了半导体巨头与初创公司的会议,清晰地勾勒出当前技术领域最炙手可热的战场:边缘人工智能。这不再是实验室里的概念演示,而是工程师们每天都要面对的真实难题——如何让…...

从IR压降到远程采样:大电流PCB供电设计的实战经验与陷阱规避

1. 项目背景与问题浮现几年前,我参与了一个项目,主电源是一个标准的开放式机架电源,需要为一个位于机箱内相对较远的模块提供5V、约20A的直流电。最初的供电路径设计是依靠PCB走线,我们使用了1盎司铜厚的板材。问题很快就出现了&a…...

助听器分轨处理技术:从好莱坞混音到耳内智能音频分离

1. 从好莱坞混音到耳内“分轨处理”:助听器技术的一次范式转移如果你曾惊叹于一部好电影的沉浸式音效,那你已经体验过“分轨处理”的魔力。好莱坞的混音师们会把对白、环境音、配乐和特效音分别录制在不同的音轨上,然后在后期制作中独立调整每…...

从NASA航天电子设计看高可靠性电源与模拟电路工程实践

1. 从太空迷到电子工程师:我的技术启蒙之路我是一名不折不扣的太空迷。这个身份的烙印,始于童年时守在电视机前,目睹第一艘“水星号”载人飞船发射升空的那一天。沃尔特克朗凯特在新闻中从各个科学角度进行的详尽报道,让我整整一天…...

如何准备打动评审的物联网与硬件创业技术演讲

1. 从听众到讲者:在EE Live分享你的硬件与物联网洞见如果你是一名电子设计工程师、嵌入式开发者,或者正在硬件创业的浪潮中摸索,那么EE Live这个名字对你来说应该不陌生。这个由EE Times主办的年度盛会,前身是DESIGN West&#xf…...

3步解锁SWF逆向工程:JPEXS开源工具深度解析

3步解锁SWF逆向工程:JPEXS开源工具深度解析 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler 你是否曾面对一个陈旧的SWF文件束手无策?当Flash技术逐渐退出历史舞台…...