Mathematicaの離散フーリエ変換

テキストの例題1(p.96)

x = {3, 0, -3, 0};   
Chop[
      Fourier[x, FourierParameters -> {-1, -1}]]

Chop[
      InverseFourier[%, 
        FourierParameters -> {-1, -1}]]

テキストの例題2(p.97)

\(x = {1, 1, \(-1\), \(-1\)}; \  (*\ x\_n\ *) 

    Chop[Fourier[x, FourierParameters -> {\(-1\), \(-1\)}]]\)

Chop[
      InverseFourier[%, 
        FourierParameters -> {-1, -1}]]

テキストの例題3(p.98)

\(x = {2, 0, 2, 0}; \  (*\ x\_n\ *) 

    Chop[Fourier[x, FourierParameters -> {\(-1\), \(-1\)}]]\)

Chop[
      InverseFourier[%, 
        FourierParameters -> {-1, -1}]]

レポート6の問1も

\(x = {0, \(-2\), 0, 2}; \  (*\ x\_n\ *) 

    Chop[Fourier[x, FourierParameters -> {\(-1\), \(-1\)}]]\)

Chop[
      InverseFourier[%, 
        FourierParameters -> {-1, -1}]]

レポート6の問2も

\(x = {2, \(-1\), 0, \(-1\)}; \  (*\ x\_n\ *) 

    Chop[Fourier[x, FourierParameters -> {\(-1\), \(-1\)}]]\)

Chop[
      InverseFourier[%, 
        FourierParameters -> {-1, -1}]]

サンプリング

準備

SetDirectory["z:"];

x = Import["a.wav", "WAV"][[1, 
            1]];

If[Mod[Length[x], 2] == 1, 
        x = Take[x, {1, Length[x] - 1}]];

ListPlot[x, 
        PlotRange -> {Automatic, {-1, 1}}];

\(\(\( (*\ 音声を聞いてみる\ *) \)\(
\)\(ListPlay[x, SampleRate -> 8000];\)\)\)

ListPlay[x, 
        SampleRate -> 4000];

ListPlay[x, 
        SampleRate -> 16000];

離散フーリエ変換

\(\(\( (*\ 離散フ - リエ変換\ *) \)\(
\)\(lx = 
        Chop[Fourier[x, 
            FourierParameters -> {\(-1\), \(-1\)}]];\)\)\)

ListPlot[Re[lx], 
        PlotRange -> {Automatic, {Min[Re[lx]], 
              Max[Re[lx]]}}];

ListPlot[Im[lx], 
        PlotRange -> {Automatic, {Min[Im[lx]], 
              Max[Im[lx]]}}];

\(\(\( (*\ 周波数スペクトル密度のグラフ \((絶対値)\)\ *) \)\(
\)\(ListPlot[Abs[lx], 
        PlotRange -> {Automatic, {0, Max[Abs[lx]]}}];\)\)\)

\(\(\( (*\ 周波数スペクトル密度のグラフ \((\(絶対値 &\) 拡大)\)\ *) \)\(
\)\(ListPlot[Abs[lx], 
        PlotRange -> {{1, 2000}, {0, Max[Abs[lx]]}}];\)\)\)

離散フーリエ積分

\(\(\( (*\ 離散フ - リエ積分\ *) \)\(
\)\(x = 
        Chop[Re[
InverseFourier[lx, 
              FourierParameters -> {\(-1\), \(-1\)}]]];\)\)\)

\(\(\( (*\ 離散フ - リエ積分後の波の確認\ *) \)\(
\)\(ListPlot[x, 
        PlotRange -> {Automatic, {\(-1\), 1}}];\)\)\)

ListPlay[x, 
        SampleRate -> 8000];

\(\(\( (*\ ファイルへの書き出し\ *) \)\(
\)\(Export["output.wav", 
Sound[
          SampledSoundList[x, 8000]], "WAV"];\)\)\)

自分の声は？

SetDirectory["d:"];

\(\(\( (*\ ファイルの読み込み\ *) \)\(
\)\(x = \(Import["aiueo.wav", "WAV"]\)[\([1, 1]\)];\)\)\)

If[Mod[Length[x], 2] == 1, 
        x = Take[x, {1, Length[x] - 1}]];

ListPlot[x, 
        PlotRange -> {Automatic, {-1, 1}}];

\(\(\( (*\ 音声を聞いてみる\ *) \)\(
\)\(ListPlay[x, SampleRate -> 8000];\)\)\)

\(\(\( (*\ 離散フ - リエ変換\ *) \)\(
\)\(lx = 
        Chop[Fourier[x, 
            FourierParameters -> {\(-1\), \(-1\)}]];\)\)\)

\(\(\( (*\ 周波数スペクトル密度のグラフ \((絶対値)\)\ *) \)\(
\)\(ListPlot[Abs[lx], 
        PlotRange -> {Automatic, {0, Max[Abs[lx]]}}];\)\)\)

\(\(\( (*\ 周波数スペクトル密度のグラフ \((\(絶対値 &\) 拡大)\)\ *) \)\(
\)\(ListPlot[Abs[lx], 
        PlotRange -> {{1, 5000}, {0, Max[Abs[lx]]}}];\)\)\)

Print["\:7d76\:5bfe\:5024\:306e\:6700\
\:5927\:5024:", Max[Abs[lx]]];

    Print["\:6700\:5927\:5024\:306e\:4f4d\:7f6e:", Position[Abs[lx], 
              Max[Abs[lx]]][[1, 1]] - 1];

    Print["\:6700\:5927\:5024\:306e\:5468\:6ce2\:6570:", 
        N[(Position[Abs[lx], Max[Abs[lx]]][[1, 1]] - 
                1)/(Length[lx]/8000)], "[Hz]"];