离散傅里叶变换是傅里叶变换在时域、频域均离散化的形式,因而它与其它傅里叶变换有
着相似的性质,譬如线性。同时离散傅里叶变换也具有一些与其它傅里叶变换不同的特性,其中
主要的圆周移位性质和圆周卷积性质。
1、离散傅里叶变换主要性质
① 圆周时移性质:若 G[k] 表示长度为 N 的序列 g[n] 的 N 点离散傅里叶变换,则圆周时移序列
的 N 点离散傅里叶变换为
,其中
。
② 圆周频移性质:若 G[k] 表示长度为 N 的序列 g[n] 的 N 点离散傅里叶变换,则序列
的 N 点离散傅里叶变换为
。
③ 圆周卷积性质:若 G[k] 和 H[k] 表示长度为 N 的序列 g[n] 和 h[n] 的 N 点离散傅里叶变换,则圆周卷积序列 g[n]⨂h[n] 的 N 点离散傅里叶变换为 G[k]*H[k]。
④ 帕萨瓦尔定理:即信号的能量在频域和时域中是相等的若 G[k] 表示长度长度为 N 的序列 g[n] 的 N 点离散傅里叶变换,
。
2、MATLAB实验分析
① 圆周移位的概念:
% Illustration of Circular Shift of a Sequence
clear;clc;close all
M = 6;
a = [0 1 2 3 4 5 6 7 8 9];
b = cirshift(a,M); % 左移 M 位
L = length(a)-1;
n = 0:L;
subplot(2,1,1);
stem(n,a);axis([0,L,min(a),max(a)]);
title('Original Sequence');
xlabel('time index n');
ylabel('a[n]');
subplot(2,1,2);
stem(n,b);axis([0,L,min(a),max(a)]);
title(['Sequence Obtained by Circularly Shifting by ',num2str(M),' Samples']);
xlabel('time index n');
ylabel('b[n]');
② 圆周时移的性质
% 离散傅里叶变换的性质——圆周时移性质
% Circular Time-Shifting Property of DFT
clear;clc;close all
x = [0 2 4 6 8 10 12 14 16];
N = length(x)-1;
n = 0:N;
y = cirshift(x,5);
XF = fft(x);
YF = fft(y);
subplot(2,2,1);
stem(n,abs(XF));grid;
title('Magnitude of DFT of Original Sequence');
xlabel('Frequency index k');
ylabel('|X[k]|');
subplot(2,2,2);
stem(n,abs(YF));grid;
title('Magnitude of DFT of Circularly Shifted Sequence');
xlabel('Frequency index k');
ylabel('|Y[k]|');
subplot(2,2,3);
stem(n,angle(XF));grid;
% theta = angle(z) 为复数数组 z 的每个元素返回区间 [-π,π] 中的相位角。
% theta 中的角度表示为 z = abs(z).*exp(i*theta)
title('Phase of DFT of Original Sequence');
xlabel('Frequency index k');
ylabel('arg(X[k])');
subplot(2,2,4);
stem(n,angle(YF));grid;
title('Phase of DFT of Circularly Shifted Sequence');
xlabel('Frequency index k');
ylabel('arg(Y[k])');
③ 圆周卷积的性质
% 离散傅里叶变换的性质——圆周卷积性质
% Circular Convolution Property of DFT
clear;clc;close all
g1 = [1 2 3 4 5 6];
g2 = [1 -2 3 3 -2 1];
ycir = circonv(g1,g2);
disp('Result of circular convolution = ');
disp(ycir)
G1 = fft(g1);
G2 = fft(g2);
yc = ifft(G1.*G2);
disp('Result of IDFT of the DFT products = ');
disp(yc)
运行结果:
Result of circular convolution = 12 28 14 0 16 14
Result of IDFT of the DFT products = 12 28 14 0 16 14
④ 帕萨瓦尔定理
% 离散傅里叶变换的性质——帕塞瓦尔定理
% 信号的能量在时域和频域相等
% 离散形式 ∑u(k)² = 1/N( ∑U(k)U*(k) )
% Parseval's Relation
clear;clc;close all
x = [(1:128) (128:-1:1)];
XF = fft(x);
a = sum(x.*x)
b = round(sum(abs(XF).^2)/256) % 用于舍入到最接近的整数
% a代表着时域能量;b代表着频域能量
⑤ 利用圆周卷积计算线性卷积——时域的方法
将两个序列的长度分别加0补充到两个序列长度之和时,线性卷积等于圆周卷积的结果。补零的个数=另一个序列的长度。
% 利用圆周卷积计算线性卷积——时域的方法
% Linear Convolution via Circular Convolution
clear;clc;close all
g1 = [1 2 3 4 5];
g2 = [2 2 0 1 1];
% 使序列长度为 g1 + g2
g1e = [g1 zeros(1,length(g2)-1)];
g2e = [g2 zeros(1,length(g1)-1)];
ylin = circonv(g1e,g2e);
disp('Linear convolution via circular convolution = ');
disp(ylin);
y = conv(g1, g2);
disp('Direct linear convolution = ');
disp(y)
运行结果:
ylin = [2 6 10 15 21 15 7 9 5]
y = [2 6 10 15 21 15 7 9 5]
⑥ 利用圆周卷积计算线性卷积——基于DFT的方法
% 用DFT计算两个序列的线性卷积
% Linear Convolution via Circular Convolution
clear;clc;close all
g1 = [1 2 3 4 5];
g2 = [2 2 0 1 1];
g1e = [g1 zeros(1,length(g2)-1)];
g2e = [g2 zeros(1,length(g1)-1)];
G1 = dft(g1e,length(g1e));
G2 = dft(g2e,length(g2e));
G = G1.*G2;
ylin = idft(G,length(g1e));
disp('Linear convolution via circular convolution based on DFT= ');
disp(ylin);
y = conv(g1, g2);
disp('Direct linear convolution = ');
disp(y)
代码中 dft 可用fft代替,也可以在上一篇 离散傅里叶变换与应用 中复制 dft 函数的.m文件