質問編集履歴

2

ソースコードに明確な区切りを設定しました

2021/03/02 07:19

投稿

tsuji__
tsuji__

スコア11

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- サンプリング周波数8192Hzのcsv形式波形ファイルをpythonで読み込みFFT分析を行い、横軸周波数 片振幅の伝達関数グラフの作成
3
+ 初めての質問です。サンプリング周波数8192Hzのcsv形式波形ファイルをpythonで読み込みFFT分析を行い、横軸周波数 片振幅の伝達関数グラフの作成をしたいです。
4
4
 
5
5
 
6
6
 
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- python
21
+ ```python
22
22
 
23
23
  import numpy as np
24
24
 
@@ -242,7 +242,7 @@
242
242
 
243
243
  proc.process()
244
244
 
245
-
245
+ ```
246
246
 
247
247
  ### 試したこと
248
248
 
@@ -251,3 +251,7 @@
251
251
 
252
252
 
253
253
  ### 補足情報(FW/ツールのバージョンなど)
254
+
255
+ 初めての質問でまだ使い勝手がよく分かっておらずソースコードなど見にくいと思いますがご容赦ください。
256
+
257
+ お手数ではございますが、teratailさんにコードを記述する際のアドバイス等一言だけでもございましたら、書いていただけると嬉しいです。本筋とは離れた要求であることは承知しておりますがどうかよろしくお願い致します。

1

コードの書式を改善

2021/03/02 07:19

投稿

tsuji__
tsuji__

スコア11

test CHANGED
File without changes
test CHANGED
@@ -1,12 +1,12 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- csvファイルをpythonで読み込みFFT分析を行い、横軸周波数 片振幅の伝達関数グラフの作成
3
+ サンプリング周波数8192Hzのcsv形式波形ファイルをpythonで読み込みFFT分析を行い、横軸周波数 片振幅の伝達関数グラフの作成
4
4
 
5
5
 
6
6
 
7
7
  ### 発生している問題・エラーメッセージ
8
8
 
9
- csvファイルにはサンプリング周波数8192Hzの波形ファイルがあり、それをコード内の条件で周波数分析を試みているのですが、クラスについての理解が疎いのか上手くコードが動作しません。以下のようなグラフが表示されてしまいます。
9
+ csvファイルにはがあり、それをコード内の条件で周波数分析を試みているのですが、クラスについての理解が疎いのか上手くコードが動作しません。以下のようなグラフが表示されてしまいます。
10
10
 
11
11
  上から順に時刻歴波形 窓関数 伝達関数(デシベル表示)
12
12
 
@@ -50,7 +50,7 @@
50
50
 
51
51
  self.msg = 'Wave_Fs8192_01.csv'
52
52
 
53
- # 設定値
53
+ 設定値
54
54
 
55
55
  self.fs = 8192 # サンプリング周波数
56
56
 
@@ -70,7 +70,7 @@
70
70
 
71
71
 
72
72
 
73
- #オーバーラップの関数
73
+ オーバーラップの関数
74
74
 
75
75
  def ov(self, F_s, Fc, overlap):
76
76
 
@@ -118,7 +118,7 @@
118
118
 
119
119
  x=t[start:end]
120
120
 
121
- # FFT
121
+
122
122
 
123
123
  fft(y,self.fs)
124
124
 
@@ -134,15 +134,11 @@
134
134
 
135
135
 
136
136
 
137
- # 窓関数で波形を切り出す
137
+ 窓関数で波形を切り出す
138
138
 
139
139
  L = len(F_s)
140
140
 
141
- #window = np.hamming(L) # ハミング窓
141
+
142
-
143
- #window=np.boxcar(L) #レクタンギュラ窓
144
-
145
- #window = np.hanning(L) # ハン窓
146
142
 
147
143
  window=signal.boxcar(L)
148
144
 
@@ -150,33 +146,33 @@
150
146
 
151
147
 
152
148
 
153
- # FFT計算
149
+ FFT計算
154
-
155
- # numpy.fftよりscipy.fftpackの方が速い
150
+
156
-
151
+
152
+
157
- NFFT = 2**nextpow2(L) # 計算速度向上のため解析データ数に近い2の乗数を計算
153
+ NFFT = 2**nextpow2(L)
158
-
154
+
159
- fft_amp = fftpack.fft(array_window, NFFT) # 周波数領域のAmplitude
155
+ fft_amp = fftpack.fft(array_window, NFFT)
160
-
156
+
161
- fft_fq = fftpack.fftfreq(NFFT, d=1.0/fs) # Amplitudeに対応する周波数
157
+ fft_fq = fftpack.fftfreq(NFFT, d=1.0/fs)
162
-
163
- # 正の領域のみ抽出
158
+
159
+
164
160
 
165
161
  fft_amp = fft_amp[0: int(len(fft_amp)/2)]
166
162
 
167
163
  fft_fq = fft_fq[0: int(len(fft_fq)/2)]
168
164
 
169
- fft_amp = db(abs(fft_amp)) # 複素数→デシベル変換
165
+ fft_amp = db(abs(fft_amp))
170
-
171
-
172
-
173
- # グラフ表示
166
+
167
+
168
+
169
+
174
170
 
175
171
  plt.figure(figsize=(8, 6*1.5))
176
172
 
177
- plt.subplots_adjust(hspace=0.4) # x軸ラベル表示のため余白調整
173
+ plt.subplots_adjust(hspace=0.4)
178
-
179
- # 入力データプロット
174
+
175
+
180
176
 
181
177
  plt.subplot(3, 1, 1)
182
178
 
@@ -186,7 +182,7 @@
186
182
 
187
183
  plt.grid()
188
184
 
189
- # 入力データ*窓関数プロット
185
+
190
186
 
191
187
  plt.subplot(3, 1, 2)
192
188
 
@@ -194,13 +190,13 @@
194
190
 
195
191
  plt.xlabel(xlabel_name)
196
192
 
197
- #plt.ylabel('Data*hamming')
193
+
198
194
 
199
195
  plt.ylabel('Data*hann')
200
196
 
201
197
  plt.grid()
202
198
 
203
- # FFTプロット
199
+
204
200
 
205
201
  plt.subplot(3, 1, 3)
206
202
 
@@ -216,7 +212,7 @@
216
212
 
217
213
 
218
214
 
219
- # MATLAB関数nextpow2
215
+
220
216
 
221
217
  def nextpow2(n):
222
218
 
@@ -228,7 +224,7 @@
228
224
 
229
225
 
230
226
 
231
- # デシベル変換
227
+
232
228
 
233
229
  def db(x, dBref=1):
234
230