离散傅里叶变换的主要性质

        离散傅里叶变换是傅里叶变换在时域、频域均离散化的形式,因而它与其它傅里叶变换有

着相似的性质,譬如线性。同时离散傅里叶变换也具有一些与其它傅里叶变换不同的特性,其中

主要的圆周移位性质和圆周卷积性质。

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文件

猜你喜欢

转载自blog.csdn.net/weixin_58351753/article/details/128225061