信号与系统 matlab 研讨 联系客服

发布时间 : 星期六 文章信号与系统 matlab 研讨更新完毕开始阅读

连续时间信号Fourier变换的数值近似计算

连续时间信号频谱计算是信号和系统频域分析的基础。由于实际信号大多无简单的解析

表达式,所以必须用近似的方法进行计算。本题的目的对频谱计算中误差的原因进行初步的分析,希望能在计算实际信号频谱的近似计算中起一定的指导作用。

若信号x(t)的非零值在t?0,在可用我们提供的函数ctft近似计算其频谱。函数ctft的

[X,f]=ctft(x,Fs,N)

其中调用变量x 存放信号x(t)的抽样值,Fs表示对连续信号x(t)的抽样频率(Hz),N表示用DFT进行近似计算时DFT 的点数,为提高算法的计算效率,N最好取2的整数次幂,如512, 1024等。返回变量X是计算出的信号频谱,f(单位Hz)表示对应的频率点。返回变量X一般是复数,可用函数abs(X)计算出幅度谱,函数angle(X) 计算出相位谱。 (1)取Fs=50Hz, N=1024 近似计算信号x(t)?e?tu(t)的频谱,并和理论值进行比较; (2)若将信号的时域有效宽度Δt定义为

调用形式为

0.1xmax(t)?x(Δt)

试分析时域有效宽度Δt对近似计算的影响。给出一个由信号时域有效宽度Δt估计近似计算中所需信号长度Td?NFs的经验公式。 (3)定义信号频域有效宽度Δf为

0.1Xmax(f)?X(Δf)

给出一个由信号频域有效宽度Δf估计近似计算中所需抽样频率Fs的经验公式。 (1)经计算其理论频谱为x(jw)?1

1?j?定义函数: function [X,f]=ctft(x,Fs,N)

X=fftshift(fft(x,N))/Fs; f=-Fs/2+(0:N-1)*Fs/N; Fs=50; N=1024; t=0:1/Fs:5;

x=exp(-t).*(t>0); [X,f]=ctft(x,Fs,N); figure(1);

subplot(3,1,1); plot(t,x); grid;

xlabel('t ');ylabel('f(t)'); title('f(t)'); subplot(3,1,2); plot(f,abs(X)); grid;

xlabel('f ');ylabel('abs(F(jW))'); title('幅度频谱'); subplot(3,1,3); plot(f,angle(X)); grid;

xlabel('f ');ylabel('angle(F(jW))'); title('相位频谱'); figure(2);

P=1./(1+j*f*2*pi); subplot(2,1,1); plot(f,abs(P)); xlabel('f ');

title('幅值频谱理论值'); grid;

subplot(2,1,2); plot(f,angle(P)); xlabel('f ');

title('相位频谱理论值'); grid; figure(3);

subplot(2,1,1);

plot(f,abs(P)-abs(X)); xlabel('f (Hz)'); title('幅值误差'); grid;

subplot(2,1,2);

plot(f,angle(P)-angle(X)); xlabel('f ');

title('相位误差'); grid; (2)

0.1xmax(t)?x(Δt)

对于第一问的函数,最大值为1,经计算有效带宽在(0,2.3025) 对应于N=115 Fs=50; N=1024 t=0:1/Fs:5

x=exp(-t).*(t>0); [X,f]=ctft(x,Fs,N);

P=1./(1+j*f*2*pi) subplot(4,1,1);

plot(f,abs(P)-abs(X)); xlabel('f ');

title('幅值误差'); grid clear Fs=50; N=116 t=0:1/Fs:5

x=exp(-t).*(t>0); [X,f]=ctft(x,Fs,N); P=1./(1+j*f*2*pi) subplot(4,1,2);

plot(f,abs(P)-abs(X)); xlabel('f '); title('N'); grid clear Fs=50; N=174 t=0:1/Fs:5

x=exp(-t).*(t>0); [X,f]=ctft(x,Fs,N); P=1./(1+j*f*2*pi) subplot(4,1,3);

plot(f,abs(P)-abs(X)); xlabel('f '); title('1.5N'); grid clear Fs=50; N=230 t=0:1/Fs:5

x=exp(-t).*(t>0); [X,f]=ctft(x,Fs,N); P=1./(1+j*f*2*pi) subplot(4,1,4);

plot(f,abs(P)-abs(X)); xlabel('f '); title('2N'); grid

结果分析:由(1)得,抽样后计算后的频谱最大误差在0.02左右,取一倍的N进行抽样时,其最大误差在0.1左右,误差较大,取1.5N进行抽样后,最大误差接近0.05,取两倍N进

行抽样后,发现最大误差于实际接近。可见,以两倍的N抽样比较合适。对应的信号长度为Td?2△t

(3)经计算△f??1.6 Fs=50; N=1024 t=0:1/Fs:5

x=exp(-t).*(t>0); [X,f]=ctft(x,Fs,N); P=1./(1+j*f*2*pi) subplot(4,1,1);

plot(f,abs(P)-abs(X)); xlabel('f ');

title('幅值误差'); grid clear Fs=150; N=1024 t=0:1/Fs:5

x=exp(-t).*(t>0); [X,f]=ctft(x,Fs,N); P=1./(1+j*f*2*pi) subplot(4,1,2);

plot(f,abs(P)-abs(X)); xlabel('f '); title('Fs=150'); grid clear Fs=200; N=1024 t=0:1/Fs:5

x=exp(-t).*(t>0); [X,f]=ctft(x,Fs,N); P=1./(1+j*f*2*pi) subplot(4,1,3);

plot(f,abs(P)-abs(X)); xlabel('f '); title('Fs=200'); grid clear Fs=250 N=1024 t=0:1/Fs:5