发现问题
最近仿真FFT变换突然发现一个问题,理想正弦信号的离散傅里叶变换应该是一个单脉冲频谱,像下图所示。

结果matlab的fft处理结果显示好像不是,呈现洛伦兹线型,如下图。

自己写的DFT对比
尤其是在信号频率为整数的条件下 误差 更是格外的大。
信号频率为小数时也不一样。。。。难道是因为我的MATLAB是破解版的?
程序如下,欢迎指正
clc;clear;
close all;
T = 1;
fs = 3e3;
len = fs*T;
t = linspace(0,T,len);
I = cos(2*pi*510*t); % 正弦信号
% MATLAB's FFT
real0 = 2*abs(fft(I))/len; % fft
freq0 = linspace(0,len-1,len);
% my DFT
real1 = zeros(1,len);
for m = 1:len
mid = mean(I.*exp(-2i*pi*(m-1)*t)); % 傅里叶变换的公式
real1(m) = 2*abs(mid);
end
freq1 = linspace(0,len-1,len);
figure,plot(freq1,10*log10(real1),'g',freq0,10*log10(real0),'k');
legend('DFT','FFT');
找同学给看了一眼,说是坐标基没有匹配上,将时间坐标更改为如下代码即可,结果如下,Niubility!!
t = linspace(0,T-1/fs,len);