Pythonで学ぶフーリエ解析と信号処理

Pythonで学ぶフーリエ解析と信号処理

フーリエ解析の数学的基礎や信号処理の原理,Pythonでの科学技術計算の基礎等を解説

ジャンル
発行年月日
2020/09/28
判型
B5
ページ数
164ページ
ISBN
978-4-339-00937-8
Pythonで学ぶフーリエ解析と信号処理
在庫あり

定価

2,970(本体2,700円+税)

カートに入れる

購入案内

  • 内容紹介
  • まえがき
  • 目次
  • レビュー
  • 著者紹介

 広く使われているPythonを活用して、フーリエ解析を学ぶ一冊。Pythonで数学的な処理をした経験がなくても問題ありません。科学技術計算で必須のライブラリNumPyとmatplotlibについて、基本から解説しています。
 従来のフーリエ解析の教科書にはあまり収録されていなかった、信号処理への応用が盛り込まれていることも特徴で、信号を周波数で見るという新しい視点が得られます。
 必要な箇所には証明がついており、ルベーグ積分のエンジニア向けのユーザーズガイドがあるなど、数学的な面からも基礎が学べます。最終的にはSciPyライブラリを使って、子猫の鳴き声のスペクトログラムを作るレベルにまで達することができます。

本書は,フーリエ解析と信号処理の入門書です。本書を読んで得られる知識は,大きく分けて,フーリエ解析の数学的基礎,信号処理の原理と使い方,Pythonによる科学技術計算の基礎,の三つです。1章では,本書で頻繁に使うPythonのライブラリであるNumPyとMatplotlibについて概略を説明します。2章から7章まではフーリエ級数,フーリエ変換の数学的な説明で,8章,9章では,実際の信号の周波数解析を行います。10章はルベーグ積分のユーザーズガイドになっています。ゴールは音声データ(wav形式の子猫の鳴き声のデータ)のスペクトログラムを描くことです。これは音声データの時間ごとの周波数情報を表現するもので,短時間フーリエ変換という技術を使って実現できます。ここまでできれば1次元の信号処理の基本はわかったことになり,これを土台にして,より専門的な信号処理を学んでいけるはずです。

本書において,重要なポイントでは数学的に厳密な議論をしています。厳密な数学的議論の大きな利点は二つあります。第一の利点は,(関数解析を基礎とした)より高度な信号処理の理論を学ぶハードルが大きく下がることです。例えば,ウェーブレット解析などを学ぶには厳密な議論を避けて通ることができませんが,本書で学べばスムーズに学習が進められるでしょう。第二の利点は,ハードウェアでの信号処理まで含めた場合に必要となる,アナログ信号に対するフーリエ解析が理解できるようになることです。本書ではディジタル信号処理を扱いますが,フーリエ解析部分は,アナログ信号処理の基礎にもなっているのです。

二十年近く,工学部でフーリエ解析を教えてきました。その間,さまざまな教科書を使ってきましたが,いずれも偏微分方程式への応用が中心で,信号処理への応用にはあまり言及されていないものでした。しかし近年,電気系,情報系では,偏微分方程式への応用もさることながら,それ以上に信号処理への応用が求められています。信号処理では,時間とともに変化する信号を周波数で見ることが重要になります。しかし,偏微分方程式への応用では「周波数」の物理的意味については副次的にしか扱われません。

信号処理を教えるため,既存の信号処理の教科書に目を通してみると,実践的に書かれたものでは数学的な厳密さが犠牲に,厳密に書かれたものでは実践が犠牲になりがちな傾向にありました。

このようなことが起きるのは,実際の応用では,ディジタル信号処理をする前の測定段階で,ハードウェアによって高周波成分がカットされており,そのような帯域制限された信号を離散フーリエ変換すればよいためです。ディジタル信号処理で必要になる離散フーリエ変換は有限和ですから,極限操作は自由にでき,連続信号を扱う際に生じる極限操作の問題が前面に出ないからです。しかし,離散フーリエ変換は連続フーリエ変換の近似ですので,連続の問題についても正確な議論をすべきだと思いました。

