この記事では、その仕組みについて説明します。 FFT MATLABで。
FFT を理解する
の 高速フーリエ変換 (FFT) 信号を別の方法で理解するのに役立つ特別なテクニックを表しています。通常、シグナルは時間の経過とともに変化する一連の数値として表示されますが、 FFT、 信号内にどのような異なる周波数が存在するのか、またそれらの周波数がどの程度強いのかを確認できます。それは信号を音符に分解し、各音符の大きさを確認するようなものです。
の FFT アルゴリズムは信号データに対して多くの複雑な計算を実行します。信号を取得して小さな部分に分割し、各部分の周波数とその強度を計算します。最後に、すべての結果を組み合わせて、信号の周波数成分、位相関係、その他の重要な特性を把握します。
この手法は信号の分析と理解に役立つため、多くの分野で使用されています。たとえば、 信号処理 、使用できます FFT 不要なノイズを除去したり、特定のパターンを検出したりできます。の 音声分析 、さまざまな音を識別したり、オーディオ録音の品質を分析したりできます。の 画像処理 、 FFT 画像内の空間周波数を分析するのに役立ちます。そして電気通信では、 FFT 信号を効果的に送受信するために使用されます。
MATLAB で FFT を使用する方法
MATLAB には、という組み込み関数が用意されています。 FFT それによって私たちはパフォーマンスを行うことができます 高速フーリエ変換 (FFT) 信号の計算。この関数は使いやすく、周波数領域で信号を分析および操作するためのさまざまなオプションを提供します。
を使用するための構文 FFT MATLAB の関数を以下に示します。
F = FFT ( バツ )F = FFT ( x、n )
F = FFT ( x、n、寸法 )
ここ:
F= fft(x) の計算が得られます。 離散フーリエ変換 (DFT) を使用した x の 高速フーリエ変換 (FFT) アルゴリズム。
- x がベクトルを表す場合、 fft(x) ベクトルのフーリエ変換が得られます。
- x が行列を表す場合、 fft(x) は、各列をベクトルとして扱うことにより、各列のフーリエ変換を提供します。
F = fft(x,n) n 点 DFT が得られます。値が指定されていない場合、F は x と同じサイズになります。
- x がベクトルで、その長さが n 未満の場合、x は n に達するまで末尾にゼロが埋め込まれます。
- x がベクトルで、その長さが n を超える場合、その長さ n に切り捨てられます。
- x が行列の場合、各列はベクトルの場合と見なされます。
F = fft(x,n,dim) 指定された次元 dim に沿ったフーリエ変換が得られます。まあ言ってみれば、 fft(x, n, 2) x が行列を表す場合、行ごとに n 点フーリエ変換を行います。
次の例は、の動作を示しています。 FFT MATLAB の関数。
例1
使用できます FFT MATLAB で、特定の周波数成分とランダム ノイズを含む信号の生成と解析をデモンストレーションします。
例えば:
ls = 2000年 ;fs = 1500 ;
ts = 1 /fs;
テレビ = ( 0 :ls- 1 ) *ts;
f = 0.6 * それなし ( 2 * 円周率 * 50 *テレビ ) + 3 * ランドン ( サイズ ( テレビ ) ) + それなし ( 2 * 円周率 * 120 *テレビ ) ;
プロット ( 1000 *テレビ ( 1 : 50 ) 、f ( 1 : 50 ) )
xlabel ( 「テレビ(ミリ秒)」 )
イラベル ( 「f(テレビ)」 )
タイトル ( 「平均ゼロのランダム ノイズを持つ破損した信号」 )
F = FFT ( f ) ;
PS2 = 腹筋 ( F/ ls ) ;
PS1 = PS2 ( 1 : ls / 2 + 1 ) ;
PS1 ( 2 :終わり- 1 ) = 2 *PS1 ( 2 :終わり- 1 ) ;
f = fs* ( 0 : ( ls / 2 ) ) / ls ;
プロット ( f、PS1 )
タイトル ( 「f(t) の振幅スペクトル (片面) PS1」 )
xlabel ( 「f(Hz)」 )
イラベル ( '|PS1(f)|' )
提供されたコードは、長さの信号を生成します。 2000 サンプル (ls) 、サンプリング周波数は 1500Hz(fs) 、そして サンプリング周期 (ts) 。の 時間ベクトル (テレビ) これらのパラメータに基づいて作成されます。シグナル f は、50 Hz と 120 Hz の正弦波成分と、ゼロ平均ランダム ノイズの組み合わせで構成されます。次に、最初の 50 個のサンプルのセグメントを使用してプロットされます。コードはさらに、 FFT 信号を計算し、 振幅スペクトル (PS1) 。最後に、振幅スペクトルが Hz 単位の対応する周波数 (f) に対してプロットされます。
例 2
これを使用する別の例を次に示します。 FFT 時間領域から周波数領域へのガウス パルス変換のための MATLAB の関数。
fs = 500 ;ts = - 0.5 : 1 /fs: 0.5 ;
ls = 長さ ( ts ) ;
f = 1 / ( 4 * 平方メートル ( 2 * 円周率 * 0.02 ) ) * ( 経験値 ( -ts.^ 2 / ( 2 * 0.02 ) ) ) ;
プロット ( た、ふ )
xlabel ( 「時間(t)」 )
イラベル ( 「f(t)」 )
タイトル ( 「タイムドメイン」 )
例 = 2 ^nextpow2 ( ls ) ;
f = fs* ( 0 : ( 例えば/ 2 ) ) /例えば;
F = FFT ( f,np ) ;
PF = 腹筋 ( F/NP ) ;
プロット ( f、PF ( 1 :例えば/ 2 + 1 ) )
xlabel ( 「(f)」 )
イラベル ( '|PF(f)|' )
タイトル ( 「周波数ドメイン」 )
提供されたコードは、時間領域でガウス パルス信号を生成し、その周波数成分を分析します。 高速フーリエ変換 (FFT) MATLABで。時間領域信号がプロットされ、 FFT 周波数領域表現を取得するために実行されます。結果として 振幅スペクトル は対応する周波数に対してプロットされます。
例 3
次の例では、異なる周波数を持つ 3 つの正弦波信号を生成し、それらを時間領域でプロットします。 FFT MATLAB の関数。
fs = 2500 ;ts = 1 /fs;
ls = 3000 ;
t = ( 0 :ls- 1 ) *ts;
r1 = それなし ( 3 * 円周率 * 60 *t ) ;
r2 = それなし ( 3 * 円周率 * 140 *t ) ;
r3 = それなし ( 3 * 円周率 * 350 *t ) ;
f = [ r1; r2; r3 ] ;
ために k = 1 : 3
サブプロット ( 3 、 1 、k )
プロット ( t ( 1 : 250 ) 、f ( k、 1 : 250 ) )
タイトル ( [ 「行番号」 、 num2str ( k ) 、 「(タイムドメイン)」 ] )
終わり
例 = 2 ^nextpow2 ( ls ) ;
d = 2 ;
F = FFT ( f、np、d ) ;
PS2 = 腹筋 ( F/ ls ) ;
PS1 = PS2 ( :、 1 :例えば/ 2 + 1 ) ;
PS1 ( :、 2 :終わり- 1 ) = 2 *PS1 ( :、 2 :終わり- 1 ) ;
ために k= 1 : 3
サブプロット ( 3 、 1 、k )
プロット ( 0 : ( fs/np ) : ( fs/ 2 -fs/np ) 、PS1 ( k、 1 :例えば/ 2 ) )
タイトル ( [ 「行番号」 、 num2str ( k ) 、 '(周波数ドメイン)' ] )
終わり
上記のコードでは、3 つの正弦波 r1、r2、r3 が時間領域の出力ウィンドウに表示されます。周波数領域信号「PS1」は、波に対して FFT 関数を使用して、それぞれの個別の片側振幅スペクトルを計算することによって作成されます。
結論
の FFT は、信号の周波数内容を分析することで、信号を異なる方法で理解するのに役立つ貴重なツールです。 MATLAB の組み込み関数 fft を使用して、 FFT 信号の計算が便利になります。この機能を使用すると、データを時間領域から周波数領域に変換することで、さまざまな周波数とそれらの周波数の相対強度に関する重要な詳細を知ることができます。上記のガイドは、信号の特性をより深く理解し、さまざまなアプリケーションで情報に基づいた意思決定を行うために非常に重要です。