如何在Python中对数据集提取的数组值做FFT可视化?
FFT实现与可视化方案
1. 数据预处理
你的smpl是二维字符串列表,首先需要将其转换为一维浮点数数组,才能进行FFT计算:
import numpy as np # 展平二维列表并转成浮点数 signal = np.array([float(val) for sub_list in smpl for val in sub_list])
2. 执行FFT计算
使用NumPy的FFT工具包完成变换,同时计算对应的频率轴(注意替换实际采样率):
# 执行快速傅里叶变换 fft_output = np.fft.fft(signal) # 配置采样率(根据你的数据实际情况修改,比如100Hz) sampling_rate = 100 sample_count = len(signal) # 生成频率轴 freq = np.fft.fftfreq(sample_count, d=1/sampling_rate) # 提取正频率部分的幅值(FFT结果对称,取前半部分即可) amplitude = np.abs(fft_output)[:sample_count//2] freq_axis = freq[:sample_count//2]
3. 可视化结果
用Matplotlib绘制原始信号和FFT幅值谱:
import matplotlib.pyplot as plt # 创建画布 plt.figure(figsize=(12, 8)) # 绘制原始信号 plt.subplot(2, 1, 1) plt.plot(signal, color='#1f77b4') plt.title('原始时域信号') plt.xlabel('样本索引') plt.ylabel('信号幅值') # 绘制FFT幅值谱 plt.subplot(2, 1, 2) plt.plot(freq_axis, amplitude, color='#ff7f0e') plt.title('FFT幅值谱') plt.xlabel('频率 (Hz)') plt.ylabel('幅值') # 调整子图间距 plt.tight_layout() plt.show()
注意事项
- 务必替换
sampling_rate为你的数据实际采样频率,否则频率轴会失真 - 如果
smpl中存在非数值字符串,需要先做数据清洗(比如过滤无效值)
内容的提问来源于stack exchange,提问作者james
相关产品推荐
相关产品推荐

