使用matlab计算DFT时需要注意的幅值对应问题

摘自:严普强,乔陶鹏,邓焱等.动态测试信号处理中时-频域变换算法的讨论[J].振动、测试与诊断,20030244—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;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值