主要内容

fftfilt

基于fft的FIR重叠加法滤波

描述

例子

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的FIR滤波器系数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 = rand(1,1e6);bshrt =兰德(1、shrt);drawtext (bsht,x) = fftfilt(bsht,x);tfs = tfs + toc / N;tic sls = filter(bshrt,1,x);tls = tls + toc / N;blong =兰德(1、长);tic sfl = fftfilt(blong,x);伦敦交通局=伦敦交通局+ toc / N;filter(blong,1,x); tll = tll+toc/N;结束

比较和显示平均时间。

流('%4d-tap filter average: fftfilt: %f s;过滤器:% f s \ n”shrt tfs, tls)
20 tap filter average: fftfilt: 0.228256 s;过滤器:0.021731秒
流('%4d-tap filter average: fftfilt: %f s;过滤器:% f s \ n”长,伦敦交通局,tll)
2000-tap过滤器平均:fftfilt: 0.081026 s;过滤器:0.288916秒

这个例子需要并行计算工具箱™软件。指GPU支金宝app持发布(并行计算工具箱)获取支持的图形处理器列表。金宝app

创建一个由白高斯加性噪声中的正弦波和组成的信号。正弦波频率分别为2.5 kHz、5 kHz、10 kHz和15 kHz。采样频率为50khz。

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));

设计了一种低通FIR等纹波滤波器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支金宝app持发布(并行计算工具箱)获取支持的图形处理器列表。金宝app过滤后的数据,y,是一个gpuArray对象。看到GPU上的重叠添加过滤这是一个关于GPU重叠添加过滤的例子。

输出参数

全部折叠

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

更多关于

全部折叠

相比过滤器函数

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

过滤器执行N每个样本的乘法x,在那里N为过滤器长度。fftfilt执行2个FFT操作-信号块的FFT长度l加上fft乘积的FT倒数,代价是 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的方法对数据进行过滤交叠相加[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));

在哪里nfft为FFT长度。fftfilt重叠连续的输出部分n - 1点,n是过滤器的长度,并对它们求和。

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

  • 如果长度(x)大于长度(b),fftfilt选择使块数量乘以每个FFT的flops数量最小的值。

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

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

    这个计算

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

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

参考文献

奥本海姆,艾伦V.,罗纳德W.谢弗,约翰R.巴克。离散时间信号处理。《上鞍河》第二版,南京:普伦提斯霍尔出版社,1999年。

扩展功能

之前介绍过的R2006a