要求是生成频率范围为 1 Hz 至 10 Hz 的正弦波。
条件是
- 所有正弦波频率的幅度为一伏
- 1 Hz 信号必须被采样成 100 个波点。
- 同样,2 Hz 信号必须每秒采样 200 个样本,3 Hz 信号必须每秒采样 300 个样本,4 Hz 信号必须每秒 400 个样本,依此类推,最高可达 10 Hz。
4.所有这些值必须写入Csv文件并转换为excel文件。
因此,excel 有 10 个列,分别命名为 1 Hz 到 10 Hz。并且每一列都有相应的值。
第 1 列有 100 个样本的值,第 2 列有 200 个样本的值,依此类推,直到第 10 列。
任何人都可以帮助解决这个问题。我编码为 1 Hz 到 10 Hz,采样率相同,所有列的行数相同。
import numpy as np
import pandas as pd
def get_values_for_frequency(freq):
# sampling information
Fs = 100 #sample rate- no of samples per second
T = 1/Fs #sampling period %sample per second
t = 1 #seconds of sampling
N = Fs*t #total points in signal
# signal information
omega = 2*np.pi*freq # angular frequency for sine waves
t_vec = np.arange(N)*T # time
y = np.sin(omega*t_vec) #sine wave generation
return y
#columns are created for sine wave frequencies
df = pd.DataFrame(columns =['1Hz','2Hz', '3Hz', '4Hz', '5Hz', '6Hz', '7Hz'])
df['1Hz']=pd.Series(get_values_for_frequency(1))
df['2Hz']=pd.Series(get_values_for_frequency(2))
df['3Hz']=pd.Series(get_values_for_frequency(3))
df['4Hz']=pd.Series(get_values_for_frequency(4))
df['5Hz']=pd.Series(get_values_for_frequency(5))
df['6Hz']=pd.Series(get_values_for_frequency(6))
df['7Hz']=pd.Series(get_values_for_frequency(7))
df = df.round(decimals = 3) #Round a table values in DataFrame to3 decimal places
print("created table datatype\n",df.dtypes) #viewing the datatype of table
df.to_csv("float_csvfile.csv",index=False) #the raw values are written into the csv file.
我厌倦了将两个输入作为 def
get_values_for_frequency(freq,samplepoints):
并用
df = pd.DataFrame(columns =['1Hz','2Hz', '3Hz', '4Hz', '5Hz', '6Hz', '7Hz'])
df['1Hz']=pd.Series(get_values_for_frequency(1,100))
df['2Hz']=pd.Series(get_values_for_frequency(2,200))
df['3Hz']=pd.Series(get_values_for_frequency(3,300))
df['4Hz']=pd.Series(get_values_for_frequency(4,400))
df['5Hz']=pd.Series(get_values_for_frequency(5,500))
df['6Hz']=pd.Series(get_values_for_frequency(6,600))
df['7Hz']=pd.Series(get_values_for_frequency(7,700))
但我收到的每列的列长度相同。谁能帮我解决不同的列长度。谢谢