主要内容

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

fft

高速フーリエ変换

说明

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

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

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

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

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

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

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

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

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

y= fft (XN暗淡は,次元暗淡に沿ったフーリエ変換を返します。たとえば,Xが行列の场合,fft (X, n, 2)は,各行のÑ点のフーリエ変换を返します。

すべて折りたたむ

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

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

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

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(大小(T));

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

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

信号のフーリエ変换を计算します。

Y = FFT(X);

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

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

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

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

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

Y = FFT(S);P2 = abs (Y / L);P1 = P2(1:L / 2 + 1);P1(2:端-1)= 2 * P1(2:端-1);情节(F,P1)标题(“S的单面幅度谱(吨)”)xlabel('F(Hz)的')ylabel('| P1(F)|'

ガウスパルスを时间领域から周波数领域に変换します。

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

Fs = 100;%采样频率T = -0.5:1 / FS:0.5;%的时间向量L =长度(t);%信号长度X = 1 /(4 * SQRT(2 * PI * 0.01))*(EXP(-t ^ 2 /(2 * 0.01))。);

パルスを时间领域にプロットします。

情节(T,X)标题(“高斯脉冲时域”)xlabel('时间(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)标题(“频域高斯脉冲”)xlabel(“频率(f)”)ylabel(“| P (f) | ^ 2》

时间领域および周波数领域で复数の余弦波を比较します。

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

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

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

X1 = cos(2 * PI * 50 * T);第一行波X2 = cos(2 * PI * 150 * T);第二行波X3 = COS(2 * PI * 300 * T);%第三排波X = [X 1;X2;X3的];

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

为了I = 1:3副区(3,1,i)的积(T(1:100),X(I,1:100))标题(['排 ',num2str(i)中,“在时域”])结尾

アルゴリズムのパフォーマンスのために,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):( FS / 2-FS / N),P1(I,1:N / 2))标题(['排 ',num2str(i)中,“频域”])结尾

入力引数

すべて折りたたむ

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

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 = IFFT(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

[2]弗里戈,M.,和S. G.约翰逊。“FFTW:一种自适应软件体系结构的FFT。”声学,语音和信号处理国际会议论文集。卷。3,1998年,第1381至1384年。

拡張機能

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

R2006aより前に導入