主要内容

最新のリリースでは,このページがまだ翻訳されていません。このページの最新版は英语でご覧になれます。

fftfilt

オーバーラップ加算法を使用したFFTベースの冷杉フィルター処理

説明

y= fftfilt (bxでは,ベクトルx内のデータがが数ベクトルbのの记述するフィルターフィルターでフィルターフィルターれれれれれれ

y= fftfilt (bxnnを使用してFFT長を求めます。

y= fftfilt (dxdigitalFilterオブジェクトdを使用してベクトルxののデータをフィルターフィルターフィルターフィルターフィルターしし

y= fftfilt (dxnnを使用してFFT長を求めます。

y= fftfilt (gpuArraybgpuArrayXnは,gpuArraybに格納されたgpuArray内の冷杉フィルター係数でgpuArray(并行计算工具箱)オブジェクトgpuArrayX内のデータをフィルター処理します。

すべて折りたたむ

小さなオペランドには过滤器の方が,大きなオペランドにはfftfiltの方が効率的であることを確認します。20 タップの短いフィルターと 2,000 タップの長いフィルターの 2 つの乱数フィルターを使用して、 10 6 個の乱数をフィルター処理します。抽搐tocを使使し実行当行时间ををします。

rng.默认的N = 100;shrt = 20;长= 2000;tfs = 0;tls = 0;伦敦交通局= 0;tll = 0;kj = 1:n x = rand(1,1e6);bshrt =兰特(1,shrt);tic sfs = fftfilt(bshrt,x);tfs = tfs + toc / n;Tic SLS =滤波器(BShrt,1,x);tls = tls + toc / n;Blong =兰特(1,长);tic sfl = fftfilt(blong,x);tfl = tfl + toc / n;tic sll =滤波器(blong,1,x); tll = tll+toc/N;结束

平衡时间ををします。

流('%4d-tap filter average: fftfilt: %f s;过滤器:% f s \ n”,shrt,tfs,tls)
20-tap过滤器平均值:fftfilt: 0.346021 s;过滤器:0.028034秒
流('%4d-tap filter average: fftfilt: %f s;过滤器:% f s \ n”,long,tfl,tll)
2000-tap过滤器平均值:fftfilt: 0.095165 s;过滤器:0.293620秒

この例では,并行计算工具箱™ソフトウェアが必要です。サポートされているGPUの一覧については,リリース别のgpuサポート(并行计算工具箱)を参照してください。

加法性ホワイトガウスノイズの正弦波の合計から構成される信号を作成します。正弦波の周波数は,2.5,5、10および15 kHzです。サンプリング周波数は50千赫です。

Fs = 50 e3;t = 0:1 / Fs: 10 - (1 / Fs);x = cos(2 *π* 2500 * t) + 0.5 *罪(2 *π* 5000 * t) + 0.25 * cos(2 *π* 10000 * t) +...0.125 *罪(2 *π* 15000 * t) + randn(大小(t));

designfiltを使用してローパス冷杉等リップルフィルターを設計します。

d = designfilt(“lowpassfir”“SampleRate”Fs,...'Passband职业', 5500,“StopbandFrequency”, 6000,...“PassbandRipple”,0.5,'stopbandattenuation',50);B = D.COEFFICERS;

オーバーラップ加算法によって,GPUでデータをフィルター処理します。gpuArrayを使用してデータをGPUに入力します。收集采用MATLAB®ワークスペース返し,フィルターされたのパワースペクトル密度をプロットしパワー密度推定をプロットし。

y = fftfilt (gpuArray (B), gpuArray (x));周期图(收集(y), rectwin(长度(y)),长度(y), 50 e3)

入力引数

すべて折りたたむ

フィルター係数。ベクトルとして指定します。bが行列の場合,fftfiltでは,bの各列にあるフィルターが信号ベクトルxに適用されます。

入力データ。ベクトルとして指定します。xが行列の場合,fftfiltでは各列がフィルター処理されます。bxが同じ分数をを行列のの合,b列目を使用してx列目がフィルター処理されます。fftfiltは,実数入力および複素数入力の両方に使用できます。

FFT長。正の整数として指定します。既定では、fftfilt

デジタルフィルター。digitalFilterオブジェクトで指定します。dをを数量応答仕様基因て生成するに,关联designfiltを使使し。

GPU配列。gpuArrayオブジェクトとして指定します。gpuArraybにはフィルターフィルター数が含まれ,gpuArrayXは入力データです。gpuArrayオブジェクトの詳細については,GPUでのMATLAB関数の実行(并行计算工具箱)を参照してください。fftfiltgpuArrayオブジェクトと使用するには,并行计算工具箱™ソフトウェアが必要です。サポートされているGPUの一覧については,リリース别のgpuサポート(并行计算工具箱)を参照してください。フィルター処理されたデータyは,gpuArrayオブジェクトです。GPUでのオーバーラップ加算フィルター処理の例は,GPUでのオーバーラップ加算フィルター処理を参照してください。

出力引数

すべて折りたたむ

出力データ。ベクトル、行列、またはgpuArrayオブジェクトとして返されます。

詳細

すべて折りたたむ

过滤器関数との比較

入力信号が比較的大きい場合は,fftfilt过滤器よりも高度です。

过滤器xの各サンプルに対してN回(Nはフィルター長)の乗算を行います。fftfiltでは, 1 2 l 日志 2 l のコストで2つのfft演算。総コストは l + l 日志 2 l l 1 + 日志 2 l 回の乗算です。そのため,コスト比は l 1 + 日志 2 l / N l 1 + 日志 2 l / N になります。これこれlog2L / Nに近似できます。

つまり,fftfiltは、日志2LがN未満である場合により高速になります。

アルゴリズム

fftfiltでは、冷杉フィルターに対してのみ機能する周波数領域のフィルター処理手法である,効率的なFFTベースの”オーバーラップ加算”[1]を使用して,連続的な周波数領域のフィルター処理された入力シーケンスのブロックを組み合わせることで,データをフィルター処理します。fftfiltで実行される演算は,差分方程式により时间领域内で,以下のように表されます。

y n b 1 x n + b 2 x n 1 + + b n b + 1 x n n b

これと等価な表現は,Z変換,すなわち”周波数領域”表現で,以下のように表されます。

Y z b 1 + b 2 z 1 + + b n b + 1 z n b X z

fftfiltFFT.を使用してオーバーラップ加算法を実装します。fftfiltは,入力シーケンスxを長さLのデータブロックに分割します。このときLはフィルター長Nよりも長くなければなりません。

さらに,以下の操作により,フィルターbで各ブロックを畳み込みます。

Y = IFFT(FFT(x(i:i + l-1),nfft)。* fft(b,nfft));

ここで,nfftはFFTの长さです。fftfiltは,連続的な出力セクションをn - 1点ずつオーバーラップさせ,その和を計算します。ここで,nはフィルターの长さです。

fftfiltでは,フィルターと信号のFFT長nを指定するかどうかによって,さまざまな方法で主要パラメーターのlnfftが選択されます。FFTの長さを決定するnの値を指定しない場合は,fftfiltによってはこれらの主要パラメーターが自动的に选択されます。

  • 长度(x)长度(b)より大きい場合,fftfiltでは,ブロック数とFFTごとのフロップ数を乗算した結果が最小になる値が選択されます。

  • 长度(b)长度(x)に等しいまたは大厦综合,fftfiltでは,以下の長さの単一FFTが使用されます。

    2^nextpow2(length(b) + length(x) - 1)

    これは以下を計算します。

    y =传输线(fft (B, nfft)。* fft (X, nfft))

nに値を指定すると,fftfiltではFFTのの长nfft2 ^ nextpow2 (n),データブロック長にnfft-长度(b)+1が選択されます。n长度(b)未満未満场合,fftfiltではn长度(b)が设定されます。

参照

Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck。离散时间信号处理。第二版。上鞍河:Prentice Hall, 1999。

拡张机械

R2006Aより前に导入