MATLAB中的fft后为何要用fftshift?

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/01 22:16:22

MATLAB中的fft后为何要用fftshift?
MATLAB中的fft后为何要用fftshift?

MATLAB中的fft后为何要用fftshift?
fft是一维傅里叶变换,即将时域信号转换为频域信号fftshift是针对频域的,将FFT的DC分量移到频谱中心\x0d即对频域的图像,(假设用一条水平线和一条垂直线将频谱图分成四块)对这四块进行对角线的交换与反对角线的交换FFTSHIFT Shift zero-frequency component to center of spectrum.\x0dFor vectors,FFTSHIFT(X) swaps(交换) the left and right halves of\x0dX.For matrices,FFTSHIFT(X) swaps the first and third\x0dquadrants and the second and fourth quadrants.For N-D\x0darrays,FFTSHIFT(X) swaps "half-spaces" of X along eachdimension.\x0dFFTSHIFT(X,DIM) applies the FFTSHIFT operation along the\x0ddimension DIM.\x0dFFTSHIFT is useful for visualizing the Fourier transform with\x0dthe zero-frequency component in the middle of the spectrum.fftshift就是对换数据的左右两边比如\x0dx=[1 2 3 4]\x0dfftshift(x) ->[3 4 1 2]\x0dIFFTSHIFT Inverse FFT shift.(就是fftshift的逆)x=[1 2 3 4 5];y=fftshift(x)y = 4 5 1 2 3ifftshift(y)ans = 1 2 3 4 5\x0dIFFTSHIFT undoes the effects of FFTSHIFT.注意:在使用matlab的fft及fftshift时,应注意.假定采样频率fs,采样间隔dt,采样点数N.fft后,频率为(0:N-1)/N/dt进行fftshift后,频率为if mod(N,2)==0n1=(0:N-1)-N/2;elsen1=(0:N-1)-(N-1)/2;end实际上,频率为N点为周期的,所以(0:N-1)所以,对于频率0,1,2,3,4,实际上为0,1,2,-2(3-5),-1(4-5).fftshift后的频率为-2,-1,0,1,2对于二维fftshift,其与直接用下面的结果一样if mod(tempN,2)==0 kx=(0:tempM-1)/tempM/dx-tempM/2/tempM/dx;% kx=kx*2*pielse kx=(0:tempM-1)/tempM/dx-(tempM-1)/2/tempM/dx;% kx=kx*2*piendkx=kx*2*pi;if mod(tempM,2)==0 ky=(0:tempN-1)/tempN/dy-tempN/2/tempN/dy;% kx=kx*2*pielse ky=(0:tempN-1)/tempN/dy-(tempN-1)/2/tempN/dy;% kx=kx*2*piendky=ky*2*pi;temp1=sqrt(kx.^2+ky.^2);k1=temp1;[kx,ky]=meshgrid(kx,ky);如下面程序表明上面两个相同:dx=50e3; dy=50e3;% % % % % % % % % % % tempN=41;tempM=41;% % % % % % % % % % % % % % % %determining the wavenumber kx and kyif mod(tempM,2)==0 kx=(0:tempM-1)-tempM/2;% kx=kx*2*pielse kx=(0:tempM-1)-(tempM-1)/2;% kx=kx*2*piendkx=kx*2*pi/tempM/dx;if mod(tempN,2)==0 ky=(0:tempN-1)-tempN/2;% kx=kx*2*pielse ky=(0:tempN-1)-(tempN-1)/2;% kx=kx*2*piendky=ky*2*pi/tempN/dy;[kxx,kyy]=meshgrid(kx,ky);k00=sqrt(kx.^2+ky.^2);% % % % % % % % % % % % % % % % if mod(tempM,2)==0 temp1=tempM/2-1; temp2=(temp1+1):(tempM-1); temp2=temp2-tempM; temp3=[0:temp1,temp2]; kx=temp3/tempM/dx;% kx=kx*2*pielse temp1=(tempM-1)/2; temp2=(temp1+1):(tempM-1); temp2=temp2-tempM; temp3=[0:temp1,temp2]; kx=temp3/tempM/dx;% kx=kx*2*piendkx=kx*2*pi;if mod(tempN,2)==0 temp1=tempN/2-1; temp2=(temp1+1):(tempN-1); temp2=temp2-tempN; temp3=[0:temp1,temp2]; ky=temp3/tempN/dy;% kx=kx*2*pielse temp1=(tempN-1)/2; temp2=(temp1+1):(tempN-1); temp2=temp2-tempN; temp3=[0:temp1,temp2]; ky=temp3/tempN/dy;% kx=kx*2*piendky=ky*2*pi;[kx,ky]=meshgrid(kx,ky);kx=fftshift(kx);ky=fftshift(ky);k=sqrt(kx.^2+ky.^2);figuresubplot(3,1,1),contourf(kxx-kx)subplot(3,1,2),contourf(kyy-ky)subplot(3,1,3),contourf(k00-k)%%%%%%%%%%%fft及fftshift示例:\x0dclf;fs=100;N=256; %采样频率和数据点数n=0:N-1;t=n/fs; %时间序列x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号y1=fft(x,N); %对信号进行快速Fourier变换y2=fftshift(y1);mag1=abs(y1); %求得Fourier变换后的振幅mag2=abs(y2); f1=n*fs/N; %频率序列f2=n*fs/N-fs/2;%这个未必正确subplot(3,1,1),plot(f1,mag1,'r'); %绘出随频率变化的振幅xlabel('频率/Hz');ylabel('振幅');title('图1:usual FFT','color','r');grid on;subplot(3,1,2),plot(f2,mag1,'b'); %绘出随频率变化的振幅xlabel('频率/Hz');ylabel('振幅');title('图2:FFT without fftshift','color','b');grid on;subplot(3,1,3),plot(f2,mag2,'c'); %绘出随频率变化的振幅xlabel('频率/Hz');ylabel('振幅');title('图3:FFT after fftshift','color','c');grid on;

