其实是早应该想到的,今天写程序的时候想到了。然后,跟同学说起来,说,原来国外的教材很多都是矩阵的形式来表示离散傅里叶变换的。但是国内的教材没有这么表达。
一个是,自己看的东西还是少了,一个是,matlab本来应该是混饭吃的东西,用的也不熟,理解还欠很多,另外一个是,对于线性代数,矩阵,的理解还真是浅薄。这么有用的东西,自己还是应该抽空看看的。
对于x[n]的离散时间傅里叶变换
离散时间傅里叶变换
对于N点序列,离散傅里叶变换
离散傅里叶变换
可以看到,先是乘法,然后是求和。很容易想到,对于矩阵的乘法,就是先一行乘以一列,再把各个值相加,为一项的值,再去做下一步。
到最后需要得到的是一个1xN(或1xW)的矩阵,所以矩阵乘法中,左边的应该是一个一行的矩阵,为x[n],exp中,需要得到一个NxN(或者NxW)的矩阵,由,nk得到,形式为n’*w。
clc;
fs=100; %采样频率
N=128; %数据点数
n=0:N-1;
t=n/fs; %时间序列
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号
%此处x[n],就是需要的输入的序列
%注意,matlab标号从一开始,所以需要有n+1
w=[0:999]
%w为一千个点,在这里相当于,w是连续的,若w的数量等于N,则就是N点的DFT。
y=x(n+1)*exp(-j*2*pi/N*n'*w)
%y[w]即傅里叶变换系数