MATLABをもう少し使いこなす
提出物:ノイズ除去した音声ファイル(*.wav)
準備:配布した3つのファイル(VF.xlsx、Spch.wav、Noise.wav)をダウンロードして、MATLABを起動した際に左側に表示される「現在のフォルダー」内に収納する。
演習6-1: 心室細動の主周波数を調べる。
ファイルの取り込み
・初期化するため中央下段にある「コマンドウィンド」で「clear」を実行しておく
・次に、readtimetable関数を用いてVF.xlsxファイルに時間コードを加えたテーブルを作成する
・中央上段のエディターに入力し、「実行」していく。プログラムは下に増やしていく。
→ MATLABの右側にあるワークスペースに「vf」のタイムテーブルが出現する。
元の波形を表示する
9秒間の心室細動波形が表示される。
心室細動波形を高速フーリエ変換し、周波数解析を行う
FFTの詳細は…省略します
解析結果をグラフ化する
複数のピーク(2.9、3.4、7.8Hzなど)が観察され、この心室細動は複数の興奮波から構成されている可能性が考えられる。
(せっかく書いたプログラムなので、保存しておくことをオススメします)
演習6-2: 音声ファイルのノイズを除去する。
初期化
・「close all」と「clear」を実行する
音声ファイルを確認する(音量に注意すること)
・音量に気をつけて「Spch.wav」を再生してみる………ほぼノイズ音しか聞こえない…はず。
音声ファイルを取り込む
・audioread関数を用いて「Spch.wav」ファイルを取り込む。
音声波形の表示、スペクトル解析の実行と結果表示
・短時間フーリエ変換(STFT)を用いて周波数スペクトルを算出し、スペクトログラムとして表示する。
音声信号が完全にノイズに埋もれてしまっている。
ノイズの特徴を調べる
・交流障害など特定の周波数帯に限定されるノイズであれば、特定帯域の信号を減弱させるフィルターで信号処理すれば良いかも。
・演習6-1で行ったFFTを用いてノイズの周波数解析を試みる。
ノイズ周波数に特徴は見られない……むしろ全体に均等のようにも見える。
→ そんな時は…ホワイトノイズを音声ファイルから減算することを試みる。
ノイズ除去の実施
・音声信号と同じ長さのホワイトノイズを作成する(省略)→Noise.wavを使用。
・今回は音声スペクトルからノイズスペクトルを引く、スペクトルサブトラクション法を行う。
・音声とノイズをそれぞれ同じ条件で短時間フーリエ変換してスペクトル化する。
ノイズ除去した信号を逆短時間フーリエ変換(ISTFT)で元の信号形式に変換する
ノイズ除去後の信号を確認する
・Figure1と同じ形式になるように出力する。
これでノイズがほぼ消失し、スペクトログラムでは声紋が確認できる……はず。
[課題6] ノイズ除去した信号を*.wav形式に出力しなさい。
---ヒント---
・audiowrite関数を使用する(右上の検索ウィンドウから検索可能)。
なお、小テストとも連動しているので、お忘れなく…。