MATLAB自带FFT相较于DFT的误差

发现问题

最近仿真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);

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ruredfive/article/details/126128101
今日推荐