主要内容

fftfilt

基于FFT的重叠加法FIR滤波

描述

例子

Y=fftfilt(B,x)过滤向量中的数据x用系数向量描述滤波器B

Y=fftfilt(B,x,N)使用N确定FFT的长度。

Y=fftfilt(D,x)过滤向量中的数据x用一个数字滤波器对象D

Y=fftfilt(D,x,N)使用N确定FFT的长度。

例子

Y=fftfilt(gpuArrayb,gpuArrayX,N)过滤数据库中的数据gpuArray(并行计算工具箱)对象gpuArrayXFIR滤波器系数在gpuArray储存在gpuArrayb

例子

全部折叠

验证过滤器对于较小的操作数和是否更有效fftfilt对于较大的操作数更有效。筛选器 10 6. 带有两个随机过滤器的随机数:一个短的,有20个抽头,一个长的,有2000个抽头。使用抽搐toc以度量执行时间。重复这个实验100次以改进统计数据。

rng违约N=100;shrt=20;long=2000;tfs=0;tls=0;tfl=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;结束

比较和显示平均时间。

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

这个例子需要并行计算工具箱™软件。指GPU支万博1manbetx持情况(并行计算工具箱)获取支持的GPU的列表。万博1manbetx

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

Fs=50e3;t=0:1/Fs:10-(1/Fs);x=cos(2*pi*2500*t)+0.5*sin(2*pi*5000*t)+0.25*cos(2*pi*10000*t)+...0.125*sin(2*pi*15000*t)+randn(尺寸(t));

基于dsp的低通FIR等波纹滤波器设计设计过滤器

d = designfilt (“lowpassfir”,“采样器”Fs,...“PassbandFrequency”,5500,“阻带频率”,6000,...“通带波纹”, 0.5,“StopbandAttenuation”, 50);B = d.Coefficients;

使用重叠添加方法过滤GPU上的数据。使用gpuArray.返回输出到MATLAB®工作空间使用聚集并绘制滤波数据的功率谱密度估计。

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

输入参数

全部折叠

滤波器系数,指定为向量。如果B是一个矩阵,fftfilt的每一列应用筛选器B到信号向量x

输入数据,指定为向量。如果x是一个矩阵,fftfilt过滤器的列。如果Bx如果两个矩阵的列数相同第列B用于过滤第列xfftfilt对实际输入和复杂输入都有效。

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

数字滤波器,指定为数字滤波器对象。使用设计过滤器产生D基于频率响应规范。

GPU阵列,指定为gpuArray对象。gpuArrayb包含过滤系数,和gpuArrayX是输入数据。请参阅在GPU上运行MATLAB函数(并行计算工具箱)有关gpuArray对象。使用fftfilt具有gpuArray对象需要Parallel Computing Toolbox™软件。指GPU支万博1manbetx持情况(并行计算工具箱)获取支持的GPU列表。筛选的万博1manbetx数据,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 大约是对数2.L/N

因此,fftfilt日志时更快2.L少于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));

哪里非规则采样快速傅里叶变换为FFT长度。fftfilt将连续输出部分重叠为n-1点,N是筛选器的长度,并对其求和。

fftfilt选择关键参数L非规则采样快速傅里叶变换以不同的方式,这取决于你是否提供一个FFT长度N用于滤波器和信号。如果未指定N(用于确定FFT长度),fftfilt自动选择以下关键参数:

  • 如果长度(x)大于长度(b),fftfilt选择将块数乘以每个FFT的触发器数最小化的值。

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

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

    这算

    y=ifft(fft(B,nfft)。*fft(X,nfft))

如果你提供一个值N,fftfilt选择一个FFT长度,非规则采样快速傅里叶变换属于2^nextpow2(n)和数据块长度非规则采样快速傅里叶变换-长度(b)+1..如果N少于长度(b),fftfilt设置N长度(b)

参考文献

[1] 奥本海姆、艾伦·V、罗纳德·W·谢弗和约翰·R·巴克。离散时间信号处理第二版。新泽西州上鞍河:普伦蒂斯大厅,1999年。

扩展能力

之前介绍过的R2006a