一、实验目的
1、理解用FFT对周期序列进行频谱分析时所面临的问题并掌握其解决方法。
2、掌握用时域窗函数加权处理的技术。
3、理解用FFT对非周期信号进行频谱分析所面临的问题并掌握其解决方法。
二、实验原理
1、对周期序列├ x ̃[n]进行频谱分析应注意的问题

周期序列├ x ̃[n]是无限长时间序列,如果截断区间刚好就是该序列周期├ x ̃[n]的整数倍,那么进行周期延拓后将还原出原来的周期序列,可以较精确地计算出的该周期序列的频谱。



如果截断区间不是该序列周期的整数倍,在进行周期延拓后,不可能还原出原来的周期序列,由此计算出的频谱与该周期序列的频谱存在误差,而且误差的大小与截断区间的选取直接相关。

如图5−1所示,截断后的序列y[n]的幅度频谱的量值表示为20log|├ X(k)|,以dB (分贝)为单位。
加窗后的序列y[n]=├ x ̃[n]w[n],根据离散时间傅里叶变换的频域卷积定理:

截断后的序列的频谱与原周期序列├ x ̃[n]的频谱之间的误差是由于周期序列├ x ̃[n]与窗函数w[n]时域中相乘,在频域产生二者的频谱卷积形成的。
以矩形窗为例:

矩形窗幅度谱如图5−2所示。除了主瓣内集中了大部分的能量外,两旁的较小峰值处的旁瓣也分散了一部分能量。


通常需要进行频谱分析的信号是周期未知的信号,为了尽量避免频率泄漏对结果的影响,在进行时域截断时,应选取其频谱的旁瓣幅度较小的窗函数,减轻泄漏问题。
2、时域窗函数的应用
作为截断函数,矩形窗在作时间截断时,对所截取区间内的信号不加以任何影响,其它的窗函数都将对所截取区间内的信号作加权处理。除了三角窗、 Hanning窗和Hamming窗外,常用的窗函数还有Parzen窗、Kaiser窗、Chebyshev窗、Poisson窗、Gaushy窗、Gaussian窗和Blackman窗等等。



