matlab信号处理相关函数程序.doc
序列的傅里叶变换及其逆变换定义:)(|(|)()(jjnnjjxeX1()()2jwjnxd其幅度特性为,在Matlab中采用abs函数;相位特性为,在Matlab中采||jeX)(用angle函数。为了方便,考虑在两个周期,例如[]中2M+1个均匀频率点上计算FT,并且2,观察其周期性和对称性。为此给出function文件如下,求解FT变换:function[X,w]=ft(x,n,k)%X:序列x(n)的傅里叶变换%w:X的自变量%x:要进行傅里叶变换的序列x(n)%n:序列x(n)的位置向量%k:求和区间w=(pi/abs(max(k)/2))*k;X=x*(exp(-1i*pi/abs(max(k)/2))).^(n *k);使用方法如下:n=-5:5;%序列区间x=(-0.9).^n;%序列表达式k=-200:200;%求和区间[Xw,w]=ft(x,n,k);%求傅里叶变换magX=abs(Xw);%求幅度angX=angle(Xw);%求相位realX=real(Xw);imagX=imag(Xw);subplot(2,2,1)plot(w/pi,magX)%绘制幅度曲线gridontitle( 幅度曲线 )xlabel( \omega/\pi )ylabel( 幅度 )xmin=0;xmax=2;set(gca, xlim ,[xmin,xmax], ylimmode , auto , zlimmode , auto );%xminxmax为范围subplot(2,2,2)plot(w/pi,angX/pi)%绘制相位曲线gridontitle( 相位曲线 )xlabel( \omega/\pi )ylabel( 相位 )%angle(X)/pixmin=0;xmax=2;set(gca, xlim ,[xmin,xmax], ylimmode , auto , zlimmode , auto );%xminxmax为范围subplot(2,2,3)plot(w/pi,realX)%绘制实部曲线gridontitle( 实部曲线 )xlabel( \omega/\pi )ylabel( 实部 )xmin=0;xmax=2;set(gca, xlim ,[xmin,xmax], ylimmode , auto , zlimmode , auto );%xminxmax为范围subplot(2,2,4)plot(w/pi,imagX)%绘制虚部曲线gridontitle( 虚部曲线 )xlabel( \omega/\pi )ylabel( 虚部 )xmin=0;xmax=2;set(gca, xlim ,[xmin,xmax], ylimmode , auto , zlimmode , auto );%xminxmax为范围序列的DFT及IDFT定义:10102)()()(NnNnnkNjkexWxkX211jnkkNkxX离散傅里叶变换的的性质:(1)DFT的共轭对称性。若,,则:)()(xxopep)(nxDFTkX,。)()]([XnxDFTRep][kjnDFTIop(2)实序列DFT的性质。若为实序列,则其离散傅里叶变换为共轭对称,k即。10,*Nkk(3)实偶序列DFT的性质。若为实偶序列,则其离散傅里叶变换为实偶对)(x)(X称,即。),()(4)实奇序列DFT的性质。若为实奇序列,则其离散傅里叶变换为纯虚奇nk对称,即。10,kXk离散傅立叶变换函数function[Xk,k]=dft(xn,N)n=0:1:N-1;k=0:N-1;WN=exp(-1j*2*pi/N);nk=n *k;WNnk=WN.^(nk);Xk=xn*WNnk;%采用矩阵相乘的方法magX=abs(Xk);k=(0:length(magX)-1)*N/length(magX);离散傅立叶反变换函数function[xn]=idft(Xk,N)n=0:1:N-1;k=0:1:N-1;WN=exp(-1j*2*pi/N);nk=n *k;WNnk=WN.^(-nk);xn=(Xk*WNnk)/N;使用方法如下:1、序列的傅里叶变换及离散傅里叶变换计算N=5;n=0:4;x=[ones(1,5)];%产生矩形序列k=0:999;w=(pi/500)*k;X=x*(exp(-j*pi/500)).^(n *k);%计算序列的傅立叶变换Xe=abs(X);subplot(3,2,1);stem(n,x);ylabel( x(n) );subplot(3,2,2);plot(w/pi,Xe);ylabel( |X(ejw)| );%画出序列的傅立叶变换X=dft(x,N);%进行5点DFTmagX=abs(X);k=(0:length(magX) -1)*N/length(magX);subplot(3,2,3);stem(n,x);ylabel( x(n) );subplot(3,2,4);stem(k,magX);axis([0,5,0,5]);ylabel( |X(k)| );2、序列产生及其DFTN=20;n=0:N-1;x=2*cos(0.25*pi*n)+cos(0.65*pi*n);subplot(2,1,1);stem(n,x);title( N=20时的信号 );Y=dft(x,N);k1=0:N-1;w1=2*pi/N*k1;subplot(2,1,2);stem(w1/pi,abs(Y));title( 信号的频谱 );FFT算法计算矢量xn的离散傅立叶变换一维快速傅立叶变换函数fftXk=fft(xn,N)xn为时域序列向量,N是DFT变换区间长度。当N大于xn的长度时,fft函数自动在xn后面补零。函数返回xn的N点DFT变换结果向量Xk。当N小于xn的长度时,fft函数计算xn的前面N个元素构成的N长序列的N点DFT,忽略xn后面的元素。当x为矩阵时,Xk为矩阵xn的每一列的FFT,fft函数按类似的方法处理列长度。当xn的长度为2的幂次方时,则fft采用基2的FFT算法,否则采用稍慢的混合基算法。一维快速傅立叶反变换ifftxn=ifft(Xk,N)Xk的N点IFFTxn=ifft(Xk)用于计算矢量Xk的IFFT使用方法如下:M=26;N=32;n=0:M;xa=0:M/2;xb=ceil(M/2)-1:-1:0;xn=[xa,xb];%产生M长三角波序列x(n)Xk=fft(xn,512);%512点FFTX32k=fft(xn,32);%32点FFTx32n=ifft(X32k);%32点IFFT得到x32(n)X16k=X32k(1:2:N);%隔点抽取X32k得到X16kx16n=ifft(X16k,N/2);%16点IFFT得到x16(n)连续信号的傅里叶变换及其逆变换定义:(w)(t)ejwtFfd1t2jtfFw=fourier(ft,t,w)%求时域函数ft的Fourier变换FwFt=ifourier(Fw,w,t)%求频