主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

fft

高速フーリエ変換

説明

Y= fft (Xは高速フーリエ変換(FFT)アルゴリズムを使用して,X離散フーリエ変換(DFT)を計算します。

  • Xがベクトルの場合,fft (X)はそのベクトルのフーリエ変換を返します。

  • Xが行列の場合,fft (X)は,Xの列をベクトルとして扱い,各列のフーリエ変換を返します。

  • Xが多次元配列の場合,fft (X)は,サイズが1ではない最初の配列次元に沿った値をベクトルとして扱い,各ベクトルのフーリエ変換を返します。

Y= fft (X,nn点のDFTを返します。値を指定しない場合,YのサイズはXと同じです。

  • Xがベクトルであり,Xの長さがnより短い場合,nの長さになるようにXの末尾をゼロで埋めます。

  • Xがベクトルであり,Xの長さがnを超える場合,Xが長さnで切り捨てられます。

  • Xが行列の場合,各列はベクトルの場合と同様に扱われます。

  • Xが多次元配列の場合,サイズが1でない最初の配列次元がベクトルの場合と同様に扱われます。

Y= fft (X,n,昏暗的は,次元昏暗的に沿ったフーリエ変換を返します。たとえば,Xが行列の場合,fft (X, n, 2)は,各行のn点のフーリエ変換を返します。

すべて折りたたむ

フーリエ変換を使用して,ノイズに埋もれた信号の周波数成分を求めます。

信号のパラメーターとして,サンプリング周波数1 kHz,信号の持続期間1.5秒を指定します。

Fs = 1000;%采样频率T = 1 / f;%采样周期L = 1500;信号长度t = t (0: l - 1) *;%的时间向量

50赫兹,振幅0.7の正弦波と120 Hz,振幅1の正弦波で信号を構成します。

S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t)

平均値0分散4のホワイトノイズで信号を乱します。

X = S + 2*randn(size(t)));

ノイズを含む信号を時間領域にプロットします。信号X (t)を見て周波数成分を特定することは困難です。

情节(1000 * t (1:50) X(1:50))标题(“零均值随机噪声污染信号”)包含(‘t(毫秒)) ylabel (“X (t)”

信号のフーリエ変換を計算します。

Y = fft (X);

両側スペクトルP2を計算します。次に,P2および偶数の信号長lに基づいて,片側スペクトルP1を計算します。

P2 = abs (Y / L);P1, P2 (1: L / 2 + 1);P1 (2: end-1) = 2 * P1 (2: end-1);

周波数領域fを定義し,片側振幅スペクトルP1をプロットします。ノイズを追加したため,予期したとおり,振幅は正確に0.7と1にはなりません。平均的に,信号が長くなるほど周波数がよりよく近似されます。

f = f * (0: (L / 2)) / L;情节(f, P1)标题(“X(t)的单边振幅谱”)包含(“f (Hz)”) ylabel (“| P1 (f) |”

ここで,ノイズを含まない元の信号のフーリエ変換を計算すると,正確な振幅0.7と1.0が得られます。

Y = fft(年代);P2 = abs (Y / L);P1, P2 (1: L / 2 + 1);P1 (2: end-1) = 2 * P1 (2: end-1);情节(f, P1)标题(“S(t)的单边振幅谱”)包含(“f (Hz)”) ylabel (“| P1 (f) |”

ガウスパルスを時間領域から周波数領域に変換します。

信号のパラメーターとガウスパルスXを定義します。

Fs = 100;%采样频率t = -0.5: 1 / Fs: 0.5;%的时间向量L =长度(t);%信号长度X = 1 /(4 *√(2 *π* 0.01))* (exp (- t ^ 2 / (2 * 0.01)));

パルスを時間領域にプロットします。

情节(t, X)标题(“时域高斯脉冲”)包含(“时间(t)”) ylabel (“X (t)”

関数fftを使用して信号を周波数領域に変換するには,まず新しい入力長として,元の信号長の次の2のべき乗を指定します。これにより,fftのパフォーマンスを高めるために,信号Xの末尾がゼロで埋められます。

n = 2 ^ nextpow2 (L);

ガウスパルスを周波数領域に変換します。

Y = fft (X, n);

周波数領域を定義し,固有周波数をプロットします。

f = f * (0: (n / 2)) / n;P = abs (Y / n) ^ 2;情节(f P (1: n / 2 + 1)标题(“频域高斯脉冲”)包含(“频率(f)”) ylabel (“| P (f) | ^ 2》

時間領域および周波数領域で複数の余弦波を比較します。

信号のパラメーターとして,サンプリング周波数1 kHz,信号の持続期間1秒を指定します。

Fs = 1000;%采样频率T = 1 / f;%采样周期L = 1000;信号长度t = t (0: l - 1) *;%的时间向量

周波数がスケーリングされた余弦波を各行が表す行列を作成します。その結果のXは3行1000列の行列です。1行目の波の周波数は 50、2 行目の波の周波数は 150、3 行目の波の周波数は 300 です。

x1 = cos(2 *π* 50 * t);第一行波x2 = cos(2 *π* 150 * t);第二行波x3 = cos(2 *π* 300 * t);第三行波X = [x1;x2;x3);

X100年の各行の最初から個の要素を順番に1つの图にプロットし,それらの周波数を比較します。

i = 1:3次要情节(3、1,i)情节(t (1:10 0) X(我,1:10 0))标题([“行”num2str(我),“在时域”])结束

アルゴリズムのパフォーマンスのために,fftでは入力の末尾をゼロで埋めることができます。この場合,Xの各行の長さが現在の長さの次に大きい2のべき乗になるように,各行をゼロで埋めます。関数nextpow2を使用して新しい長さを定義します。

n = 2 ^ nextpow2 (L);

Xの行に沿って,つまり,各信号に対してfftを使用するように引数昏暗的を指定します。

昏暗的= 2;

信号のフーリエ変換を計算します。

Y = fft (X, n,昏暗的);

各信号の両側スペクトルと片側スペクトルを計算します。

P2 = abs (Y / L);P1, P2 (: 1: n / 2 + 1);P1 (: 2: end-1) = 2 * P1 (:, 2: end-1);

1つの图内で,周波数領域に各行の片側振幅スペクトルをプロットします。

i = 1:3次要情节(3、1,i)图(0:(Fs / n): (f / 2 - f / n)、P1(我,1:n / 2)标题([“行”num2str(我),在频域内])结束

入力引数

すべて折りたたむ

入力配列。ベクトル、行列または多次元配列として指定します。

Xが0行0列の空の行列である場合,fft (X)は0行0列の空の行列を返します。

データ型:||int8|int16|int32|uint8|uint16|uint32|逻辑
複素数のサポート:あり

変換の長さ。[]または非負の整数スカラーとして指定します。変換の長さとして正の整数スカラーを指定すると、fftのパフォーマンスが向上することがあります。長さは通常 2 のべき乗、あるいは小さい素数の積に因数分解可能な値です。nが信号の長さ未満である場合,fftn番目の要素から後の残りの信号値を無視し,切り捨て後の結果を返します。n0の場合,fftは空の行列を返します。

例:n = 2 ^ nextpow2(大小(X, 1))

データ型:||int8|int16|int32|uint8|uint16|uint32|逻辑

演算の対象の次元。正の整数のスカラーとして指定します。値を指定しない場合,既定値は、サイズが 1 ではない最初の配列の次元です。

  • fft (X, [], 1)Xの列に沿って演算し,各列のフーリエ変換を返します。

  • fft (X, [], 2)Xの行に沿って演算し,各行のフーリエ変換を返します。

昏暗的ndims (X)よりも大きい場合,fft (X,[],昏暗的)Xを返します。nが指定された場合,fft (X, n,昏暗的)は次元昏暗的に沿って埋め込みまたは切り捨てを行うことにより,Xを長さnにします。

データ型:||int8|int16|int32|uint8|uint16|uint32|逻辑

出力引数

すべて折りたたむ

周波数領域の表現。ベクトル、行列または多次元配列として返されます。

Xの型がである場合,fftはネイティブレベルの単精度で計算し,Yの型もになります。それ以外の場合,Y型として返されます。

Yのサイズは次のとおりです。

  • Y = fft (X)またはY = fft (X,[],昏暗的)の場合,YのサイズはXのサイズに等しくなります。

  • Y = fft (X, n,昏暗的)の場合,大小(Y,昏暗的)の値はnに等しくなりますが,その他すべての次元のサイズはXと同じままです。

Xが実数の場合,Yは共役対称になり,Yの特異点の数は装天花板((n + 1) / 2)になります。

データ型:|

詳細

すべて折りたたむ

ベクトルの離散フーリエ変換

Y = fft (X)はフーリエ変換,X =传输线(Y)は逆フーリエ変換の実装です。長さnXおよびYの変換は,次式で定義されます。

Y k j 1 n X j W n j 1 k 1 X j 1 n k 1 n Y k W n j 1 k 1 ,

ここで,

W n e 2 π / n

は1のn乗根の1つです。

ヒント

  • 関数fftの実行時間は,変換する長さに依存します。変換の長さが小さい素因数のみからなる場合、素数または大きい素因数からなる場合よりもかなり速くなります。

  • ほとんどのnの値について,実数入力DFTの計算時間は複素数入力DFTの約半分になります。ただし,nが大きな素因数をもつ場合,速度の差はほとんどありません。

  • ユーティリティ関数fftwを使用して,fftの処理速度を向上できます。この関数は,特定のサイズと次元をもつFFTの計算に使用されるアルゴリズムの最適化を制御します。

アルゴリズム

FFT関数(fftfft2fftn传输线ifft2ifftn)はFFTW[1][2]と呼ばれるライブラリに基づいています。

参照

[1] FFTW (http://www.fftw.org

弗里戈·M·约翰逊和s·g·约翰逊。FFTW: FFT的自适应软件架构。国际声学、语音和信号处理会议论文集。第3卷,1998年,1381-1384页。

拡張機能

GPUコード生成
GPU编码器™を使用してNVIDIA GPU®のためのCUDA®コードを生成します。

R2006aより前に導入