作业帮 > 综合 > 作业

怎么在matlab中画出信号n=[0:64]; x1=sin(pi*(n-32)/4)./(pi*(n-32)/4);

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/11/09 00:52:43
怎么在matlab中画出信号n=[0:64]; x1=sin(pi*(n-32)/4)./(pi*(n-32)/4); 的频谱图和进行希尔伯特变换
我试过用fft命令,但画不出来,下面是我的代码
w=linspace(0,fc,64);
f1=fft(x1);
figure(3)
stem(w,abs(f1))
最好能把这个画频谱图的代码和进行希尔伯特变换的代码发下
你这程序抄来的吧,fc是多少都不知道,直接用了,怎么会能运行!
写了个简单的小程序,
clc;
clear
n=0:0.1:64;
x1=sin(pi*(n-32)/4)./(pi*(n-32)/4);
x1(floor(length(x1)/2)+1)=1;
x1_f=fft(x1);
figure(1)
subplot(2,1,1)
plot(x1)
subplot(2,1,2)
plot(abs(x1_f))
再问: fc=pi/2,我没打出来而已,要是能抄我就不会来问了………… 再请问下x1(floor(length(x1)/2)+1)=1; 这句是什么意思?
再答: 你的时域函数从数学上讲其实是个分段函数 y= (sinx)/x, x不等于0 1,x=0 这个函数在x->0的时候,应该取极限值1。 (lim {x->0} (sinx)/x = 1) 但是用MATLAB产生这个函数的时候, x1=sin(pi*(n-32)/4)./(pi*(n-32)/4); 在零点,是无穷大,MATLAB就显示NaN,但是数值是无穷大,这样的函数时域不可积,傅里叶变换是没有意义的。所以要在x1=sin(pi*(n-32)/4)./(pi*(n-32)/4)之后,人为地把中间点,也就是对应x=0的那个点的值改成1.
再问: 谢谢你、问题解决了、分给你了哈