实验目的
1、掌握实序列的DFT共轭对称性的特点;
2、学习应用实序列DFT的共轭对称性构建频域序列以保证时域序列为实数的方法;
实验原理
1.DFT的共轭对称性
其中:
2.有限长实序列的DFT的共轭对称性
设为长度为N的有限长实序列,则
是圆周共轭对称序列:
。此对称性又可表示为:
。
实验内容
1、试利用 DFT 的共轭对称性,设计两种高效算法,使得计算一个N 点DFT 来得到两个实序列的 N 点 DFT。设:
(1)算法一:令,计算其16点离散傅里叶变换(提示:取 N=16时,
。
由分别求出
和
,并通过
和
求IDFT的方法验证得出的结果是否正确。
clc,clear,close all
N=16;
n=0:1:N-1;
x1=cos(pi/4*n);
x2=sin(pi/8*n);
xn=x1+x2;
Xk=fft(xn,16);
X1=real(Xk);
X2=imag(Xk);
x11=ifft(X1,16);
x22=ifft(1i*X2,16);
subplot(611)
stem(n,X1)
xlabel('k');
ylabel('real(X1)');
subplot(612)
stem(n,X2)
xlabel('k');
ylabel('real(X2)');
subplot(613)
stem(n,x1);
xlabel('n');
ylabel('x1');
subplot(614)
stem(n,x11);
xlabel('n');
ylabel('x1恢复');
subplot(615)
stem(n,x2);
xlabel('n');
ylabel('x2');
subplot(616)
stem(n,x22);
xlabel('n');
ylabel('x2恢复');
实验结论 1-1:
、
与
的关系?
答:
(2)算法二:令,重复(1)。
clc,clear,close all
N=16;
n=0:1:N-1;
k=0:1:N-1;
x1=cos(pi/4*n);
x2=sin(pi/8*n);
xn=x1+1i*x2;
Xk=fft(xn,16);
Xkx=conj(Xk);%取共轭
X1=1/2*(Xk+[Xkx(1),fliplr(Xkx(2:16))]);
X2=1/2*(Xk-[Xkx(1),fliplr(Xkx(2:16))]);
x11=ifft(X1,16);
x22=ifft(X2,16)*(-1i);
subplot(611)
stem(n,real(X1))
xlabel('k');
ylabel('real(X1)');
subplot(612)
stem(n,real(X2))
xlabel('k');
ylabel('real(X2)');
subplot(613)
stem(n,x1);
xlabel('n');
ylabel('x1');
subplot(614)
stem(n,x11);
xlabel('n');
ylabel('x1恢复');
subplot(615)
stem(n,x2);
xlabel('n');
ylabel('x2');
subplot(616)
stem(n,x22);
xlabel('n');
ylabel('x2恢复');
实验结论 1-2:
、
与
的关系?
答:
2.有限长实序列的DFT的共轭对称性
由有限长实序列的DFT的共轭对称性可知,频域成共轭对称的序列作IDFT
后为实序列,而实数的发送可以大大简化发送设备。OFDM 正是利用这一特性来保证发往信道的序列为实数序列的。
按要求编程完成以下内容:
设 XK_in 为一频域复数序列,XK_in=[1+j,-3-j,-3+3*j,-1-3*j];
试利用实序列的 DFT 的共轭对称性公式,将频域序列
XK_in 扩展成共轭对称形式Xk,以保证其对应的时域序列xn =ifft(Xk,16)为实数序列。
(1)求频域序列Xk;并给出Xk的实部与虚部图;
clc,clear,close all
format compact
N=16;
n=0:1:N-1;
k=0:1:7;
XK_in=[1+1i,-3-1i,-3+3*1i,-1-3*1i];
XKf=conj(fliplr(XK_in));
Xk=[0,XK_in,0,0,0,0,0,0,0,XKf];
subplot(211)
stem(n,real(Xk));
xlabel('k');
ylabel('real(Xk)');
subplot(212)
stem(n,imag(Xk));
xlabel('k');
ylabel('imag(Xk)');
实验结论 2-1:说明Xk的实部与虚部各有何特点;
答:实部关于N/2偶对称,虚部关于N/2奇对称。
(2)求xn =ifft(Xk,16);
clc,clear,close all
format compact
N=16;
n=0:1:N-1;
k=0:1:7;
XK_in=[1+1i,-3-1i,-3+3*1i,-1-3*1i];
XKf=conj(fliplr(XK_in));
Xk=[0,XK_in,0,0,0,0,0,0,0,XKf];
xn =ifft(Xk,16)
subplot(211)
stem(n,real(xn));
xlabel('n');
ylabel('real(xn)');
subplot(212)
stem(n,imag(xn));
xlabel('n');
ylabel('imag(xn)');
实验结论 2-2:说明xn是否为实数序列,可以用xn的实部与虚部图来说明。
答:由上图可知,xn虚部恒为0,为实数序列。
实验思考
1.对序列x(n),如何通过计算N/2点DFT而得到N点DFT?
答:
(1)对于序列x(n),可由基2FFT算法,对x(n)进行奇偶序列划分来求N/2点DFT,从而求出N点DFT。
(2)特别的,若x(n)为实序列,则由,当N=偶数时,只需计算X(k)的前面N/2+1点,而N=奇数时,只需计算X(k)的前面(N+1)/2点,从而计算出N点DFT。