You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python绘制ASK调制音频信号的包络图?

ASK调制音频信号的包络图绘制(Hilbert变换正确实现方案)

问题说明

我正在处理ASK调制音频信号,用Tkinter读取.wav文件并通过阈值完成简单滤波,已实现ASK解调与信号绘制,但尝试用Hilbert变换生成包络图时失败,需要正确的实现方法。目标是得到原始ASK信号上叠加平滑包络的可视化效果。

错误原因

你之前的Hilbert变换误用在了解调后的数字信号上,而包络提取必须针对原始的ASK调制音频信号:解调后的信号是0/1的离散电平,无法提取出有意义的调制包络;同时代码未导入scipy.signal模块的hilbert函数,也会导致执行失败。

修正后的完整代码

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
from scipy.signal import hilbert  # 必须导入该模块
from tkinter import Tk
from tkinter.filedialog import askopenfilename

Tk().withdraw() 
audioFileName = askopenfilename() 

# 读取ASK调制音频信号
sample_rate, audio_data = wavfile.read(audioFileName)

# 处理双声道情况(若为双声道,取单声道数据)
if len(audio_data.shape) > 1:
    audio_data = audio_data[:, 0]

# 参数设置
threshold = 16000  

# ASK解调
demodulated_signal = (audio_data > threshold).astype(int)

# 用Hilbert变换提取原始信号的包络
analytic_signal = hilbert(audio_data)
envelope = np.abs(analytic_signal)

# 生成时间轴
time_axis = np.arange(len(audio_data)) / sample_rate

# 绘图
plt.figure(figsize=(16, 9))

# 子图1:原始信号+包络
plt.subplot(3, 1, 1)
plt.plot(time_axis, audio_data, color="#AD2523", alpha=0.6, label='原始ASK信号')
plt.plot(time_axis, envelope, color="#2B77AD", linewidth=2, label='包络')
plt.title('ASK调制信号与包络')
plt.xlabel('时间 (s)')
plt.ylabel('幅度')
plt.legend()

# 子图2:解调后的数字信号
plt.subplot(3, 1, 2)
plt.plot(time_axis, demodulated_signal, color="#2B77AD")
plt.title('解调后的数字信号')
plt.xlabel('时间 (s)')
plt.ylabel('比特值')

# 子图3:包络单独展示(可选)
plt.subplot(3, 1, 3)
plt.plot(time_axis, envelope, color="#2B77AD")
plt.title('ASK信号包络')
plt.xlabel('时间 (s)')
plt.ylabel('幅度')

plt.tight_layout()
plt.show() 

关键说明

  1. Hilbert变换的处理对象:必须对原始的ASK调制信号(audio_data)进行变换,而非解调后的0/1信号,这样才能提取出载波被调制后的幅度包络。
  2. 双声道处理:部分.wav文件为双声道格式,需先转换为单声道数据,避免Hilbert变换因维度问题报错。
  3. 包络可视化:将包络与原始信号叠加展示,能直观呈现调制信号的幅度变化趋势,匹配目标效果。

内容的提问来源于stack exchange,提问作者Alecsander Lima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:07:25