これらの観点から,講義を数年がかりで信号処理向きに修正し,その際に作成した講義ノートが本書のもとになっています。10章には,ルベーグ積分のユーザーズガイドがあります。ルベーグ積分は数学科以外ではほとんど教えられていないために,不当に無駄なものだと思われているようですが,ごまかしなく議論するには必要な数学です。使うだけならそう難しいものではありませんので,是非この機会に読んでみてください。本書がより発展的なIT・数学を学ぶための基盤となれば,望外の喜びです。

執筆に際し,京都工芸繊維大学の峯拓矢先生,東北学院大学の鈴木利則先生,同じく東北学院大学の深瀬道晴先生に査読いただきました。記して感謝いたします。

2020年7月
神永正博

★発行前情報のため若干変更されることがございます。ご了承下さい。★

1.Pythonと便利なライブラリたち
1.1 本書でよく使うライブラリ
1.2 NumPyのn次元配列(ndarray)
1.3 関数のベクトル化
1.4 Matplotlib
章末問題

2.フーリエ級数展開
2.1 関数を級数展開することで何がわかるのか?
2.2 周波数情報を取り出す
2.3 Pythonでフーリエ級数の部分和を見てみよう
2.4 連続でない関数のフーリエ展開の例
2.5 半区間展開
章末問題

3.関数の直交性
3.1 関数の世界に内積を導入する
3.2 シュヴァルツの不等式と三角不等式
3.3 フーリエ係数と内積
3.4 ベッセルの不等式・パーセバルの等式
3.5 フーリエ係数の最適性とベッセルの不等式
3.6 その他の直交関数系
章末問題

4.ギブス現象と総和法
4.1 Pythonでギブス現象を見てみよう
4.2 ひげが残り続けること
4.3 チェザロ総和法
章末問題

5.複素フーリエ級数
5.1 実フーリエ級数を見直す
5.2 実例を見てみよう
5.3 振幅スペクトル・パワースペクトル・位相スペクトル
5.4 関数の滑らかさと複素フーリエ係数の関係
章末問題

6.フーリエ変換
6.1 フーリエ変換の導入
6.2 フーリエ変換の基本的な性質
6.3 フーリエ逆変換
6.4 フーリエ変換・逆変換の例
章末問題

7.フーリエ変換の諸性質
7.1 L2条件
7.2 畳込み
7.3 相互相関関数・自己相関関数
7.4 フーリエ変換の減衰オーダと滑らかさ
章末問題

8.PythonでFFT
8.1 サンプリング定理
8.2 離散フーリエ変換
8.3 Pythonを使って周波数情報を取り出す
8.4 FFTのアルゴリズム
8.5 あえてPythonでFFTを作る
章末問題

9.Pythonでスペクトログラム
9.1 窓関数
9.2 窓関数を掛けた信号のFFT
9.3 窓関数の周波数特性の見方
9.4 SciPyのカイザー窓を見てみよう
9.5 短時間フーリエ変換と音声データの解析
9.6 wavファイルのスペクトログラム
章末問題

10.ルベーグ積分ユーザーズガイド
10.1 本章の方針
10.2 「ほとんどいたるところ」ってどういう意味?
10.3 積分の定義と役に立つ極限定理
10.4 リーマン=ルベーグの補題
10.5 積分の順序交換
章末問題

章末問題略解
引用・参考文献
索引

読者モニターレビュー【earlsuke様(R&Dエンジニア,専門:自然言語処理)】

信号処理を学ぶための基礎作りを目的として本書に惹かれました。
私が感じた本書の特徴は,①わかりやすさを重視した章立て,②式展開の丁寧さとPythonによる波形描画です。

