补零的在很多时候都能用到,然而在不一样的位置补零产生的影响是不一样的。
补零主要有前面补零,后面补零和中间补零。
我们设原序列为x(n),前面补零后的序列为xq(n) 后面补零后的序列为xh(n) 中间补零后的序列为xz(n) ;
四个序列的DTFT分别为X(jw),XQ(jw),XH(jw),XZ(jw) ;
四个序列的DFT分别为X(K),XQ(k),XH(k),XZ(k)。
(1)后面补零:这是就简单的情况,由离散时间傅里叶变换公式,可以知道前面补零和不补零产生的频谱是一样的。即X(jw)=XH(jw),又根据DFT是对离散时间傅里叶变换频谱上的采样,即X(k)=X(jw)在w=2π/N*k,
得:X(k)和XH(k)的差别就是XH(k)相对于X(k)多采样了几个点,
原因是X(K)是X(jw)在w=2π/N*k的采样值,而XH(k)是XH(jw){也就是X(jw)}
在w=2π/M*k(M>N)的采样值。
(2)前面补零:关于此时DTFT,XQ(jw)=X(jw)*e^(-jwM)(M表示补零的个数),就是XQ(jw)和X(jw)幅值是一样的,
区别在于,有相位的偏移。结合DFT是DTFT频域上的采样(X(k)=X(jw)在w=2π/N*k)
XQ(k),X(k)幅值上也是一样的,但相位有偏移。
(3)中间补零:此时的DTFT,XZ(jwL)=X(jw)(L表示相邻中间插入0的个数),我们知道XZ(jw)是以2π为周期的,
所以看出XZ(jw)是以2π/Lw为周期的。同理,DFT时XZ(k)=X(Lk),相当于X3(k)对X(k)采样,
采样间隔为L+1。即不论幅值还是相位XZ(k)都是X(Lk)的采样。所以在相同区域中,XZ(k)的
周期数是X(k)的L+1倍。
下面是用matlab进行验证:
clear all
close all
clc
%总共补20个零
n=0:9;
x=cos(0.32*pi*n)+cos(0.36*pi*n);
y=fft(x,10);
subplot(211)
stem(0:9,abs(y));
xlabel('k');
ylabel('幅值')
title('原始序列');
subplot(212)
xw=angle(y)*180/pi;
stem(0:9,xw);
xlabel('k');
ylabel('相位')
title('原始序列');
figure
%% 后面补零
x1=[x zeros(1,20)];
y1=fft(x1,30);
subplot(321)
stem(0:29,abs(y1)); %后面补零,幅值
xlabel('k');
ylabel('幅值')
title('后面补零');
subplot(322)
xw1=angle(y1)*180/pi;
stem(0:29,xw1); %后面补零,相位
xlabel('k');
ylabel('相位')
title('后面补零');
%% 前面补零
x2=[zeros(1,20) x];
y2=fft(x2,30);
subplot(323)
stem(0:29,abs(y2)); %前面补零,幅值
xlabel('k');
ylabel('幅值')
title('前面补零');
subplot(324)
xw2=angle(y2)*180/pi;
stem(0:29,xw2); %前面补零,相位
xlabel('k');
ylabel('相位')
title('前面补零');
%% 中间补零
x3=zeros(1,30);
x3(3*n+1)=x(n+1);
y3=fft(x3,30);
subplot(325)
stem(0:29,abs(y3)); %中间补零,幅值
axis([0 30 0 15])
xlabel('k');
ylabel('幅值')
title('中间补零');
subplot(326)
xw3=angle(y3)*180/pi;
stem(0:29,xw3); %中间补零,相位
xlabel('k');
ylabel('相位')
title('中间补零');
(1)从图中可以明显看到,前面补零,后面补零的幅值是一样的,相位是有偏移性(主要性状没变);而且和原始序列相比,相当于多采样了几个点。
(2)中间补零的话,也可看出,幅值和相位均是后面补零的采样值(每个3个,因为L=2)。并且周期数也是它们的三倍。