Octaveを使って、DFT

MATH

                        自作DFT                                                                            既存のDFT                    

 

1.DFTプログラムは、難しく無いが、理屈が解らん....ぶつぶつ

MATH

ですから、k=8の場合、N=8です。

これは、行列で表現すると、以下の計算になります。

x(k)は、入力。

X(k)は、出力です。(「ディジタルサウンド処理入門青木先生CQ出版」)

MATH= MATH

注意する点は、

X(k)のKは、直接に、周波数を示すものでは、無くて

いま、sampling周期を、Tsとすると、

N(今は、N=k=8)を使って

1番長い周期N*Tsこれは、周波数で言えば、1番低い周波数FF=1/(N*Ts)

から、整数倍の、k番目の周波数

F*k[k=0の時、直流]

を、表すことです。

入力から、k個の点を取り出す、ちゅうことは、

そこで、信号を打ち切って、その周期を、最長の周期として、その整数倍の周波数を計算する

ことなんやろかな....

sampling周期Tsのk倍(k*Ts)を、最長の周期(つまり、基本の周波数F=1/(k*Ts)

として、その整数倍の周波数F*kの成分を調べる、ことに、なります。

ですので

k=1:基本周波数の成分k=2:基本周波数の2倍の成分k=3:基本周波数の3倍の成分.......

各成分を計算することに、なります。(k=0は、直流成分のようですね)

「標本化周波数fcをNで等分割した周波数に限り、値をもつことが知られています。」(ディジタルサウンド入門青木先生p.30)

これは、知らんかったな...

すると、基本周波数の成分X(1)は

X(1)=MATH

で、表されることに、なります。

と、書いたものの、実は、何故そうなのか?まだ、解らない.....

井澤先生のHPを拝見しながら、考えていますが、まだ、、意味合いが、解らん.....涙 (-_-)

ほな、基本周波数の2倍の成分X(2)は

X(2)=MATH

MATH

や、さかい

X(2)=MATH

あかん、....解らん.....

2.そんで、プログラム作り

複素数のままで、計算します。

まず、回転の行列を作る関数

function w=make_W(n)

w=zeros(n,n);

for k=1:n

for l=1:n

w(k,l)=exp(-i*2*pi/n)^((k-1)*(l-1));

end

end

endfunction

次に、信号も複素数のままで、行列の計算をして、DFTする。

function dft_out=mydft_(x)

n=length(x);

w=zeros(n,n);

dft_out=zeros(n,1);

w=make_W(n);%さっき作った関数を呼び出す

dft_out=w* (x)';

end

endfunction

そんで、これをDFTして、結果を、グラフ表示するmファイル

clear

x_real=wavread('test.wav');

x=x_real(1:60); %1から60までの点をxに代入

z=mydft_(x');

for k=1:60

z_abs(k)=abs(z(k));%振幅を計算

z_atan(k)=atan(imag(z(k))/real(z(k))); %位相を計算

freq_(k)=k-1;%freq_は1から始まるのを、0からに修正

end

subplot(2,1,1);

stem(freq_,z_abs');

subplot(2,1,2);

stem(freq_,z_atan');

このmydft_が、うまく動作する事を、既存のDFT_関数で、確かめておく。

MATH

下は、make_w関数を確かめています。

MATH

$\vspace{1pt}$

3.Windowsでの、Octaveの設定

只、インストールした、だけでは、文字が小さすぎます。

MATH

これを、修正して、文字を大きくするには

Octaveのショートカットのプロパティを出して(右クリックして)

MATH

リンク先と書いた所の、

Console-12

Console-16

に変えておきます。(16くらいで、丁度ええんちゃう?)

MATH

$\vspace{1pt}$

ねっ、見やすくなったでしょう。

 

そうそう、gnuplotの画面の、左上、アイコンをクリックすると、

グラフの色、フォント、線幅等を、変えて、defaultとして、保存できます。

Scilab、Octaveも、ええけど、 Eulerも、素晴らしいですね....

Eulerが、私の好みです。(また、へそ曲がり、ばっかり言うて...)

みなさん、ありがとうございます。

H.18.4.18