谁能帮我解释一下这段matlab程序是什么意思?

问题描述:

谁能帮我解释一下这段matlab程序是什么意思?
这里有一段完整的matlab程序,是用来把某个信号进行FFT的,不过其中有几句不懂,程序如下:
N=256;
f1=0.1;
f2=0.2;
fs=1;
a1=5;a2=3;
w=2*pi/fs;
x=a1*sin(w*f1*(0:N-1))+a2*sin(w*f2*(0:N-1))+rand(1,N);
subplot(3,1,1);
plot(x(1:N/4));
f=-0.5:1/N:0.5-1/N;
X=fft(x);
subplot(3,1,2);
plot(f,fftshift(abs(X)));
这里有三处我不明白:
1.plot(x(1:N/4));
这一句,前面在定义要进行fft变换的序列时已经给出了0:N-1的行向量,怎么又出来个x(1:N/4)?
2.f=-0.5:1/N:0.5-1/N;
这一句,为什么f取的是从-0.5到0.5-1/N?我试了一下,如果改成-0.5到0.5,居然就做不出fft的图来了,是空白的.
3.plot(f,fftshift(abs(X)));
这一句,plot()里面的两个参数,一个是f,一个是fftshift(abs(X)),这两个参数有关联吗?,后者里面没有涉及到f啊,画出的fft的图的横坐标和纵坐标分别是代表什么呢?另外这个fftshift是什么功能?
问题比较多,我是matlab初学者,
1个回答 分类:综合 2014-10-10

问题解答:

我来补答
1.plot(x(1:N/4))是作图向量x的第一到第N/4个值
2.f=-0.5:1/N:0.5-1/N; 中-0.5的意思是f的初值,0.5-1/N是f的最后值,1/N则是f没变化一次的增量.例如若N=10,那么f=-0.5:0.1:0.4,其实f就分别取-0.5 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4
你用f=-0.5:0.5 则系统会默认增量是1 所以系统不可能运行出来
3.f即是plot作图的横坐标 ,至于fftshift 你在matlab 里运行help fftshift
fftshift函数就是一个交换函数:
交换规则如下:
如:x=[1 2 3 4 5 6 7 8];
y=fftshift(x);
then y=[5 6 7 8 1 2 3 4];
其在fft运算里的物理意义:
把0频(低频)周围的频谱搬移到中频范围(采样频率的一半),只是形象化的展示FT变换后的低频成分(正负频率).
其实质是把Fs/2的右边频谱平移到Fs/2的左边,把低频平移到Fs/2的右边,各图象间距不变.不知道怎么贴图,放附件了.
 
 
展开全文阅读
剩余:2000