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

基于ASCII生成平顶PAM信号遇异常:输出仅为单点,求修正方案

修正平顶PAM信号生成代码(解决仅输出单点问题)

关键问题排查

你看到单点输出,核心原因是没有将每个ASCII符号对应的电平扩展到一个完整符号周期的采样点上,或是时间轴配置错误导致仅生成单个采样点。以下是修正后的完整代码及说明:

修正后代码

import numpy as np
import matplotlib.pyplot as plt

# 核心参数配置
ascii_input = "HELLO"  # 输入ASCII字符串
Rs = 100               # 符号速率(每秒传输的符号数)
Fs = 800               # 采样率(每秒采样点数,需大于2*Rs满足奈奎斯特)
Ts = 1 / Rs            # 单个符号的持续时间
samples_per_symbol = int(Fs * Ts)  # 每个符号对应的采样点数

# ASCII字符转电平映射(归一化到[-1,1]区间,也可直接用ASCII码值)
ascii_values = [ord(char) for char in ascii_input]
min_ascii = min(ascii_values)
max_ascii = max(ascii_values)
symbol_levels = [2 * (val - min_ascii)/(max_ascii - min_ascii) - 1 for val in ascii_values]

# 生成平顶PAM信号:每个符号对应一段固定电平的采样点
pam_signal = np.array([])
for level in symbol_levels:
    # 生成对应符号周期的平顶脉冲段
    pam_segment = np.full(samples_per_symbol, level)
    pam_signal = np.concatenate((pam_signal, pam_segment))

# 生成匹配的时间轴
total_samples = len(pam_signal)
time_axis = np.linspace(0, total_samples / Fs, total_samples)

# 绘制平顶波形(用steps-post保证阶梯显示)
plt.figure(figsize=(10, 4))
plt.plot(time_axis, pam_signal, drawstyle='steps-post', linewidth=2)
plt.title('平顶PAM信号 (输入: "HELLO")')
plt.xlabel('时间 (s)')
plt.ylabel('幅度')
plt.grid(True)
plt.show()

核心修正点

  1. 符号扩展为平顶脉冲:用np.full为每个符号生成samples_per_symbol个相同电平的采样点,确保每个符号对应一段持续的平顶波形,而非单点。
  2. 时间轴匹配信号长度:时间轴长度与信号总采样点数一致,覆盖完整的信号传输时长。
  3. 阶梯式绘图:drawstyle='steps-post'让波形显示为严格的平顶,避免默认折线连接导致的视觉误差。
  4. 合理电平映射:将ASCII值归一化到[-1,1]区间,避免不同字符的幅度过大差异。

原代码常见错误对应

  • 若你之前的代码中samples_per_symbol=1,会导致每个符号仅生成一个采样点,最终信号就是离散点。
  • 若时间轴仅生成单个点,绘图时自然只显示单点。
  • 未使用阶梯绘图样式,即使有多个采样点,也会被连成斜线,看起来像单点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:05:25