質問編集履歴
2
タイトル修正です
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
csvから読み込んだデータでFFTをしたいのですがエラーメッセージの意味が分かりません
|
1
|
+
csvから読み込んだデータでFFTをしたいのですがエラーメッセージの意味が分かりません.ValueError: Invalid axis (-1) specified.
|
body
CHANGED
File without changes
|
1
コードを書き加えました
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,7 +1,4 @@
|
|
1
|
-
|
1
|
+
```ここに言語を入力
|
2
|
-
csvファイルから読み込んだ1000行3列のデータにラベルをそれぞれsignal,1Hz,10Hzと名前を付け,ここに0-5秒の時間データを1000個配列を追加してグラフを4枚作りました.3枚はそれぞれ5秒分の電圧時間グラフ,1枚はこれら3つを合わせたグラフです.
|
3
|
-
ここで,最後にそれぞれをFFTした振幅周波数グラフが欲しいです.
|
4
|
-
#コード
|
5
2
|
import pandas as pd
|
6
3
|
import csv
|
7
4
|
import numpy as np
|
@@ -10,36 +7,35 @@
|
|
10
7
|
def main():
|
11
8
|
with codecs.open('test2.csv', 'r', 'utf-8', 'ignore') as f:
|
12
9
|
df = pd.read_csv(f)
|
13
|
-
|
10
|
+
#グラフ作成
|
14
|
-
df["time"]=[省略(1000
|
11
|
+
df["time"]=[0.005,0.01,…省略(0.005から5まで0.005ずつ1000データ)…4.995,5]
|
15
12
|
df = pd.DataFrame(df,columns=["signal","1Hz","10Hz","time"])
|
16
13
|
fig,ax = plt.subplots(figsize=(9,5))
|
17
14
|
df.set_index("time").plot(y="signal",antialiased=True,grid=True,legend=True,\
|
18
|
-
xlim=(0,6),ylim=(0,5),color="black")
|
15
|
+
xlim=(0,6),ylim=(0,5),color="black",alpha=1)
|
19
16
|
df.set_index("time").plot(y="1Hz", antialiased=True,grid=True, legend=True, \
|
20
|
-
xlim=(0, 6), ylim=(0, 5), color="blue",ls="-")
|
17
|
+
xlim=(0, 6), ylim=(0, 5), color="blue",ls="-",alpha=0.75)
|
21
18
|
df.set_index("time").plot( y="10Hz", antialiased=True, grid=True, legend=True, \
|
22
|
-
xlim=(0, 6), ylim=(0, 5), color="red", ls="-")
|
19
|
+
xlim=(0, 6), ylim=(0, 5), color="red", ls="-", alpha=0.6)
|
23
|
-
df.set_index("time").plot(ax=ax,y=["signal","1Hz","10Hz"], antialiased=True,
|
20
|
+
df.set_index("time").plot(ax=ax,y=["signal","1Hz","10Hz"], antialiased=True, grid=True, legend=True, \
|
24
|
-
xlim=(0, 6), ylim=(0, 5),color=["black","blue","red"])
|
21
|
+
xlim=(0, 6), ylim=(0, 5), color=["black","blue","red"], alpha=1)
|
25
22
|
|
26
23
|
ax.set_ylabel("voltage[V]",fontsize=20)
|
27
24
|
ax.set_xlabel("time[s]",fontsize=20)
|
28
25
|
|
29
|
-
|
26
|
+
#枠線の太さ
|
30
27
|
axis=["top","bottom","left","right"]
|
31
28
|
line_width=[1,1,1,1]
|
32
29
|
for a,w in zip(axis,line_width):
|
33
30
|
ax.spines[a].set_linewidth(w)
|
34
31
|
|
35
|
-
|
32
|
+
#目盛り方向,長さ,ラベルの色,ラベルサイズ
|
36
33
|
ax.tick_params(direction="in",length=10,labelsize=20,width=2)
|
37
|
-
|
34
|
+
#FFT部分
|
38
|
-
F=np.fft.fft("signal")
|
35
|
+
F = np.fft.fft("signal")
|
39
36
|
F_abs = np.abs(F)
|
40
|
-
---# 振幅をもとの信号に揃える---
|
41
|
-
F_abs_amp = F_abs /
|
37
|
+
F_abs_amp = F_abs / 1000 * 2
|
42
|
-
fq = np.linspace(0, 1.0 / 0.005,
|
38
|
+
fq = np.linspace(0, 1.0 / 0.005, 1000)
|
43
39
|
plt.xlabel('freqency(Hz)', fontsize=14)
|
44
40
|
plt.ylabel('amplitude', fontsize=14)
|
45
41
|
plt.plot(fq, F_abs_amp)
|
@@ -50,7 +46,9 @@
|
|
50
46
|
|
51
47
|
if __name__ == '__main__':
|
52
48
|
main()
|
53
|
-
|
49
|
+
```#実現したいこと
|
50
|
+
csvファイルから読み込んだ1000行3列のデータにラベルをそれぞれsignal,1Hz,10Hzと名前を付け,ここに0-5秒の時間データを1000個配列を追加してグラフを4枚作りました.3枚はそれぞれ5秒分の電圧時間グラフ,1枚はこれら3つを合わせたグラフです.
|
51
|
+
ここで,最後にそれぞれをFFTした振幅周波数グラフが欲しいです.
|
54
52
|
#わからない箇所,エラー
|
55
53
|
エラーメッセージのValueError: Invalid axis (-1) specified.の意味が掴めません.-1というのがどういう状態なのかわからず,直せません.
|
56
54
|
|
@@ -67,4 +65,5 @@
|
|
67
65
|
File "mkl_fft\_pydfti.pyx", line 203, in mkl_fft._pydfti.__process_arguments
|
68
66
|
ValueError: Invalid axis (-1) specified.
|
69
67
|
#補足
|
70
|
-
上記のコードではfftの部分でsignalの列を選んでいますが最終的には3データ全てをfftしたいと考えています.
|
68
|
+
上記のコードではfftの部分でsignalの列を選んでいますが最終的には3データ全てをfftしたいと考えています.
|
69
|
+
プログラム初心者で,リストをそのまま書いた形で量が多いため省略させて頂きました
|