利用自编函数w = f_window(i,n)用来生成长度为n的5种窗函数:矩形窗、汉宁窗、汉明窗、布莱克曼窗、三角形窗。
function w = f_window(i,n)
% i = window number defined:
% 0 = rectangular
% 1 = Hanning
% 2 = Hamming
% 3 = Blackman
% 4 = Bartlett(三角窗)
% w = 1 by n vector contain values of window
p = (n-1)/2;
k = 0 : n-1;
w = ones(1,n); % 矩形窗
switch (i)
case 1,
w = 0.5 - 0.5*cos(pi*k/p); % Hanning汉宁窗
case 2,
w = 0.54 - 0.46*cos(pi*k/p); % Hamming汉明窗
case 3,
w = 0.42 - 0.5*cos(pi*k/p) + 0.08*cos(2*pi*k/p); % Blackman(布莱科曼)
case 4,
w = 1-abs(k-p)/p; % Bartlett(三角窗)
end
w=w';%转换成列向量
例:用128点的Hanning窗对cos(0.1πn)加窗后,再进行N=128的FFT,画出幅度谱
n=0:127;
N=length(n);
xn=cos(0.1*pi*n);
whn = f_window (1,N);% Hanning汉宁窗
yn=xn.*whn';
YK=fft(yn,N);
magYK=abs(YK);
k=0:N-1;
subplot(311)
stem(n,xn)
grid on
xlabel('n');
ylabel(‘x[n]');
title('cos(0.1\pin) 128点’)
subplot(312)
stem(n,yn)
grid on
xlabel('n');
ylabel(‘y[n]');
title('加128点Hanning窗')
subplot(313)
stem(k,magYK)
grid on
xlabel('k');
ylabel('|Y(k)|');
title('加128点Hanning窗的余弦序列的DFT幅度谱')

对cos(0.1πn)加汉宁窗和加矩形窗比较

采用Hanning窗对正弦函数作非整周期的时域加权截断后的波形和频谱,频谱泄漏已明显减少。
3、对非周期序列进行频谱分析应注意的问题
(1)混叠
一般非周期连续信号在FFT之前要进行时域采样,无限长时间信号还应先截断。

按照Nyquist采样定理,由采样引起的周期延拓,频谱之间不发生混叠的条件是:

由于实际上有限长时间信号 x(t)的频谱 ├ X(f)是频域的无限长函数,采样所得的离散序列的频谱必定产生混叠,减小采样周期 Ts只能减小而不能消除混叠。
对于时间有限函数,经过FFT,也会在频域出现混叠,造成频谱失真,导致频谱分析结果与原信号的实际频谱存在差异,混叠是引起频谱分析误差的一个主要原因,实际工作中只要采样和截断产生的误差在许可的范围内就可以了。

(2)泄漏
在非周期函数截断处理后同样存在频谱泄漏问题,这种误差是由于采样后的序列与窗序列时域相乘在频域造成二者的频谱卷积形成的。

为了尽量避免频谱泄漏对结果的影响,在对非周期函数作时间截断时,除尽量增加截断序列的长度外,也应选取其频谱的旁瓣幅度较小的窗函数,以减轻泄漏问题。

在选取了适当的窗函数后,应当使窗函数的宽度与被处理的序列长度相同,如果作离散傅里叶变换(DFT) 前还需要补零(例如为了作卷积运算或避免栅栏效应),则应将原序列与窗函数相乘后再补零,即补零的样点不用窗函数加权处理。
(3)栅栏效应

例如原来信号采样得到12个样点,在其后面再加上4个零,使序列的总长度为16个样点。这样处理的结果原来信号的采样间隔和采样频率都没有改变。
设采样频率为fs,经补零重构之后,采样频率仍然为fs,原来频域样点间宽度为fs/12,经补零重构之后频域样点间宽度为fs/16。
补零重构之后频域样点密度增加,可能显示出原来没有显露的一些频率位置的频谱。
4、总谐波失真(THD)
当放大器输入为正弦波,放大器的非线性失真表现为输出信号中出现谐波分量,即出现谐波失真,一般用总谐波失真(THD)衡量放大器的非线性失真的程度。



subplot(212)
stem(k,magX_i_k,'filled');
grid on
axis([-1 N 0 5.5])
xlabel('{\itk}','Fontname','Time','Fontsize',12)
ylabel('X_i({\itk})','Fontname','Time','Fontsize',12)
title('Magnitude of N=256 points DFT of x_i[n]')
x=min(xi,0.7*A);
x=max(x,-0.7*A);
xn=x;
Xk=fft(xn)/N;
magXk=abs(Xk);
figure
subplot(211)
plot(1000*t,x)
hold on
stem(1000*n*Ts,xn,'filled');
grid on
axis([0 0.26 -10.5 10.5])
xlabel('Time {\itt} (ms)','Fontname','Time','Fontsize',12)
ylabel('x({\itt})','Fontname','Time','Fontsize',12)
title('失真正弦信号x(t)及采样信号x(nTs)')
subplot(212)
stem(k,magXk,'filled');
grid on
axis([-1 N 0 4.5])
xlabel('{\itk}','Fontname','Time','Fontsize',12)
ylabel('X({\itk})','Fontname','Time','Fontsize',12)
title('Magnitude of N=256 points DFT of x[n]’)
magf1=magXk(2)*2;
Px=sum((magXk(3:128)*2).^2);
magfx=sqrt(Px);
THD1=magfx*100/magf1
P1=(magXk(2)*2).^2;
Px=sum((magXk(3:128)*2).^2);
THD2=Px*100/P1

三、实验内容













采样周期分别为0.05s,0.1s,0.5s采样得到的3个128点序列的128个点FFT的幅度频谱


采样周期为0.05s,分别采样4、8、32个点得到的序列的128个点FFT的幅度频谱





免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删