當前位置:網站首頁>振動信號的擬合實驗報告

振動信號的擬合實驗報告

2022-05-13 06:41:18zpeien

題目:利用python/matlab,讀入vibrationsignal.dat,數據有8列,第一列為測量時間,第8列為振動信號,請寫出振動信號與時間的回歸關系。

操作步驟與提示

  1. 振動信號一般格式為y=sin(x);
  2. 振動信號的頻率可以通過FFT求出,來驗證模型。
import numpy as np
import numpy.fft as nf
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

plt.rcParams['font.sans-serif'] = ['SimHei']  # 設置matplotlib上的中文字體
plt.rcParams['axes.unicode_minus'] = False  # 在matplotlib 繪圖正常顯示符號
times = []
vibrations = []
with open('vibrationsignal.dat', 'r') as of:
    # 獲取第一行錶頭數據
    firstline = of.readline()
    # 删除字符串頭尾的特定字符
    firstline = firstline.strip('\n')
    for line in of:
        # 清除前後回車符,按照空格進行分割
        line = line.strip('\n').split()
        # 將測量時間保存進列錶
        times.append(float(line[0]))
        # 將振動信號保存進列錶
        vibrations.append(float(line[7]))
times = np.array(times).reshape(-1, 1)
vibrations = np.array(vibrations)
x_train, x_test, y_train, y_test = train_test_split(times, vibrations, test_size=0.005, random_state=1)
# 建立線性模型
lr = LinearRegression()
# 訓練線性模型
lr.fit(x_train, y_train)
# 進行預測
y_predict = lr.predict(x_test)

# 通過FFT得到頻譜
y_test_fft = nf.fft(y_test)
y_test_fft = np.abs(y_test_fft)
y_predict_fft = nf.fft(y_predict)
y_predict_fft = np.abs(y_predict_fft)
# 歸一化處理
y_test_fft = y_test_fft / len(y_test_fft)
y_predict_fft = y_predict_fft / len(y_predict_fft)

plt.plot(range(y_test.shape[0]), y_test, 'r', label="實際曲線")
plt.plot(range(y_predict.shape[0]), y_predict, "b:", label="預測曲線")
plt.title("時間與振動信號的線性回歸模型")
plt.legend()
plt.xlabel("時間")
plt.ylabel("振動信號")
# 顯示圖像
plt.show()

結果: 

 

版權聲明
本文為[zpeien]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/133/202205130553091322.html

隨機推薦