主要内容

fftfilt

FFT-based冷杉过滤使用交叠相加的方法

描述

例子

y= fftfilt (b,x)过滤器中的数据向量x描述的滤波器系数向量b

y= fftfilt (b,x,n)使用n确定FFT的长度。

y= fftfilt (d,x)过滤器中的数据向量x与一个digitalFilter对象d

y= fftfilt (d,x,n)使用n确定FFT的长度。

例子

y= fftfilt (gpuArrayb,gpuArrayX,n)过滤器中的数据gpuArray(并行计算工具箱)对象gpuArrayX冷杉的滤波器系数gpuArray存储在gpuArrayb

例子

全部折叠

验证过滤器较小的操作数和更有效率吗fftfilt更高效的大型操作数。过滤器 10 6 随机数与两个随机过滤器:短,20个水龙头,和一个长,2000年。使用抽搐toc衡量执行时间。重复实验提高统计的100倍。

rng默认的N = 100;shrt = 20;长= 2000;tfs = 0;tls = 0;伦敦交通局= 0;tll = 0;kj = 1: N x =兰德(1,1 e6);bshrt =兰德(1、shrt);抽搐sfs = fftfilt (bshrt x);tfs = tfs + toc / N;抽搐sls =过滤器(bshrt 1 x);tls = tls + toc / N;blong =兰德(1、长);抽搐同声传译= fftfilt (blong x);伦敦交通局=伦敦交通局+ toc / N;抽搐sll =过滤器(blong 1 x); tll = tll+toc/N;结束

比较和显示平均时间。

流(' % 4 d-tap平均滤波器:fftfilt: % f s;过滤器:% f s \ n”shrt tfs, tls)
20-tap平均过滤:fftfilt: 0.197973秒;过滤器:0.012101秒
流(' % 4 d-tap平均滤波器:fftfilt: % f s;过滤器:% f s \ n”长,伦敦交通局,tll)
2000 -平均抽头滤波器:fftfilt: 0.069461;过滤器:0.287594秒

这个例子需要并行计算工具箱™软件。指GPU计算的需求(并行计算工具箱)为支持gpu的列表。金宝app

创建一个正弦波之和组成的信号在高斯加性白噪声。正弦波的频率是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));

设计一个低通滤波器冷杉equiripple过滤器使用designfilt

d = designfilt (“lowpassfir”,“SampleRate”Fs,“PassbandFrequency”,5500,“StopbandFrequency”,6000,“PassbandRipple”,0.5,“StopbandAttenuation”,50);B = d.Coefficients;

过滤器使用交叠相加法GPU上的数据。把GPU上的数据使用gpuArray。返回输出使用MATLAB®工作空间收集和情节的功率谱密度估计过滤数据。

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

输入参数

全部折叠

滤波器系数,指定为一个向量。如果b是一个矩阵,fftfilt适用于每一列的过滤器b信号向量x

输入数据,指定为一个向量。如果x是一个矩阵,fftfilt过滤器的列。如果bx都是具有相同数量的列的矩阵,th列b用于过滤th列xfftfilt为真实而复杂的输入工作。

FFT长度指定为一个正整数。默认情况下,fftfilt选择一个FFT长度和数据块长度,保证有效的执行时间。

数字滤波器,指定为一个digitalFilter对象。使用designfilt生成d基于频率特性规范。

GPU数组,指定为一个gpuArray对象。gpuArrayb包含滤波器系数,gpuArrayX是输入数据。看到运行在GPU MATLAB函数(并行计算工具箱)有关gpuArray对象。使用fftfiltgpuArray对象需要并行计算工具箱™软件。指GPU计算的需求(并行计算工具箱)为支持gpu的列表。金宝app过滤后的数据,y,是一个gpuArray对象。看到在GPU交叠相加过滤例如在GPU交叠相加过滤。

输出参数

全部折叠

输出数据,返回为一个向量,矩阵或gpuArray对象。

更多关于

全部折叠

相比过滤器函数

当输入信号是相对较大的,fftfilt是速度比过滤器

过滤器执行N为每个样本在乘法x,在那里N是滤波器长度。fftfilt执行2 FFT操作——信号的FFT块长度l+产品的逆英尺的fft算法——为代价的 1 2 l 日志 2 l 在哪里l是块长度。然后执行l逐点乘法的总成本 l + l 日志 2 l = l ( 1 + 日志 2 l ) 乘法。因此,成本的比例 l ( 1 + 日志 2 l ) / ( N l ) = ( 1 + 日志 2 l ) / N 这大约是日志2l/N

因此,fftfilt时更快的日志2l小于N

算法

fftfilt使用有效FFT-based过滤数据的方法交叠相加[1]频域滤波技术,只能连续相结合FIR滤波器频域过滤块输入序列。执行的操作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 )

fftfilt使用fft实现交叠相加的方法。fftfilt打破一个输入序列x到长度l数据块,l长度必须大于过滤器吗N

和可变块的过滤器b通过

y =传输线(fft (x(我+ l - 1), nfft)。* fft (b, nfft));

在哪里nfftFFT长度。fftfilt重叠连续输出部分n - 1点,n滤波器的长度,并总结。

fftfilt选择的关键参数lnfft以不同的方式,这取决于你是否提供一个FFT长度n滤波器和信号。如果你不指定一个值n(这决定了FFT长度),fftfilt这些关键参数自动选择:

  • 如果长度(x)大于长度(b),fftfilt选择值最小化块的数量乘以失败的数量/ FFT。

  • 如果长度(b)大于或等于什么长度(x),fftfilt使用一个单一的FFT长度

    2 ^ nextpow2长度(长度(b) + (x) - 1)

    这个计算

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

如果你提供一个值n,fftfilt选择一个FFT长度,nfft的,2 ^ nextpow2 (n)和一个数据块的长度nfft- - - - - -长度(b)+1。如果n小于长度(b),fftfiltn长度(b)

引用

[1]奥本海姆,艾伦·V。,Ronald W. Schafer, and John R. Buck.离散时间信号处理。第二版上。台北:普伦蒂斯霍尔,1999年。

扩展功能

版本历史

之前介绍过的R2006a