作业帮 > 综合 > 作业

matlab 频谱分析

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/10/02 18:48:12
matlab 频谱分析
我是个新手,现在是在是做混了,希望大家帮帮忙
clc
clear
fs=10;
t=1/fs:1/fs:2;
y=sinc(t)
[H,w]=freqz(y,1)
w=w/2/pi
H1=abs(H)
plot(w,H)
grid on
我想求出y=sinc在0到2秒时的频谱,这样做对么?还有freqz求幅频谱的时候,横轴w/2/pi.对应的频率是不是就是上面的fs/2.
clc
clear
fs=10;
t=1/fs:1/fs:2;
y=sinc(t)
z=fft(y,64)
f=fs/2/64:fs/2/64:fs/2
plot(f,z)
grid on
这样用fft做对么?为什么和上面的图形差那么多,还有为什么这个右边多出来一隔峰值.
用fft的时候里面的N默认和自己修改为2的倍数求出来的东西为什么差那么多.
望大家帮帮忙,不胜感激!
hokvens,你好,我又提高了50分给你,希望你再简单的回答我几个问题,谢谢.
1,你下面给的程序段我看了,可是f2没有定义啊,其他的没问题.fft与freqz自定义的点数相同时,0到fs/2上的波形是不是完全相同的.
2,做fft后产生的频域点是不是对应于0—2*pi,然后用户fftshit能纠正到-pi到pi的.
3,求幅频或者频谱的时候,fft和freqz是不是都可以用?性质上有没有什么较大区别.
做频谱分析应该用fft,fft变换出来的图形是左右对称的,所以你在右边也有一个峰,实际上只有一半的有用信息
你总共20个数据点,如果matlab自己选的话N=32,你选了N=64,所以相当于多插入了32个0,变换出来的频谱自然看起来更“细腻”了,但形状肯定是一样的.你把N改成128画出来的图就和freqz的很像了
另外,你用freqz就相当于做离散傅里叶变换,而不是fft,所以右边没有对称的峰值,w是把频率0~(N-1)df映射到0~2pi,我帮你把程序改了一下,看懂了就能够理解fft和freqz了
clc
N = 128;
fs=10;
t=0:1/fs:2;
df = fs/N;
y=sinc(t);
[H1,w] = freqz(y,1,N);
f1 = w/2/pi*(N-1)*df;
f2 = f1;
H2 = freqz(y,1,f2,fs);
figure(1)
hold on
grid on
plot(f1,abs(H1),'bs');
plot(f2,abs(H2),'g.');
z = fft(y,N);
f3 = 0:df:(N-1)*df;
plot(f3,abs(z),'r--');
f2 漏掉了,sorry:)已改
1.完全相同
2.正确,不过实际上fft对应的点的范围是0:df:(N-1)*df
3.都可以,但fft之所以存在就是因为它的计算速度要比DFT直接计算快得多,所以在频繁用到福利叶变换的场合当然建议用fft
另外,推荐两个link给你参考一下,能帮助你更好的理解fft