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

如何在Python(Spyder)中绘制二进制数组对应的方波信号?

解决基于数组生成方波信号的绘图问题

看起来你遇到的核心问题是生成的方波信号数组pliroforia和时间轴t的长度不匹配,导致无法正常绘图。我来帮你一步步修正代码:

问题分析

你的现有代码里存在几个关键问题:

  • t的总长度对应25*T,但你计算Samples_per_bit=int(12/Ts)的逻辑完全错误,这个值和bit数量、总时间毫无关联,直接导致pliroforia的长度和t对不上
  • 循环拼接数组的方式不仅低效,还容易引入长度误差
  • 没有处理采样数整除时的微小偏差,进一步加剧了长度不匹配问题

修正后的代码

import numpy as np
from numpy import pi, linspace, sin, array
import matplotlib.pyplot as plt
from scipy import signal

A=1
f=1000
T=1/f
B=f
Nyquist_Fs=2*B
Fs=100*Nyquist_Fs
Ts=T/10
Tmax=25*T

# 直接计算总采样数,逻辑更清晰
total_samples = int(Tmax / Ts)
t = linspace(0, Tmax, total_samples, endpoint=True)

# 绘制已成功的正弦波信号
our_signal = A*sin(2*pi*f*t)
plt.figure(1)
plt.plot(t, our_signal)
plt.xlabel('Χρόνος (sec) ->')
plt.ylabel ('Πλάτος (V)')

# 生成基于word数组的方波信号
word = array([1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1])
num_bits = len(word)
# 将总时间平均分配给每个bit,保证时长匹配
bit_duration = Tmax / num_bits
# 计算每个bit对应的采样数,确保总长度和t一致
samples_per_bit = int(total_samples / num_bits)

# 用np.repeat高效生成方波,替代繁琐的循环拼接
pliroforia = np.repeat(word, samples_per_bit)

# 处理整除时的微小长度偏差,保证和t的长度完全一致
if len(pliroforia) < total_samples:
    pliroforia = np.append(pliroforia, [pliroforia[-1]]*(total_samples - len(pliroforia)))

# 绘制方波信号并优化显示
plt.figure(2)
plt.plot(t, pliroforia)
plt.xlabel('Χρόνος (sec) ->')
plt.ylabel ('Πλάτος (V)')
plt.ylim(-0.2, 1.2)  # 调整y轴范围,让方波边缘更清晰
plt.grid(True)
plt.show()

关键修改说明

  1. 采样数逻辑优化:用total_samples = int(Tmax / Ts)替代原来的复杂计算,更直观且不易出错
  2. bit时长合理分配:把总时间Tmax平均分给12个bit,确保方波总时长和时间轴t完全匹配
  3. 高效生成方波:用np.repeat替代循环拼接,代码更简洁,运行效率也更高
  4. 长度补全处理:解决采样数无法整除时的微小长度差异,保证pliroforia和t长度完全一致
  5. 显示效果优化:添加y轴范围限制和网格,让方波信号的显示更清晰直观

这样修改后,你就能成功绘制出对应word数组的方波信号了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:02:35