1、试验三DFT和FFT频谱分析实验三DFT和FFT频谱分析一、 实验目的1.掌握DFT频谱分析的原理与编程方法。2.理解FFT算法的编程思想。2.熟练掌握利用FFT对信号作频谱分析,包括正确地进行参数选择、画频谱 及读频谱图。3.利用FFT频谱分析进行快速卷积和太阳黑子周期性检测。二、 实验环境“.Windows xp以上操作系统2.安装 MATLAB2007a 软件三、 实验原理1.离散傅里叶变换(DFT)设序列为x(n),长度为N,则N AX(ej 3k)=DFTx(n)= x(n) e-j n,n =02 n - k其中 业= k (k=0,1,2, -1),通常MN,以便观察频谱的细节。
2、|X(ej w)|-x(n)的幅频谱。M2.谱分析参数选择1)设信号x(t)最高频率为fc,对其进行取样得 x(n),根据取样定理,取样频率 fs必须满足:fs=2fc 。2)设谱分辨率为F,则最小记录时间tpmin= MF ;取样点数N 2fc/F ;为使用快速傅里叶变换 (FFT)进行谱分析,N还须满足:N=2E ( E为整数) 。3.用FFT计算信号x(n)的频谱。设x(n)为实信号快速傅里叶变换(FFT )是DFT的一种快速算法,其使得 DFT的运算速度大为加快。1)对信号x(n)作N点FFT,得频谱X(k)(k=ON-1)X(k)=X R(k)+jX I(k) (k=0N/2-1)
3、, XR(k) X(k)的实部;Xi(k) X(k)的虚部。Matlab 语句:Y=fft(x.N)其中:x-x(n);Y-X(k)/2 22)幅频谱:|X(k)|= xR(K) XI(K) ,由于 x(n)为实信号,因此 |X(k)|对称,Matlab 语句:abs(Y)2 *iii)功率谱:PSD(k)=|X(k)| /N=X(k)X (k)/NMatlab 语句:PSD=Y.*conj(Y)/N其中:conj(Y)- X *(k)X(k)的共轭4.读频谱图频谱图中任意频率点 k对应实际频率为:fk= fs/N*k 。5.用FFT实现线性卷积运算用FFT实现y(n)=x(n)*h(n)的步
4、骤为:1)设x(n)及h(n)的长度分别为N1和N?。为使循环卷积等于线性卷积,用补 0的方法使x(n),h(n)长度均为N,则N须满足N ;为用FFT计算DFT,则N还须满足N= 2E(e为整数) 。2)用 FFT 计算 X(k),H(k) (N 点)。3)Y(k)= if ; y(n)= ifftY(K) 四、实验内容1.根据公式设计DFT原理程序,并计算:x(n)=1,1,1,1的4,16,64点DFT并绘图。%DFT/IDFT 程序 DFT.mclcclear xn=input( x(n)=); M=length(xn);N=input(变换区间 N=); xn=xn zeros(1,
5、N-M); n=0:N-1;k=0:N-1; nk=n*k; wn=exp(-j*2*pi/N); wnK=wn.Ank;xk=xn*wnK%输入序列x(n)=1 1 1 1%x(n)的长度M%变换区间N%补0,使xn长度为N%旋转因子wn% 作 x(n)的 DFT=xksubplot(211);stem(k,abs(xk),.);grid on;%显示xk的幅频谱(离散曲线)subplot(212);plot(k,abs(xk);grid on;%显示xk的幅频谱(连续曲线) 运行结果:问:由此得出怎样的结论?答:n越大越接近原来的dft2.理解DIT-FFT算法原理程序,并用它计算 X(k
6、)=FFTR 4(n),分别取N=4,8,16和64,绘出幅频谱|X(k)|。%程序DlT.mclearclc x=input( x=); N=input(N=); x(length(x)+1:N)=zeros(1,N-length(x); l=log2(N);x1= zeros(1,N);for j1=1:N end %FFT(DIT)% M=2;while(Mv=N)W=exp(-2*j*pi/M);V=1;for k=0:1:M/2-1for i=0:M:N-1 p=k+i; q=p+M/2; A=x1(p+1); B=x1(q+1)*V; x1(p+1)=A+B; x1(q+1)=A-
7、B;endV=V*W;endM=2*M;end%subplot(211);stem(x,.);grid on; title(x(n);subplot(212);stem(abs(x1),.);grid on; title(|X(k)|);1.52.53.5F: x(n)|X(k)|x(n) 1f 1F 11 4 4i 1 n8|X(k)|10.504321010.5043210x(n)|X(k)|x(n)0.5102030405070f 60|X(k)|3.FFT谱分析设信号为 x(t)=sin(2 nf+sin(2 2t)+随机噪声,fi=50Hz, f2=120Hz,以取样频率fs=1kH
8、z对x(t)进行取样,样本长度tp=0.25s,得x(n),对x(n)作256点FFT,得频谱X(k),画原信号 x(n),幅频谱|X(k)|以及功率谱PSD(k),对信号进行谱分析。% 程序 pufenxi.m clearclc fs=1000;t=0:1/fs:0.25;N=256; f1=50;f2=120; s=sin(2*pi*f1*t)+sin(2*pi*f2*t); x=s+randn(size(t);Y=fft(x,N);PSD=Y.*conj(Y)/N; f=fs/N*(0:N/2-1); subplot(311);plot(x); subplot(312);plot(f,a
9、bs(Y(1:N/2); subplot(313);plot(f,PSD(1:N/2);150 r r100 -iii)本例的频谱分辨率F是 3.9 Hz,改变f2=60Hz,问:在幅频谱中,能否分辨 fi和f?对应 的频率分量? 不能 。为什么? 间 隔小于频谱分辨率 。再改变f2=52Hz,问:在幅频谱中,能否分辨 fi和f2对应的频率分量? 不能 。为什么? 间隔小于频谱分辨率 。再改变f2=600Hz,在幅频谱中,f2对应的频率分量出现在 398.45 Hz ;问:在fs=1000Hz的情况下,能否正确检测 f2对应的频率分量? 不能 。为什么? 不符合采样定理 。为了正确检测f2对应
10、的频率分量,则fs至少取多少Hz? 1200 Hz。在该程序中改变fs, 验证你的结论。突出主频点 的特性。iv)比较幅频谱和功率谱,可以发现功率谱具有4.FFT实现任意两个序列的快速卷积。% 程序 fftjuanji.mclearclcx1=1 1 1, x2=1 2,回车。结果:y= 1 3 3 2 Y=conv(x1,x2)2)问:可用Matlab中的什么函数验算上述卷积结果?5.利用谱分析观察太阳黑子周期性。以100年中记录到的太阳黑子出现次数为信号 x(n),对x(n)作功率谱,从中观察太阳黑子周期性。% 程序 taiyangheizi.m clear clcx=101 82 66
11、35 31 7 20 92 154 125 85 68 38 23 10 24 83 .132 131 118 90 67 60 47 41 21 16 6 4 7 14 34 45 43 48 .42 28 10 8 2 0 1 5 12 14 35 46 41 30 24 16 7 4 2 8 .17 36 50 62 67 71 48 28 8 13 57 122 138 103 86 63 37 24 . 11 15 40 62 98 124 96 66 64 54 39 21 7 4 23 55 94 96 .77 59 44 47 30 16 7 37 74;%100年中太阳黑子出
12、现的次数 subplot(211);plot(x) % 画x(n)N=128; fs=1; %fs=1Hz,N=128 点s=x-mean(x); %对x作零均值化处理(去除直流分量)Y= fft(s,n) ; % 对 S故 N 点 fftPSD= , Y.*conj(Y)/N ; % 做功率谱 PSDf= fs/N*(0:N/2-1) ; %将频率定标为实际频率 fsubplot(212); plot(f,PSD(1:N/2) ; % 画功率谱(N/2 点)1) 填写空格中的画图语句并绘出结果图形。4X 1021.510.500 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.52)从s的功率谱观察到,其幅度最高处对应的横坐标 f= 0.086 Hz, 则太阳黑子每隔 11.62 年出现一次最高峰。3)在对s做FFT时,为何可取fs=1Hz,N=128点?太阳黑子每一年记录一次,记录 100年,但N要取2的指数倍所以取 128
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1