質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1408閲覧

振幅スペクトルのグラフの表示

SR15_6PRO

総合スコア24

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/08/21 20:33

編集2019/08/23 21:39

プログラミングにふれてまだ1か月ほどの初心者です。

このブログと、このGithubサイトを参考にしながら、Python3でコードを組みました。
目的は、a.wavという音声の振幅スペクトルの表示です。
jupyterを使い、コードを保存したディレクトリと同じディレクトリにa.wavを保存してあります。
以下が、振幅スペクトルの表示までを目的として組んだコードです。

python

1#http://aidiary.hatenablog.com/entry/20120225/1330179868 2 3#coding:utf-8 4import wave 5import numpy as np 6import scipy.signal 7import scipy.fftpack 8import scipy.fftpack.realtransforms 9from pylab import * 10 11def wavread(filename): 12 wf = wave.open(filename, "r") 13 fs = wf.getframerate() 14 x = wf.readframes(wf.getnframes()) 15 x = np.frombuffer(x, dtype="int16") / 32768.0 # (-1, 1)に正規化 16 wf.close() 17 return x, float(fs) 18 19if __name__ == "__main__": 20# 音声をロード 21 wav, fs = wavread("a.wav") 22t = np.arange(0.0, len(wav) / fs, 1/fs) 23 24# 音声波形の中心部分を切り出す 25center = len(wav) / 2 # 中心のサンプル番号 26cuttime = 0.04 # 切り出す長さ [s] 27z = center-cuttime / 2*fs 28q = center + cuttime / 2*fs 29wavdata = wav[int(z):int(q)] 30time = t[int(z):int(q)] 31 32""" 33# 波形をプロット 34plot(time * 1000, wavdata) 35xlabel("time [ms]") 36ylabel("amplitude") 37savefig("waveform.png") 38show() 39""" 40 41 42#プリエンファシスフィルタ 43import scipy.signal 44 45def preEmphasis(signal, p): 46 """プリエンファシスフィルタ""" 47 # 係数 (1.0, -p) のFIRフィルタを作成 48 return scipy.signal.lfilter([1.0, -p], 1, signal) 49 50def mfcc(signal, nfft, fs, nceps): 51# プリエンファシスフィルタをかける 52 p = 0.97 # プリエンファシス係数 53 signal = preEmphasis(signal, p) 54 55 # ハミング窓をかける 56 hammingWindow = np.hamming(len(signal)) 57 signal = signal * hammingWindow 58 59 # 振幅スペクトルを求める 60 nfft = 2048 # FFTのサンプル数 61 spec = np.abs(np.fft.fft(signal, nfft))[:nfft/2] 62 fscale = np.fft.fftfreq(nfft, d = 1.0 / fs)[:nfft/2] 63 64 # プロット 65 plot(fscale, spec) 66 xlabel("frequency [Hz]") 67 ylabel("amplitude spectrum") 68 savefig("spectrum.png") 69 show()

しかし、これを動作させてもjupyterは無反応でした。
途中の「"""」で囲った「#波形をプロット」項を動作させるとそこまでは動くのですが、振幅スペクトルのプロットができない状態です。

どこをどのように直せばよいか、コードも含め具体的に教えてください。
また、もし振幅スペクトルの表示ができる、動作確認がなされたコードをお持ちの方がいらっしゃいましたら、共有していただけると幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

python

1if __name__ == "__main__": 2 # 音声をロード 3 wav, fs = wavread("a.wav") 4 t = np.arange(0.0, len(wav) / fs, 1/fs) 5 6 # 音声波形の中心部分を切り出す 7 center = len(wav) / 2 # 中心のサンプル番号 8 cuttime = 0.04 # 切り出す長さ [s] 9 z = center-cuttime / 2*fs 10 q = center + cuttime / 2*fs 11 wavdata = wav[int(z):int(q)] 12 wav, fs = wavread("a.wav") 13 14 nfft = 2048 # FFTのサンプル数 15 nceps = 12 # MFCCの次元数 16 ceps = mfcc(wavdata, nfft, fs, nceps) 17 print ("mfcc:", ceps)

上記のコードを最後に追加し、プリエンファシスフィルタをかけるところでnfft/2をnfft//2にしたら解決しました。

投稿2019/08/23 21:40

SR15_6PRO

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

プロット処理はmfcc関数内に書かれているようですが、この関数を呼び出していないためプロットされません。
まずは2つの参考サイトのコードを改変せずにそれぞれ実行し、どのように動作するのか、そしてそのコードでどのように処理が行われているのかを理解すべきかと思います。

投稿2019/08/21 21:58

can110

総合スコア38252

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問