摘自:严普强,乔陶鹏,邓焱等.动态测试信号处理中时-频域变换算法的讨论[J].振动、测试与诊断,2003,02:44—48+69—70.
(1)
(2)
1、在计算单频信号的DFT时,需要变换后除以序列长度,然后交流成分乘以2才能变换为幅度值。
2、两种方法的对比:
方法
(1)
在对x(n)补零后,相当于DFT对DTFT的采样变密,但补零后序列的DTFT没有变(因为x(n)是截断后的离散采样信号,在x(n)之外补零对其DTFT的计算没有影响),根据Parseval定理,所以相应频率点下的DFT幅值不变,此时曲线更加接近于DTFT。而方法
(2)
补零后,随着采样点数N的增加,计算出的幅度值成反比减小。
方法
(1)
在采样率上升时,同一采样时间内的采样点数增加,其时域总能量增加,故信号x(n)的DTFT的幅度必然增加,DFT的幅度也相应增加,如果x(n)是周期函数且整数倍采样时,幅度会成比例增加。但方法
(2)
由于N的归一化作用,同一采样时间下的DFT幅值是基本相同的。
下面附上自己编写的.m文件,大家可以根据程序自己修改采样频率和采样点数,对上述文字进行体会。指数信号采样时间的增加相当于补零,因为其时域幅度已经接近0。
%DFT_WHY_N.m
%这个例子旨在说明单频实信号和宽频实信号在DFT运算过程中,时域变换到频域时是否要除以采样点数,请注意,如果不是整数倍关系的采样,幅度谱会存在泄露
clc;
clear;
close all;
%% 定义计算参数
F0=16;%信号频率
N_sample=1024;%总采样点数
Fs=512;%采样频率
f_index=(0:N_sample/2-1)/N_sample*Fs;%计算FFT之后的频率标注
n=0:N_sample-1;%采样序号
t=n*1/Fs;%时间标度
A=1;%信号幅度
%% 时域信号x计算DFT
x=A*sin(2*pi*F0*t);
x_FFT1=abs(fft(x,N_sample));
x_FFT2=abs(fft(x,N_sample))./N_sample*2;
x_FFT2(1)=x_FFT2(1)/2;
%% 时域信号y计算DFT
y=exp(-t);
y_FFT1=abs(fft(y,N_sample));
y_FFT2=abs(fft(y,N_sample))./N_sample*2;
y_FFT2(1)=y_FFT2(1)/2;
%% 绘图
figure(1);
subplot(3,2,1);
plot(t,x);
title(['时域信号x,采样频率',int2str(Fs),'Hz,采样点数',int2str(N_sample)],'FontSize',18);
grid on;
subplot(3,2,3);
title('DFT','FontSize',18);
plot(f_index,x_FFT1(1:N_sample/2),'r');
legend('未除以采样点数',1);
grid on;
subplot(3,2,5);
plot(f_index,x_FFT2(1:N_sample/2));
legend('除以采样点数后',1);
grid on;
subplot(3,2,2);
plot(t,y);
title(['时域信号x,采样频率',int2str(Fs),'Hz,采样点数',int2str(N_sample)],'FontSize',18);
grid on;
subplot(3,2,4);
title('DFT','FontSize',18);
plot(f_index(1:5),y_FFT1(1:5),'r');
legend('未除以采样点数',1);
grid on;
subplot(3,2,6);
plot(f_index(1:5),y_FFT2(1:5));
legend('除以采样点数后',1);
grid on;
%这个例子旨在说明单频实信号和宽频实信号在DFT运算过程中,时域变换到频域时是否要除以采样点数,请注意,如果不是整数倍关系的采样,幅度谱会存在泄露
clc;
clear;
close all;
%% 定义计算参数
F0=16;%信号频率
N_sample=1024;%总采样点数
Fs=512;%采样频率
f_index=(0:N_sample/2-1)/N_sample*Fs;%计算FFT之后的频率标注
n=0:N_sample-1;%采样序号
t=n*1/Fs;%时间标度
A=1;%信号幅度
%% 时域信号x计算DFT
x=A*sin(2*pi*F0*t);
x_FFT1=abs(fft(x,N_sample));
x_FFT2=abs(fft(x,N_sample))./N_sample*2;
x_FFT2(1)=x_FFT2(1)/2;
%% 时域信号y计算DFT
y=exp(-t);
y_FFT1=abs(fft(y,N_sample));
y_FFT2=abs(fft(y,N_sample))./N_sample*2;
y_FFT2(1)=y_FFT2(1)/2;
%% 绘图
figure(1);
subplot(3,2,1);
plot(t,x);
title(['时域信号x,采样频率',int2str(Fs),'Hz,采样点数',int2str(N_sample)],'FontSize',18);
grid on;
subplot(3,2,3);
title('DFT','FontSize',18);
plot(f_index,x_FFT1(1:N_sample/2),'r');
legend('未除以采样点数',1);
grid on;
subplot(3,2,5);
plot(f_index,x_FFT2(1:N_sample/2));
legend('除以采样点数后',1);
grid on;
subplot(3,2,2);
plot(t,y);
title(['时域信号x,采样频率',int2str(Fs),'Hz,采样点数',int2str(N_sample)],'FontSize',18);
grid on;
subplot(3,2,4);
title('DFT','FontSize',18);
plot(f_index(1:5),y_FFT1(1:5),'r');
legend('未除以采样点数',1);
grid on;
subplot(3,2,6);
plot(f_index(1:5),y_FFT2(1:5));
legend('除以采样点数后',1);
grid on;