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

如何用Python随机移动坐标点(模拟无线通信星座图噪声)

实现星座图的随机方向噪声模拟

核心思路

要实现随机方向的点偏移,最贴合无线通信场景的方式是添加二维高斯白噪声(AWGN)——这是模拟无线信道噪声的标准做法;同时要让部分点落在原坐标之间,可通过随机选取原坐标对做线性插值,再叠加小噪声实现。

具体实现代码

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# 原坐标数据
data = {'x': [-0.3162277660168379967, -0.3162277660168379967, -0.9486832980505139901, 0.3162277660168379967, 0.9486832980505139901, -0.3162277660168379967, -0.3162277660168379967, -0.9486832980505139901, 0.9486832980505139901, 0.3162277660168379967, 0.3162277660168379967, 0.3162277660168379967, 0.9486832980505139901, -0.9486832980505139901, -0.9486832980505139901, 0.9486832980505139901],
        'y': [-0.9486832980505139901, 0.3162277660168379967, 0.9486832980505139901, 0.3162277660168379967, -0.3162277660168379967, 0.9486832980505139901, -0.3162277660168379967, -0.3162277660168379967, 0.3162277660168379967, -0.9486832980505139901, -0.3162277660168379967, 0.9486832980505139901, -0.9486832980505139901, 0.3162277660168379967, -0.9486832980505139901, 0.9486832980505139901]
        }
df = pd.DataFrame(data)

# 1. 生成二维高斯白噪声,实现全方向随机偏移
noise_std = 0.1  # 噪声强度,值越大偏移越明显
noise_x = np.random.normal(0, noise_std, size=len(df))
noise_y = np.random.normal(0, noise_std, size=len(df))

# 添加噪声得到基础偏移后的点集
df_noisy = df.copy()
df_noisy['x'] += noise_x
df_noisy['y'] += noise_y

# 2. 随机选择部分点,让它们落在两个原坐标点之间
interp_ratio = 0.2  # 设定落在两点之间的点比例(20%)
num_interp_points = int(len(df) * interp_ratio)
interp_indices = np.random.choice(len(df), num_interp_points, replace=False)

for idx in interp_indices:
    # 随机选取另一个不同的原坐标点
    other_idx = np.random.choice([i for i in range(len(df)) if i != idx])
    # 生成0-1之间的随机插值系数
    alpha = np.random.uniform(0, 1)
    # 线性插值计算新坐标,叠加小噪声避免完全在直线上
    new_x = alpha * df.loc[idx, 'x'] + (1 - alpha) * df.loc[other_idx, 'x'] + np.random.normal(0, noise_std/2)
    new_y = alpha * df.loc[idx, 'y'] + (1 - alpha) * df.loc[other_idx, 'y'] + np.random.normal(0, noise_std/2)
    # 更新该点坐标
    df_noisy.loc[idx, 'x'] = new_x
    df_noisy.loc[idx, 'y'] = new_y

# 对比绘制原星座图和加噪后的星座图
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
df.plot(x='x', y='y', kind='scatter', ax=ax1, title='原星座图')
df_noisy.plot(x='x', y='y', kind='scatter', ax=ax2, title='加噪后星座图')
plt.show()

关键细节说明

  • 二维高斯噪声:np.random.normal生成的x、y方向噪声相互独立,叠加后会形成全方向的随机偏移,彻底解决固定方向加减的局限,噪声标准差noise_std可根据需求调整偏移幅度。
  • 插值点处理:通过随机选取原坐标对,用线性插值得到两点间的点,再叠加小噪声,让这些点自然分布在原星座点之间,模拟更严重的噪声干扰或信号失真。
  • 参数可调:可修改noise_std控制整体偏移程度,修改interp_ratio调整落在两点之间的点数量比例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:55:22