主要内容

fftfilt

基于fft的FIR滤波采用重叠加法

描述

例子

y= fftfilt (bx过滤vector中的数据x用系数向量描述滤波器b

y= fftfilt (bxn使用n来确定FFT的长度。

y= fftfilt (dx过滤vector中的数据x与一个digitalFilter对象d

y= fftfilt (dxn使用n来确定FFT的长度。

例子

y= fftfilt (gpuArraybgpuArrayXn中的数据过滤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);Tic SFS = fftfilt(bshrt,x);tfs = tfs + toc / N;Tic SLS = filter(bshrt,1,x);tls = tls + toc / N;blong =兰德(1、长);Tic SFL = fftfilt(blong,x);伦敦交通局=伦敦交通局+ toc / N;Tic SLL = filter(blong,1,x); tll = tll+toc/N;结束

比较和显示平均时间。

流('%4d-tap filter average: fftfilt: %f s;过滤器:% f s \ n”shrt tfs, tls)
20-tap滤镜平均值:fftfilt: 0.162760 s;过滤器:0.018533秒
流('%4d-tap filter average: fftfilt: %f s;过滤器:% f s \ n”长,伦敦交通局,tll)
2000-tap过滤器平均值:fftfilt: 0.070877 s;过滤器:0.148293秒

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

创建一个由白色高斯加性噪声中的正弦波和组成的信号。正弦波的频率是2.5、5、10和15千赫。采样频率为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基于频率响应规范。

图形处理器阵列,指定为gpuArray对象。gpuArrayb包含过滤系数,和gpuArrayX是输入数据。看到在GPU上运行MATLAB函数(并行计算工具箱)有关gpuArray对象。使用fftfiltgpuArray对象需要Parallel Computing Toolbox™软件。指GPU支金宝app持情况(并行计算工具箱)获取支持的gpu列表。金宝app过滤后的数据,y,是一个gpuArray对象。看到GPU上的重叠添加过滤下面是GPU上重叠添加过滤的示例。

输出参数

全部折叠

输出数据,以向量、矩阵或gpuArray对象。

更多关于

全部折叠

相比过滤器函数

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

过滤器执行N乘以每个样本x,在那里N为过滤器长度。fftfilt执行2个FFT操作-信号块的长度的FFTl加上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的块数乘以失败数最小化的值。

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

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

    这个计算

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

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

参考文献

Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck。离散时间信号处理.第二版。上鞍河,新泽西:普伦提斯霍尔,1999。

扩展功能

之前介绍过的R2006a