①章立てについて
目次を確認していただけるとわかるように,各章10ページ程度とコンパクトにわかれております。これらは読みすすめるのに手頃であり,各章の独立性も高いため,興味のある内容を効率的に学習することができました。また,各章の冒頭には,その章を学ぶことに対するねらいが記述されており,テンポよく読みすすめることができました。

②式展開について序論でも語られているように,信号処理に向けたフーリエ変換を数学と工学の両面から学ぶための教材として上手に作られていると感じました。数式の展開時には,詳細な説明が織り交ぜられ,授業を受けているような気分になりました。また,Pythonによる波形描画によって,パラメータを変更しながら,数式とグラフでイメージつかみながら学習をすすめることができます。NumPy,Matplotlibなどライブラリの基本的な使い方も紹介されており,Pythonに馴染みがない方でも,とっつきやすいと思われます。

総評として,信号処理の基礎知識としてのフーリエ変換を学ぶのにあたり,大学の学部生から社会人におけるまで幅広い学習者に対しておすすめできる書籍でした。

読者モニターレビュー【cocomoff様(研究職,ご専門:計算機科学)】

本書では,Pythonを用いながら信号処理の基本的な概念から,具体的なスペクトログラム作成まで学ぶことができます。

本書の特徴は,実行可能なPythonコードが1ページ未満の小さい単位で用意されていて,数学的な式展開と信号処理の対応関係が分かりやすくまとめられていることです。一般の書類で省略されがちな式展開についても詳細に展開が説明されていて,自学自習するにあたってとても参考になります。同様に演習問題についても配慮がされています。

特徴的な章として,10章にルベーグ積分に関する説明が補足されていて,応用の観点からルベーグ積分をはじめて学ぶためにも情報がまとまっていると思います。信号処理を学ぶだけでなく,Python/Numpy/Scipy/Matplotlibを利用する例を学ぶためにも本書はオススメできます。

読者モニターレビュー【山口直彦 先生(東京国際工科専門職大学 助手,専門:情報学)】

表紙に描かれた,波形にじゃれつく黒猫のイラストが印象的な本ですが,内容は非常に本格的です。まえがきで著者が「既存の信号処理の教科書に目を通してみると,実践的に書かれたものでは数学的な厳密さが犠牲に,厳密に書かれたものでは実践が犠牲になりがちな傾向にありました。」という問題意識からこの本が生まれたとある通り,フーリエ解析の背景にある数学的な理屈を学ぶ内容でありながら,Pythonによる演習や基礎的な例題を通じて「とにかく手を動かして試してみて」から「詳しい理屈を確認する」という方針が徹底されています。

難易度としては,フーリエ解析や信号処理を全く知らない初学者がいきなりこの本で独習するのはやや難しいと思います。信号処理の基礎を学習済みの人がさらに理論的裏付けを学ぶのに最適です。前提知識として大学の初等数学程度の知識と,Pythonそのものの説明については必要最小限なライブラリの使い方が説明されているのみなので,Pythonそのものの文法や使い方は別途学んでおく必要があります。

本書の大きな見所は2つあると思います。一つはライブラリ(Numpy)のFFT関数を使うだけでなく,再帰呼び出しを使ったFFT関数を自作し,行ごとに逐次解説している事です(8.5章)。なぜFFTが離散フーリエ変換を高速に行えるのか,理屈と実践の両側から学べます。二つめはルベーグ積分の解説がしっかり書かれている事です。ルベーグ積分は積分順序を交換できるか否かを議論する際に必要な重要ツールですが,本格的に学ぶのは大変なため,積分順序の交換については軽く説明が流されてしまっている事が多いです。本書は,あっさり読み進めたい人向けの厳密さを損なわない最小限のサジェスチョンを本編に含めつつ,少し腰を据えて学びたい人向けに第10章を丸々使ったルベーグ積分の入門解説があって,読みやすさと厳密さを両立させる工夫がなされています。

神永 正博(カミナガ マサヒロ)