DFT计算卷积
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2. 重叠保留法(overlap save) 方法:
(1) 将x[k]长序列分段,每段长度为L。
(2) 各段序列xn[k]与 M点短序列h[k]循环卷积。
(3) 从各段循环卷积中提取线性卷积结果。
因yn[k]=xn [k] L h[k] 前M-1个点不是线性卷积的点, 故分段时,每段与其前一段有M-1个点重叠。
利用MATLAB实现分段卷积
% Generate the noise sequence N = 64; d = rand(1,N)-0.5; % Generate the uncorrupted sequence and add noise n = 0:N-1; s= 2*n.*((0.9).^n); x= s+ d; % the length of moving average filter M = 4; % Generate the moving average filter coefficients h = ones(1,M)/M; % Perform the overlap-add filtering operation y = fftfilt(h,x,8);
x2 [0] x [1] 2 x [ M 1] 2 x [ L 1] 2 0 x1[0] x2 [ L M - 2]
x1[0] x1[1] x1[ M - 2] x1[ M - 1] x1[0] x1[ M - 3] x1[ M - 2] x1[0] x1[1]
x3[k]={6 ,7 , 8, 9, 10}
x5[k]={12,13, 14, 0, 0}
x1[0] x [1] 1 x1[ M - 1]
0 x1[0] x1[ M - 2] x1[ M - 1]
0 0 x1[0] x1[1] x1[2] x1[ M - 1]
0 0 0 x1[0] x1[1] x1[ M - 2] x1[ M - 1]
y1 [k - L]
k
4
1 0 1 2
y[k ]
2
3
7
n
9
k
y
3
4
[k - nL]
1
2
0 1 2 3
k
例: 已知序列x[k]=k+2,0k12, h[k]={1,2,1}试利用重
叠相加法计算线性卷积, 取L=5 。 解: 重叠相加法
x1[k]={2, 3, 4, 5, 6}
x2[k]={7, 8, 9 ,10, 11} x3[k]={12, 13, 14, 0, 0} y1[k]= x1[k]*h[k]= {2,7,12,16,20,17,6} y2[k]= x2[k]*h[k]= {7,22,32,36,40,32,11} y3[k]= x3[k]*h[k]= {12,37,52,41,14,0,0}
x0 [k ]
将长序列x[k] 分为若干段长度为L的序列
x1[k ]
x 2 [k ]
x3 [ k ]
k
L
2L
3L
定义
x[ k nL ] xn [ k ] 0
0 k L -1 其他
xn[k - nL] x[k ] DFT 计算卷积
n0
长序列和短序列的线性卷积
1. 重叠相加法(overlap add) 计算: yn [k ] xn [k ] h[k ]
至少要做 L=N+M-1点的循环卷积
DFT计算卷积
利用DFT计算序列线性卷积的步骤
若x[k]的长度为N,h[k]的长度为M,则 LN+M-1点循环卷积等于x[k] 与h[k]的线性卷积。
x[ k ]
补L-N零
x 1 [ k]
L点DFT
y[ k ]
L点IDFT
h[ k ]
补L-M零
h1[k]
L点DFT
数字信号处理
(Digital Signal Processing)
信号与系统系列课程组 国家电工电子教学基地
离散傅里叶变换(DFT)
问题的提出
有限长序列的傅里叶分析
离散傅里叶变换的性质 利用DFT计算线性卷积 利用DFT分析信号的频谱
利用DFT计算序列线性卷积
利用DFT计算序列线性卷积的步骤 长序列和短序列的线性卷积
(M=3)
y[k]=x[k]*h[k]={2, 7, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 41, 14}
利用MATLAB实现分段卷积
fftfilt(h,x,n)
h: FIR filter x: input sequence
n 为DFT点数,一般取2的整数次幂
长序列和短序列的线性卷积
2. 重叠保留法(overlap save)
x [ k -( M -1)]
x 1[k] x 0[k]
M-1 L- 1 L- ( M-1) 2L-M k
第一段前需补M-1个零
源自文库
长序列和短序列的线性卷积
2. 重叠保留法(overlap save)
y0 [k]
记:yn[k] =xn [k] L h[k]
0
M -1
L -1
k
y1 [k] k
0
M -1
L -1
例: 已知序列x[k]=k+2,0k12, h[k]={1,2,1}试利用重
叠保留法计算线性卷积, 取L=5 。 解: 重叠保留法
x1[k]={0, 0, 2, 3, 4} x2[k]={3, 4, 5, 6 ,7}
x4[k]={9, 10 , 11, 12,13} y1[k]= x1[k] ⑤h[k]= {11, 4, 2, 7, 12} y2[k]= x2[k] ⑤ h[k]= {23, 17, 16, 20, 24} y3[k]= x3[k] ⑤ h[k]= {35, 29, 28, 32, 36} y4[k]= x4[k] ⑤ h[k]= {47, 41, 40, 44, 48} y5[k]= x5[k] ⑤ h[k]= {12, 37, 52, 41, 14} y[k]={2, 7, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 41, 14}
M-1
n
L-1
n
x1[(-n) L ]RL [n]
x1[(1 - n) L ]RL [n]
L-M1
L -1
n
L-M2
L -1
n
x1[(M - 1 - n) L ]RL [n]
M-1
n
0 k M-2不是线性卷积 的结果,即前(M-1)个点 与线性卷积不一样。
对比图
x1[0] x [1] 1 x1[ M - 1] x1[0] x1[ M - 2] x1[ M - 1] x1[0] x1[1] x1[2] x1[ M - 1]
直接计算与由DFT间接计算结果比较
Result of Linear Convolution
3 x 10-15 Error Magnitude
6
Amplitude
Amplitude
2
4 2 0 0
1
1
2 3 4 Time index k
5
6
0 0
1
2
3 4 Time index k
5
6
长序列和短序列的线性卷积
x[k]○ N h[k]= x[k]*h[k]
DFT计算卷积
例:利用MATLAB由DFT计算x[k]* h[k]。 x[k]={1, 2, 0, 1}, h[k]={2, 2, 1, 1}
% Calculate Linear Convolution by DFT x = [1 2 0 1]; h = [2 2 1 1]; % determine the length for zero padding L = length(x)+length(h)-1; % Compute the DFTs by zero-padding XE = fft(x,L); HE = fft(h,L); % Determine the IDFT of the product y1 = ifft(XE.*HE);
4点滑动平均系统去噪结果
8 7 6 5 4 3 2 1 0 -1
0
10
20
30
40
50
60
70
问题讨论
若x1[k]为 M 点序列, x2[k]为L 点序列 , L>M
x1[k ]
x2 [ k ]
M-1
k
L -1
k
x1[k] L x2[k]中哪些点不是线性卷积的点?
x1[n ]
x2 [ n ]
x1[ M - 1] 0 0 x1[0] x1[ M - 3] x1[ M - 2]
x1[ M - 2] x1[ M - 1] 0
x1[ M - 4] x1[ M - 3]
x1[1] x2 [0] x1[2] x2 [1] 0 x2 [ M - 1] 0 x2 [ M ] 0 x2 [ M 1] 0 x2 [ L - 2] x1[0] x2 [ L - 1]
x[k ] h[k ] xn [k - nL] h[k ] y n [k - nL]
n 0
n 0
y0[k]的非零范围
0 k LM -2
y1[k-L]的非零范围
重叠的点数
L k 2L M - 2 L k LM -2
L+M-2-L+1=M-1
结论
若x1[k]为 M 点序列, x2[k]为L 点序列 , L>M 则L点循环卷积 x1[k] L x2[k]
k=0 ~M-2, 前M-1个点不是线性卷积的点 k= M-1 ~ L-1 , L-M+1个点与线性卷积的点对应 线性卷积 L ~ L+M-2 后M -1点没有计算
长序列和短序列的线性卷积
序列 y0[k], y1[k]的重叠部分
依次将相邻两段的M-1个重叠点相加,即得到最 终的线性卷积结果。
DFT计算卷积
重叠相加法分段卷积举例
h[k ] 1
M=4
0 1 2 M-1
x[k ] 1
k
L=7
0 1 2
L-1
k
重叠相加法分段卷积举例(L=7,M=4)
y 0 [k ]
4 2 3 6 9
1
0 1 2 3
DFT计算卷积
两个有限长序列的线性卷积
问题提出: DFT{x1[k] 实际需要:
N
x2[k]}=X1[m]X2[m]
LTI系统响应
y[k]=x [k]h[k]
可否利用DFT计算线性卷积?
DFT计算卷积
两个有限长序列的线性卷积
设 x [k] 的非零范围是 g[k] 的非零范围是 y[k]=x [k]h[k]非零范围 序列y[k]的长度为 0 k N-1 0 k M-1 0 k N+M- 2 L=N+M-1
直接利用DFT计算的缺点: (1) 信号要全部输入后才能进行计算,延迟太多 (2) 内存要求大 (3) 算法效率不高 解决问题方法:采用分段卷积 分段卷积可采用重叠相加法和重叠保留法
DFT计算卷积
长序列和短序列的线性卷积
1. 重叠相加法(overlap add)(短序列h[k] 的长度为M)
x[k ]
(1) 将x[k]长序列分段,每段长度为L。
(2) 各段序列xn[k]与 M点短序列h[k]循环卷积。
(3) 从各段循环卷积中提取线性卷积结果。
因yn[k]=xn [k] L h[k] 前M-1个点不是线性卷积的点, 故分段时,每段与其前一段有M-1个点重叠。
利用MATLAB实现分段卷积
% Generate the noise sequence N = 64; d = rand(1,N)-0.5; % Generate the uncorrupted sequence and add noise n = 0:N-1; s= 2*n.*((0.9).^n); x= s+ d; % the length of moving average filter M = 4; % Generate the moving average filter coefficients h = ones(1,M)/M; % Perform the overlap-add filtering operation y = fftfilt(h,x,8);
x2 [0] x [1] 2 x [ M 1] 2 x [ L 1] 2 0 x1[0] x2 [ L M - 2]
x1[0] x1[1] x1[ M - 2] x1[ M - 1] x1[0] x1[ M - 3] x1[ M - 2] x1[0] x1[1]
x3[k]={6 ,7 , 8, 9, 10}
x5[k]={12,13, 14, 0, 0}
x1[0] x [1] 1 x1[ M - 1]
0 x1[0] x1[ M - 2] x1[ M - 1]
0 0 x1[0] x1[1] x1[2] x1[ M - 1]
0 0 0 x1[0] x1[1] x1[ M - 2] x1[ M - 1]
y1 [k - L]
k
4
1 0 1 2
y[k ]
2
3
7
n
9
k
y
3
4
[k - nL]
1
2
0 1 2 3
k
例: 已知序列x[k]=k+2,0k12, h[k]={1,2,1}试利用重
叠相加法计算线性卷积, 取L=5 。 解: 重叠相加法
x1[k]={2, 3, 4, 5, 6}
x2[k]={7, 8, 9 ,10, 11} x3[k]={12, 13, 14, 0, 0} y1[k]= x1[k]*h[k]= {2,7,12,16,20,17,6} y2[k]= x2[k]*h[k]= {7,22,32,36,40,32,11} y3[k]= x3[k]*h[k]= {12,37,52,41,14,0,0}
x0 [k ]
将长序列x[k] 分为若干段长度为L的序列
x1[k ]
x 2 [k ]
x3 [ k ]
k
L
2L
3L
定义
x[ k nL ] xn [ k ] 0
0 k L -1 其他
xn[k - nL] x[k ] DFT 计算卷积
n0
长序列和短序列的线性卷积
1. 重叠相加法(overlap add) 计算: yn [k ] xn [k ] h[k ]
至少要做 L=N+M-1点的循环卷积
DFT计算卷积
利用DFT计算序列线性卷积的步骤
若x[k]的长度为N,h[k]的长度为M,则 LN+M-1点循环卷积等于x[k] 与h[k]的线性卷积。
x[ k ]
补L-N零
x 1 [ k]
L点DFT
y[ k ]
L点IDFT
h[ k ]
补L-M零
h1[k]
L点DFT
数字信号处理
(Digital Signal Processing)
信号与系统系列课程组 国家电工电子教学基地
离散傅里叶变换(DFT)
问题的提出
有限长序列的傅里叶分析
离散傅里叶变换的性质 利用DFT计算线性卷积 利用DFT分析信号的频谱
利用DFT计算序列线性卷积
利用DFT计算序列线性卷积的步骤 长序列和短序列的线性卷积
(M=3)
y[k]=x[k]*h[k]={2, 7, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 41, 14}
利用MATLAB实现分段卷积
fftfilt(h,x,n)
h: FIR filter x: input sequence
n 为DFT点数,一般取2的整数次幂
长序列和短序列的线性卷积
2. 重叠保留法(overlap save)
x [ k -( M -1)]
x 1[k] x 0[k]
M-1 L- 1 L- ( M-1) 2L-M k
第一段前需补M-1个零
源自文库
长序列和短序列的线性卷积
2. 重叠保留法(overlap save)
y0 [k]
记:yn[k] =xn [k] L h[k]
0
M -1
L -1
k
y1 [k] k
0
M -1
L -1
例: 已知序列x[k]=k+2,0k12, h[k]={1,2,1}试利用重
叠保留法计算线性卷积, 取L=5 。 解: 重叠保留法
x1[k]={0, 0, 2, 3, 4} x2[k]={3, 4, 5, 6 ,7}
x4[k]={9, 10 , 11, 12,13} y1[k]= x1[k] ⑤h[k]= {11, 4, 2, 7, 12} y2[k]= x2[k] ⑤ h[k]= {23, 17, 16, 20, 24} y3[k]= x3[k] ⑤ h[k]= {35, 29, 28, 32, 36} y4[k]= x4[k] ⑤ h[k]= {47, 41, 40, 44, 48} y5[k]= x5[k] ⑤ h[k]= {12, 37, 52, 41, 14} y[k]={2, 7, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 41, 14}
M-1
n
L-1
n
x1[(-n) L ]RL [n]
x1[(1 - n) L ]RL [n]
L-M1
L -1
n
L-M2
L -1
n
x1[(M - 1 - n) L ]RL [n]
M-1
n
0 k M-2不是线性卷积 的结果,即前(M-1)个点 与线性卷积不一样。
对比图
x1[0] x [1] 1 x1[ M - 1] x1[0] x1[ M - 2] x1[ M - 1] x1[0] x1[1] x1[2] x1[ M - 1]
直接计算与由DFT间接计算结果比较
Result of Linear Convolution
3 x 10-15 Error Magnitude
6
Amplitude
Amplitude
2
4 2 0 0
1
1
2 3 4 Time index k
5
6
0 0
1
2
3 4 Time index k
5
6
长序列和短序列的线性卷积
x[k]○ N h[k]= x[k]*h[k]
DFT计算卷积
例:利用MATLAB由DFT计算x[k]* h[k]。 x[k]={1, 2, 0, 1}, h[k]={2, 2, 1, 1}
% Calculate Linear Convolution by DFT x = [1 2 0 1]; h = [2 2 1 1]; % determine the length for zero padding L = length(x)+length(h)-1; % Compute the DFTs by zero-padding XE = fft(x,L); HE = fft(h,L); % Determine the IDFT of the product y1 = ifft(XE.*HE);
4点滑动平均系统去噪结果
8 7 6 5 4 3 2 1 0 -1
0
10
20
30
40
50
60
70
问题讨论
若x1[k]为 M 点序列, x2[k]为L 点序列 , L>M
x1[k ]
x2 [ k ]
M-1
k
L -1
k
x1[k] L x2[k]中哪些点不是线性卷积的点?
x1[n ]
x2 [ n ]
x1[ M - 1] 0 0 x1[0] x1[ M - 3] x1[ M - 2]
x1[ M - 2] x1[ M - 1] 0
x1[ M - 4] x1[ M - 3]
x1[1] x2 [0] x1[2] x2 [1] 0 x2 [ M - 1] 0 x2 [ M ] 0 x2 [ M 1] 0 x2 [ L - 2] x1[0] x2 [ L - 1]
x[k ] h[k ] xn [k - nL] h[k ] y n [k - nL]
n 0
n 0
y0[k]的非零范围
0 k LM -2
y1[k-L]的非零范围
重叠的点数
L k 2L M - 2 L k LM -2
L+M-2-L+1=M-1
结论
若x1[k]为 M 点序列, x2[k]为L 点序列 , L>M 则L点循环卷积 x1[k] L x2[k]
k=0 ~M-2, 前M-1个点不是线性卷积的点 k= M-1 ~ L-1 , L-M+1个点与线性卷积的点对应 线性卷积 L ~ L+M-2 后M -1点没有计算
长序列和短序列的线性卷积
序列 y0[k], y1[k]的重叠部分
依次将相邻两段的M-1个重叠点相加,即得到最 终的线性卷积结果。
DFT计算卷积
重叠相加法分段卷积举例
h[k ] 1
M=4
0 1 2 M-1
x[k ] 1
k
L=7
0 1 2
L-1
k
重叠相加法分段卷积举例(L=7,M=4)
y 0 [k ]
4 2 3 6 9
1
0 1 2 3
DFT计算卷积
两个有限长序列的线性卷积
问题提出: DFT{x1[k] 实际需要:
N
x2[k]}=X1[m]X2[m]
LTI系统响应
y[k]=x [k]h[k]
可否利用DFT计算线性卷积?
DFT计算卷积
两个有限长序列的线性卷积
设 x [k] 的非零范围是 g[k] 的非零范围是 y[k]=x [k]h[k]非零范围 序列y[k]的长度为 0 k N-1 0 k M-1 0 k N+M- 2 L=N+M-1
直接利用DFT计算的缺点: (1) 信号要全部输入后才能进行计算,延迟太多 (2) 内存要求大 (3) 算法效率不高 解决问题方法:采用分段卷积 分段卷积可采用重叠相加法和重叠保留法
DFT计算卷积
长序列和短序列的线性卷积
1. 重叠相加法(overlap add)(短序列h[k] 的长度为M)
x[k ]