今回から、より本格的にPdで音を扱う方法について解説していきます。今回は音響合成、つまりシンセサイザーが音を合成するしくみをPdで再現してみます。今回は、代表的な音響合成の仕組み「加算合成」「減算合成」「変調合成 (AM、RM、FM)」という3つの方式についてPdで実際にプログラミングしながら学んでいきます。 サンプルファイルのダウンロード 今回の解説でとりあげた、Pdのサンプルは下記のGithubのリポジトリからダウンロードしてください。 サンプルファイルのダウンロード 今日の内容 前回に引き続きPdの基本を学んでいきます。今回は「Pdでシンセサイザーをつくる」というテーマで進めていきます。 コンピューターが一般に普及する以前から、世の中には多くの電子楽器が存在し、その歴史は100年以上に及びます。そして、現在も進化を続けています。その歴史の中で、様々な音響合成(= 音色を合成する技術)
FFTW ("Fastest Fourier Transform in the West") は離散フーリエ変換 (DFT) を計算するためのライブラリで、マサチューセッツ工科大学 (MIT) のマテオ・フリゴ (Matteo Frigo) とスティーブン・ジョンソン (Steven G. Johnson) によって開発された[1][2]。オープンソース化されたFFTライブラリの中では、デファクトスタンダード的に用いられている。多くのUNIX系OSのパッケージ管理システムでも提供されている。 名称中の「West(西、西洋)」は「東洋の秘術」(アセンブラを使ったアクロバティックなテクニックのようなもの)を使わずにもっとも高速で実行できるコードを目指していることを表わしている[3]。公式サイトのFAQでは、「西? MITは東部にあると思うけど」との質問に対して「イタリア人(開発者のフリゴはイタ
MATLABで正弦波を作る(デジタル波) b = 1.0; %正弦波の振幅 f = 12; %周波数(1[s]の間に何回同じ波形が出現するか) Fs = 8820; %サンプリング周波数 t = 0 : 1/Fs : 1.0; %[時間軸の作成] 1/Fs 間隔で 0.0~1.0[s] まで data = b * sin(2 * pi * f * t); %pi=円周率π plot(data); title('時間信号'), xlabel('time[sample]'); 余弦波(cos波) 余弦波の式は、以下のようになる。 a:正弦波の振幅 円運動する点の横座標を、時間の関数として表現した式である。 MATLABで余弦波を作る(デジタル波) a = 1.0; f = 12; Fs = 8820; t = 0 : 1/Fs : 1.0; data = a * cos(2 * pi * f
フーリエ変換については、高速アルゴリズムがソースコードの形で、あちこちに公開されています。ただ使い方(パラメータの与え方や結果の見方)の敷居が高いことも単純にあると思うので、その辺を簡単に説明したいと思います。 のように呼ばれるとします。Reは信号の実数部を格納するための配列、Imは信号の虚数部を格納するための配列、sizeはReとImのデータ数です。実数部、虚数部というのは、フーリエ変換後の周波数領域で位相(sin波の進み遅れ)を含めた波の状態を表すために複素数を用いることから必要になります。 例えば、処理したい信号が256個(高速アルゴリズムはデータ個数に2のべき乗を要求するので単純に合わせました)のデータだとすると、まずRe(実数部)に256個の信号を格納します。そしてIm(虚数部)には256個の零を格納します(時間領域の波形や空間領域の画像は実数データなので、複素数データに格納する
sponsored link 音声処理や画像処理などの信号処理を行っているとFFT(高速フーリエ変換)を行う状況というのは非常によくある状況です。 フーリエ変換の式というのはいくつかの記載方法があって、 信号処理においてメジャーな記載方法は下記の式ではないかと思う。 フーリエ変換の式は、Fを周波数パワー、fを周期信号として となります。 フーリエ変換とは、ある周期性のある信号を、フーリエ級数を用いて表現する事であって、 つまりはまあ単純に言えば、色んな振幅、周期、位相のsin波を足し合わせて なんとかしてその信号を近い形で表す変換です。 上記の式がどうして色んな位相のsin波を表す事になるかと言う点については、 オイラーの公式を思い出してもらえばわかるかと思います。 オイラーの公式は下記の公式です。 フーリエ変換の式には複素数が混ざっていますが、 どうして信号をsin波の足し
C#から使えるフリーの数値計算ライブラリ。LAPACKやFFTWを扱える。グラフ描画機能まで付いてる。 http://ilnumerics.net/ ひとまず行列の固有値を求めてみた。 var A = new ILArray<double>(new[] { 3.0, 2.0, 1.0, 5.0 }, 2, 2); こうした場合、LAPACK形式で配列は縦に格納されるので、2行2列のこんな行列に 3.0, 1.0 2.0, 5.0 で、こいつの固有値を求めてみる。 ILArray<complex> eig = ILMath.eig(A); foreach (complex z in eig) Console.WriteLine(z); とっても簡単。 同じ感じでFFTしてみる。 var wave = new ILArray<double>(new[] { 1.0, 1.0, -1.0, -1
Pythonで音声信号処理(2011/05/14) 今回は、さまざまな音声のスペクトログラム(spectrogram)を求めてみたいと思います。科学捜査班が声紋分析で使っているやつですね。こういうの。 名前がスペクトログラムってくらいなのでフーリエ変換で求めるスペクトル(spectrum)と関係があります。スペクトルは、離散フーリエ変換(2011/6/11)でも紹介しましたが、音声波形の短時間(512サンプルなど)の波形データの中にどのような周波数成分がどれだけ含まれるかを表した図です。スペクトルは、横軸が周波数で縦軸が強度(振幅の2乗)となっています。スペクトルのグラフには、時間が入ってこないのが特徴的。時間はFFTをかける波形の位置で決まるので時間はFFTする前にあらかじめ固定されています。ちなみに、元の波形は横軸が時間なので時間領域、スペクトルは横軸が周波数なので周波数領域といいます
Pythonで音声信号処理(2011/05/14) 今回は、信号処理の肝とも言える離散フーリエ変換(Discrete Fourier Transform: DFT)を試してみようと思います。ときどき感動するアルゴリズムに出会うけれど、フーリエ変換はその一つです。最初に考え出したフーリエさんはすごい!フーリエ変換を扱った本は参考文献に挙げている何冊かを読んだのですが、理解するのにけっこう苦労しました。ここでも間違ったこと書いていたらコメントもらえると助かります。 前回の正弦波の合成(2011/06/07)で試したように、任意の周期波形はさまざまな周波数を持つ正弦波の合成で表せます。フーリエ変換は各周波数の正弦波がどれくらいの割合で含まれているかを求める技術。ここら辺の定性的な理解は、 フーリエの冒険 今日から使えるフーリエ変換 (今日から使えるシリーズ) の説明が大変わかりやすかったです。ま
エンジニアや理工系の人と話をしていると、FFT=周波数特性と勘違いしている人が大勢います。それも絶対に正しいと思っている人が居るんだけどそれは大間違いです。 なるべく数式を使わずに簡単にFFTとは何であるのかを解説します。 フーリエ変換とは フーリエ級数展開とは フーリエ変換やフーリエ級数展開の特徴 標本化と量子化 離散フーリエ変換(DFT)とは 高速フーリエ変換(FFT)とは FFT(DFT)の本質 どうしてFFTは正しくないのか (おまけ)スペクトル推定法と基底変換 (おまけ2)フーリエ変換の存在についての補足 参考リンク 関連記事 フーリエ変換とは フーリエ変換=FFTと思っている人も多いのですが、これも間違い。 フーリエ変換とは 無限に続く任意の連続信号(1次元)を、無限の周波数までのsin波とcos波の重ねあわせとして表現できる ことを利用してある任意の信号を、sin波とcos波
Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode
The Fourier transform can be powerful in understanding everyday signals and troubleshooting errors in signals. Although the Fourier transform is a complicated mathematical function, it isn’t a complicated concept to understand and relate to your measured signals. Essentially, it takes a signal and breaks it down into sine waves of different amplitudes and frequencies. Let’s take a deeper look at w
AndroidでFFT(高速フーリエ変換) Android sdk にはフーリエ変換のライブラリが標準で(API Level 9 より android.media.audiofx.Visualizer)ついています。 また、apache.common.mathなどの数学ライブラリも有名でよく使用されています。フーリエ変換の説明は割愛しますが、FFT(高速フーリエ変換)はデータの個数を2のべき乗にすることで高速化を実現するアルゴリズムで音声・画像・信号処理に多く用いられます。 Java 以外では フリーソフトウェアの中ではもっとも高速といわれるFFTWが特に有名です。 Parallel Colt Parallel Colt とは、CERN(欧州原子核研究機構)Colt Project で開発されたJavaによる科学技術計算のためのライブラリをマルチスレッド化したもの。データ解析、線形代数、多
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く