【python版】示波器输出的csv文件(时间与电压数据)如何转换为频率与幅值【方法①】

示波器输出的csv文件中有两列数据,分别为时间与电压数据,如何将两列数据转换为频率与幅值数据,这涉及到信号的频谱分析,通常通过快速傅里叶变换(FFT)实现。以下是逐步的详细说明:
1、准备工作
①导入数据

首先,导入CSV文件中的数据,CSV文件中有两列数据,分别为时间(time)和电压(voltage)。

import pandas as pd

# 读取CSV文件
df = pd.read_csv('data.csv')
time = df['time'].values
voltage = df['voltage'].values
预处理数据

确保时间序列是均匀分布的(即时间间隔相同)。如果数据不均匀,可能需要插值处理。

import numpy as np

# 计算时间间隔
dt = np.mean(np.diff(time))
2、执行傅里叶变换

傅里叶变换将时间域信号转换为频率域信号。使用快速傅里叶变换(FFT)可以高效地完成这个任务。

①执行FFT

使用FFT算法将电压信号从时间域转换到频域。

from scipy.fft import fft, fftfreq

# 执行FFT
N = len(voltage)
T = dt  # 采样周期

yf = fft(voltage)
xf = fftfreq(N, T)[:N // 2]
②计算幅值

幅值是频域信号的绝对值。只取前半部分是因为FFT结果是对称的。 

import numpy as np

# 计算幅值
amplitude = np.abs(yf[:N // 2])
3、可选:绘制图形

如果你想要可视化结果,可以使用Matplotlib库绘制频谱图。

import matplotlib.pyplot as plt

plt.plot(xf, amplitude)
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.title('Frequency Spectrum')
plt.grid()
plt.show()
4、保存结果

将频率和幅值保存到新的CSV文件中。

# 保存频率和幅值到CSV
result_df = pd.DataFrame({
    'Frequency': xf,
    'Amplitude': amplitude
})

result_df.to_csv('frequency_amplitude.csv', index=False)
5、总结

①导入CSV数据将时间和电压数据读入程序。

②预处理数据确保时间间隔一致。

③执行FFT将电压信号从时间域转换到频域。

④计算幅值从FFT结果中提取幅值。

⑤绘图和保存结果可视化频谱图并保存为CSV文件。

这样,就完成了从时间与电压数据到频率与幅值数据的转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值