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

如何生成带噪声的随机正弦波并通过FFT检测频率?附代码排查

问题排查与修复方案

直接触发运行报错的语法问题

你代码中第13行的df= pd.dataframe(u, columns=['data'])存在大小写错误,Pandas提供的DataFrame构造方法首字母必须大写,正确写法为pd.DataFrame,这是导致代码无法正常运行的直接原因。

不符合需求的逻辑问题

你当前的代码没有实现「生成带高斯噪声的正弦波」的目标:

  • 生成纯正弦波u后,你单独构造了和正弦波完全无关的随机序列rd,并直接覆盖了之前的df变量,最终保存的数据集和你要生成的带噪正弦波没有任何关系
  • 正弦波u的长度为100000,而你构造的rd长度仅为1001,二者长度完全不匹配
  • 导入了serial、scipy.stats、math、sys、matplotlib.pyplot多个未使用的模块,属于冗余导入

修复后的完整代码

import numpy as np
import scipy.fftpack as syfp
import pylab as pyl
import pandas as pd

# 基础参数配置
dt = 0.03071 
sample_count = 100000
signal_freq = 0.01
noise_std = 0.1 # 高斯噪声标准差,可按需调整

# 生成时间轴与纯正弦波
t = dt * np.arange(sample_count)
pure_sin = np.sin(2 * np.pi * t * signal_freq)

# 添加高斯噪声
np.random.seed(0)
noise = np.random.normal(0, noise_std, size=sample_count)
u = pure_sin + noise

# 保存为数据集
df = pd.DataFrame(u, columns=['data'])
df.to_csv('noisy_sin_dataset.csv', index=False) # 保存到本地csv文件

# FFT频率分析
FFT = syfp.fft(u)
freqs = syfp.fftfreq(len(u), dt)

# 绘图
pyl.subplot(211)
pyl.plot(t, u)
pyl.xlabel('Time')
pyl.ylabel('Amplitude')
pyl.subplot(212)
pyl.plot(freqs, syfp.log10(abs(FFT)), '.')
pyl.xlim(-.05, .05)
pyl.show()

修复说明

  • 修正了DataFrame的大小写错误,确保代码可以正常运行
  • 直接给原正弦波叠加指定标准差的高斯噪声,符合带噪正弦波的生成需求
  • 新增数据集保存到本地的逻辑,满足你后续频率识别的数据集使用需求
  • 删除了所有未使用的冗余导入,优化代码加载效率
  • FFT调用统一使用你导入的scipy.fftpack模块,避免不同子模块调用的兼容问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 16:36:01