2016年10月28日金曜日

Octaveレッスン(3) - wavファイルを入力しFFTをかける関数(サブ関数使用)

* wavファイルを入力しFFTをかける関数(サブ関数使用)

ファイル先頭の基本関数の下には、サブ関数を定義可能。
サブ関数は、ファイル内の基本関数&他のサブ関数からのみ呼び出し可能。

※Octaveレッスン(1), (2) の記述では、wavファイルが1秒以上の場合に対応していなかった。
  今回のsample_func2関数を使用すると、正しい結果が得られる。

---- sample_func2.mの中身 ----
function[Y, y, Fs] = sample_func2(wavefile, targetHeltz)
  disp('sample_func2() returns FFT spectrum & sample rate')
  info = audioinfo(wavefile)
  [y,Fs] = audioread(wavefile);

  Y=fft(y);

  L = info.TotalSamples %sample length
  T = 1/Fs;             %sampling period
  t = (0:L-1)*T;        %time vector

  P2 = abs(Y/L);        %both side spectrum
  P1 = P2(1:L/2+1);     %one side spectrum
  P1(2:end-1) = 2*P1(2:end-1); %why from 2?
  f=Fs*(0:L/2)/L;

  plot_spectrum(f, P1)
  plot_magnified(f, P1, Fs, L, targetHeltz-100, targetHeltz+100)
end

function[] = plot_spectrum(f, P1)
  subplot(2,1,1)
  title('spectrum')
  xlabel('(Hz)')
  plot(f,P1)
end

function[] = plot_magnified(f, P1, Fs, L, minf, maxf)
  subplot(2,1,2)
  title('magnified spectrum')
  xlabel('(Hz)')
  grid('on')
  min=L/Fs*minf;
  max=L/Fs*maxf;
  plot(f(min:max),P1(min:max))
end
---------------------------

参考: スクリプトと関数


0 件のコメント:

コメントを投稿