前言
在复习数字信号处理课程中,有关线性卷积的DFT算法的重叠相加法和重叠保留法根据教材不甚理解,网络上未找到便于手算的例题讲解过程,故在学习之后两种方法分别用两个例题详细过程用于理解,写下此文章用于其他人查找和自己学习。
一、重叠相加法
步骤
1、将长序列
x
[
n
]
x[n]
x[n] 拆分成多个短序列
x
[
n
]
=
∑
k
x
k
[
n
−
k
L
]
x[n]=\sum_{k}x_k[n-kL]
x[n]=k∑xk[n−kL]
x
k
[
n
]
x_k[n]
xk[n]长度为
L
,
L
≪
N
x
L,L\ll N_x
L,L≪Nx
x
k
(
n
)
=
{
x
[
n
+
k
L
]
n
=
0
,
1
,
2
,
.
.
.
,
L
−
1
0
其他
\begin{equation} x_k(n)=\left\{ \begin{aligned} &x[n+kL]\quad &n=0,1,2,...,L-1\\ &0\quad &其他\\ \end{aligned} \right . \nonumber \end{equation}
xk(n)={x[n+kL]0n=0,1,2,...,L−1其他
2、重叠相加
y
[
n
]
=
(
∑
k
x
k
[
n
−
k
L
]
)
⊗
h
[
n
]
=
∑
k
x
k
[
n
−
k
L
]
⊗
h
[
n
]
=
∑
k
y
k
[
n
−
k
L
]
\begin{equation} \begin{split} y[n]&=(\sum_k x_k[n-kL])\otimes h[n]\\ &=\sum_k x_k[n-kL]\otimes h[n]\\ &=\sum_k y_k[n-kL] \end{split} \nonumber \end{equation}
y[n]=(k∑xk[n−kL])⊗h[n]=k∑xk[n−kL]⊗h[n]=k∑yk[n−kL]
例题
例:计算序列
x
[
n
]
x[n]
x[n]与序列
h
[
n
]
h[n]
h[n]的线性卷积和,其中
x
[
n
]
=
{
1
,
2
,
3
,
2
,
1
,
0
,
1
,
2
,
2
,
1
,
1
,
1
}
,
h
[
n
]
=
{
1
,
2
,
1
}
x[n]=\left\{1,2,3,2,1,0,1,2,2,1,1,1 \right\},h[n]=\left\{ 1,2,1 \right\}
x[n]={1,2,3,2,1,0,1,2,2,1,1,1},h[n]={1,2,1}
解:序列分解,用 x [ n ] x[n] x[n]做分解
% Matlab代码
x = [1 2 3 2 1 0 1 2 2 1 1 1];
h = [1 2 1];
x1=[1 2 3 2 0 0 0 0 0 0 0 0] ;
x2=[0 0 0 0 1 0 1 2 0 0 0 0];
x3=[0 0 0 0 0 0 0 0 2 1 1 1];
xh1 = conv(x1, h); % [1 4 8 10 7 2 0 0 0 0 0 0 0 0]
xh2 = conv(x2, h); % [0 0 0 0 1 2 2 4 5 2 0 0 0 0]
xh3 = conv(x3, h); % [0 0 0 0 0 0 0 0 2 5 5 4 3 1]
y=conv(x,h); % [1 4 8 10 8 4 2 4 7 7 5 4 3 1]
分别将分解出的序列与 h [ n ] h[n] h[n]作线性卷积,然后相加得到结果。
二、重叠保留法
步骤
1、将长序列
x
[
n
]
x[n]
x[n]拆分成多个短序列
x
[
n
]
=
∑
k
x
k
[
n
−
k
L
]
x[n]=\sum_k x_k[n-kL]
x[n]=k∑xk[n−kL]
x
k
[
n
]
x_k[n]
xk[n]长度为
L
,
L
≥
M
,
M
为
h
[
n
]
的长度
L,L\ge M,M为h[n]的长度
L,L≥M,M为h[n]的长度
x
k
(
n
)
=
{
x
[
n
+
k
(
L
−
M
+
1
)
]
n
=
0
,
1
,
2
,
.
.
.
,
L
−
1
0
其他
\begin{equation} x_k(n)=\left\{ \begin{aligned} &x[n+k(L-M+1)]\quad &n=0,1,2,...,L-1\\ &0\quad &其他\\ \end{aligned} \right . \nonumber \end{equation}
xk(n)={x[n+k(L−M+1)]0n=0,1,2,...,L−1其他
2、重叠保留圆周卷积
x
k
[
n
]
L
◯
h
[
n
]
x_k[n] \normalsize{\textcircled{\scriptsize{L }}}\normalsize h[n]
xk[n]L◯h[n]的后
L
−
M
+
1
L-M+1
L−M+1点。原因是
L
L
L点序列与
M
M
M点序列圆周卷积后,前
M
−
1
M-1
M−1点发生了混叠。
w
k
[
n
]
=
x
k
[
n
]
L
◯
h
[
n
]
w_k[n]=x_k[n] \normalsize{\textcircled{\scriptsize{L }}}\normalsize h[n]
wk[n]=xk[n]L◯h[n]
y
[
n
]
=
∑
k
y
k
[
n
−
k
L
]
,
y
k
[
n
]
=
{
0
n
=
0
,
1
,
2
,
.
.
.
,
L
−
1
w
k
[
n
]
M
−
1
≤
n
≤
L
−
1
\begin{equation} y[n]=\sum_k y_k[n-kL],y_k[n]=\left\{ \begin{aligned} &0\quad &n=0,1,2,...,L-1\\ &w_k[n]\quad &M-1\le n\le L-1\\ \end{aligned} \right . \nonumber \end{equation}
y[n]=k∑yk[n−kL],yk[n]={0wk[n]n=0,1,2,...,L−1M−1≤n≤L−1
例题
例:计算序列
x
[
n
]
x[n]
x[n]与序列
h
[
n
]
h[n]
h[n]的线性卷积和,其中
x
[
n
]
=
{
1
,
2
,
3
,
2
,
1
,
0
,
1
,
2
,
2
,
1
,
1
,
1
}
,
h
[
n
]
=
{
1
,
2
,
1
}
x[n]=\left\{1,2,3,2,1,0,1,2,2,1,1,1 \right\},h[n]=\left\{ 1,2,1 \right\}
x[n]={1,2,3,2,1,0,1,2,2,1,1,1},h[n]={1,2,1}
解:序列分解(以 x [ n ] x[n] x[n]为例)文章来源:https://www.toymoban.com/news/detail-495961.html
% Matlab代码
x = [1 2 3 2 1 0 1 2 2 1 1 1];
h = [1 2 1]; H = fft(h,6);
x1=[0 0 1 2 3 2];
x2=[3 2 1 0 1 2];
x3=[1 2 2 1 1 1];
x4=[1 1 0 0 0 0];
X1=fft(x1,6); Y1=X1.*H;
X2=fft(x2,6); Y2=X2.*H;
X3=fft(x3,6); Y3=X3.*H;
X4=fft(x4,6); Y4=X4.*H;
y1=ifft(Y1,6);y2=ifft(Y2,6);
y3=ifft(Y3,6);y4=ifft(Y4,6);
即分解成
x
1
[
n
]
=
{
0
,
0
,
1
,
2
,
3
,
2
}
,
x
2
[
n
]
=
{
3
,
2
,
1
,
0
,
1
,
2
}
,
x
3
[
n
]
=
{
1
,
2
,
2
,
1
,
1
,
1
}
,
x
4
[
n
]
=
{
1
,
1
,
0
,
0
,
0
,
0
}
x_1[n]=\left\{0,0,1,2,3,2 \right\},x_2[n]=\left\{3,2,1,0,1,2 \right\},x_3[n]=\left\{1,2,2,1,1,1 \right\},x_4[n]=\left\{1,1,0,0,0,0 \right\}
x1[n]={0,0,1,2,3,2},x2[n]={3,2,1,0,1,2},x3[n]={1,2,2,1,1,1},x4[n]={1,1,0,0,0,0}
如此分解是因为选取
L
=
6
≥
M
L=6\ge M
L=6≥M,前
M
−
1
M-1
M−1即2点发生混叠,保留后4点,于是在初始选取时需要在前面补2个零,弥补混叠后丢失的值。
计算有
x
1
[
n
]
6
◯
h
[
n
]
=
{
7
,
2
,
1
,
4
,
8
,
10
}
x
2
[
n
]
6
◯
h
[
n
]
=
{
8
,
10
,
8
,
4
,
2
,
4
}
x
3
[
n
]
6
◯
h
[
n
]
=
{
4
,
5
,
7
,
7
,
5
,
4
}
x
4
[
n
]
6
◯
h
[
n
]
=
{
1
,
3
,
3
,
1
,
0
,
0
}
x_1[n] \normalsize{\textcircled{\scriptsize{6 }}}\normalsize h[n]=\left\{7,2,1,4,8,10 \right\}\\ x_2[n] \normalsize{\textcircled{\scriptsize{6 }}}\normalsize h[n]=\left\{8,10,8,4,2,4 \right\}\\ x_3[n] \normalsize{\textcircled{\scriptsize{6 }}}\normalsize h[n]=\left\{4,5,7,7,5,4 \right\}\\ x_4[n] \normalsize{\textcircled{\scriptsize{6 }}}\normalsize h[n]=\left\{1,3,3,1,0,0\right\}
x1[n]6◯h[n]={7,2,1,4,8,10}x2[n]6◯h[n]={8,10,8,4,2,4}x3[n]6◯h[n]={4,5,7,7,5,4}x4[n]6◯h[n]={1,3,3,1,0,0}
于是每个结果保留后4位,得到最后结果
x
[
n
]
L
◯
h
[
n
]
=
{
1
,
4
,
8
,
10
,
8
,
4
,
2
,
4
,
7
,
7
,
5
,
4
,
3
,
1
}
x_[n] \normalsize{\textcircled{\scriptsize{L }}}\normalsize h[n]=\left\{1,4,8,10,8,4,2,4,7,7,5,4,3,1 \right\}
x[n]L◯h[n]={1,4,8,10,8,4,2,4,7,7,5,4,3,1}文章来源地址https://www.toymoban.com/news/detail-495961.html
到了这里,关于【线性卷积的DFT算法--重叠相加法和重叠保留法】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!