|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
>> % 采样定理实验的MATLAB脚本<BR>echo on<BR>ts=0.2; % 采样间隔<BR>fs=1/ts; % 采样频率,它是带宽的2倍<BR>df=0.01; % 频率分辨率0.01Hz<BR>x=[zeros(1,10),[0:0.2:1],ones(1,9),[1:-0.2:0],zeros(1,10)];<BR>[X,x,df1]=fftseq(x,ts,df); % 求得FFT<BR>X1=X/fs; % 确定标尺刻度<BR>f=[0:df1:df1*(length(x)-1)]-fs/2; % FFT的频率矢量<BR>f1=[-2.5:0.001:2.5]; % 解析法的频率矢量<BR>y=4*(sinc(2*f1)).^2-(sinc(f1)).^2; % 精确的傅立叶变换<BR>pause % 按任意键观察解析法求得的傅立叶变换的图形<BR>clf<BR>subplot(2,1,1)<BR>plot(f1,abs(y));<BR>xlabel('频率f')<BR>title('解析法求出x(t)的振幅谱')<BR>pause % 按任意键观察数值法求得的傅立叶变换的图形<BR>subplot(2,1,2)<BR>plot(f,fftshift(abs(X1)));<BR>xlabel('频率f')<BR>title('数值法求出x(t)的振幅谱')<BR><BR><BR><BR>function [M,m,df]=fftseq(m,ts,df) <BR>% [M,m,df]=fftseq(m,ts,df) <BR>% [M,m,df]=fftseq(m,ts)<BR>%FFTSEQ 生成M, 它是时间序列m的FFT<BR>% 对序列填充零,以满足所要求的频率分辨率df<BR>% ts是采样间隔. 输出df是最终的频率分辨率<BR>% 输出m是输入m的补过零的版本,M是FFT.<BR>fs=1/ts;<BR>if nargin == 2<BR> n1=0;<BR>else<BR> n1=fs/df;<BR>end<BR>n2=length(m);<BR>n=2^(max(nextpow2(n1),nextpow2(n2)));<BR>M=fft(m,n);<BR>m=[m,zeros(1,n-n2)];<BR><BR>[em14] |
|