MATLAB中的fft后为何要用fftshift? MATLAB中的fft后为何要用fftshift? MATLAB中的fft后为何要用fftshift? matlab中fft命令为何要配合fftshift来用?如题. matlab怎么用fft计算dct 为什么用matlab将两个信号叠加后,再进行FFT后的图像和分别FFT的图像叠加的不同?(图像是功率频谱图) matlab中fft变换出来后频率的数值不合理,这个声波数据是环境中的背景噪声波,采样频率是2wHz,得到的数据记录为两列,分别是时间t和幅度y1.用fft变换后求频率.程序如下,问题是我把程序里面的 matlab 如何进行复数的 fft运算我是想读取外部txt中的128个16进制数据(实部和虚部分别有128个)让后对128个点进行fft计算 matlab怎么用 fft画语音信号频谱图 如何用matlab实现fft不是用matlab自带的函数fft,而是自己重新编程 fft的输出为何不是一条线?本来,fft是对信号进行傅立叶变换,可以得到原有信号的频率成分的.可是在用matlab实行fft的时候,(估计其它语言也一样)即使对一个单纯的正弦波,它的输出也并非是 为什么用matlab里的FFT对一个记录下来的波形(列向量)进行分析,采样频率不同,经过FFT后的最大幅值对应的频率值不同. 求matlab的fft源程序 matlab FFT变换后 plot(f,2*abs(Y)/length(Y)) 为何要乘以2除以Y的长度才能得到正确的幅值呢?Fs = 1000; % 采样频率 T = 1/Fs; % 采样时间 L = 1000; % 总的采样点数 用MATLAB算[5 5]的FFT为[10 0]怎么算的?>>fft([5 5])ans = 10 0 matlab fourier()怎么用?与fft()函数的区别是什么?最好举个例子,比如门信号的,还有变换后怎么画出幅频图和相频图? FFT中的“相关”是什么意思? matlab中的fft使用疑问一般的用FFT进行频谱分析都是这么做的:fs=100; %设定采样频率N=128; % 设定FFT变换长度f0=10; %设定正弦信号频率x=sin(2*pi*f0*t);