MATLAB卷积和快速傅里叶变换

MATLAB卷积和快速傅里叶变换

1. 卷积

卷积和解卷是信号与系统中常用的数学工具。函数conv和deconv分别为卷积和解卷函数,同时也是多项式乘法和除法(2.4.2小节)函数。

§ conv:计算向量的卷积。

语法:

conv(x,y)

如果x是输入信号,y是线性系统的脉冲过渡函数,则x和y的卷积为系统的输出信号。

§ conv2:计算二维卷积。

§ deconv:解卷积运算。

语法:

[q,r]=deconv(x,y)

解卷积和卷积的关系是:x=conv(y,q)+r。

2. 快速傅立叶变换

§ fft:一维快速傅立叶变换。

语法:

X=fft(x,N) %对离散序列进行离散傅立叶变换

说明:x可以是向量、矩阵和多维数组;N为输入变量x的序列长度,可省略,如果X的长度小于N,则会自动补零;如果X的长度大于N,则会自动截断;当N取2的整数幂时,傅立叶变换的计算速度最快。通常取大于又最靠近x长度的幂次。

一般情况下,fft求出的函数为复数,可用abs及angle分别求其幅值和相位。

§ ifft:一维快速傅立叶逆变换。

语法:

X=ifft(x,N) %对离散序列进行离散傅立叶逆变换

【例2.27】 利用傅立叶变换和卷积公式求两个离散序列的卷积。

已知:

A=ones(1,10);

A(1)=0

A =

0 1 1 1 1 1 1 1 1 1

B=ones(1,9);

B([1 2 3])=0

B =

0 0 0 1 1 1 1 1 1

C=conv(A,B) %计算卷积

C =

Columns 1 through 13

0 0 0 0 1 2 3 4 5 6 6 6 6

Columns 14 through 18

5 4 3 2 1

N=32; %序列长度为32

AF=fft(A,N); %傅立叶变换

BF=fft(B,N);

CF=AF.*BF;

CC=real(ifft(CF)); %过滤掉虚部

程序分析:可以看到直接计算的卷积结果C和用傅立叶变换求卷积的CC结果相同,如图2.10所示。其中序列长度N的取值应为2的整数幂,必须不小于length(A)+length(B)-1。

发布于 2022-04-24 19:27

文章被以下专栏收录