我正在处理 ASK 调制音频信号。我使用 Tkinter 打开文件(.wav 格式)并通过阈值进行简单的过滤。
我想要信封图。
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
from tkinter import Tk
from tkinter.filedialog import askopenfilename
Tk().withdraw()
audioFileName = askopenfilename()
# Leitura do sinal de áudio modulado em ASK
sample_rate, audio_data = wavfile.read(audioFileName)
# Parâmetros
threshold = 16000
# Demodulação ASK
demodulated_signal = (audio_data > threshold).astype(int)
# Plotagem dos sinais
time_axis = np.arange(len(audio_data)) / sample_rate
plt.figure(figsize=(16, 6))
plt.subplot(2, 1, 1)
plt.plot(time_axis, audio_data, color="#AD2523")
plt.title('Sinal de Áudio Capturado')
plt.xlabel('Tempo (s)')
plt.ylabel('Amplitude')
plt.subplot(2, 1, 2)
plt.plot(time_axis, demodulated_signal, color="#2B77AD")
plt.title('Sinal Demodulado (Digital)')
plt.xlabel('Tempo (s)')
plt.ylabel('Bit')
plt.tight_layout()
plt.show()
我尝试了几个建议使用希尔伯特的教程,但没有成功。
analytic_signal = hilbert(demodulated_signal)
envelope = np.abs(analytic_signal)
您想要的(在您提供的图中)不是信封。您的“预期信号”是布尔“高于能量阈值”信号而不是包络。
为了得到这个,你可以使用
abs(signal)
的运行平均值(或者更好 - 信号的能量,即 signal ** 2
)以及任意大小的运行平均值窗口。
旁注:希尔伯特变换将为您提供包络,但仅当您的信号是窄带时。