imjacob 发表于 2014-9-12 18:01:26

在matlab中怎么画sin(x)的频谱图,相位图?

在看《信号与系统》的时候,发现讲的好高大上。事实上我连个最简单的画sin(x)的频谱图,相位图都不是很确信。想问下大家,在matlab中怎么画sin(x)的频谱图,相位图?这样可以方便我看看和自己纸上画的是不是一样?谢谢

li.wen 发表于 2014-9-12 18:43:57

在网上找了个blog;可以去看看里面的代码,直接复制执行即可

http://blog.163.com/fei_lai_feng/blog/static/9289962200971751114547/

熵之矢 发表于 2014-9-12 19:24:25

百度一下一大片,掌握好搜索工具

ruanxianwu 发表于 2014-9-12 19:34:40

matlab自带

imjacob 发表于 2014-9-12 20:29:51

li.wen 发表于 2014-9-12 18:43
在网上找了个blog;可以去看看里面的代码,直接复制执行即可

http://blog.163.com/fei_lai_feng/blog/stat ...

恩。谢谢!但是这个是弄得幅度谱,没有相位谱。 相位谱怎么弄呢?

imjacob 发表于 2014-9-12 20:30:38

熵之矢 发表于 2014-9-12 19:24
百度一下一大片,掌握好搜索工具

确实。百度是很多,但这个我问之前就搜过了。百度上能找到很多幅度谱的,相位谱怎么弄我就没找到。谢谢

yfwuh 发表于 2014-9-12 20:55:20

fft出来的是每个点是复数,既包含幅度信息,有包含相位信息

imjacob 发表于 2014-9-13 09:38:22

yfwuh 发表于 2014-9-12 20:55
fft出来的是每个点是复数,既包含幅度信息,有包含相位信息

还有问题,时域波形和 傅里叶得到的波形是不是1对1匹配的,即 根据时域波形能够得到唯一的频域波形。根据频域波形也能够得到唯一的时域波形呢?

wangpeng6125 发表于 2014-9-13 11:20:33

用matlab自带的simulink搭建一个,可以方便的进行各种处理分析

charlesg 发表于 2014-9-13 11:53:19

t = 0:0.0002:0.1;
figure(1)
plot(0:length(t)-1,abs(fft(sin(2*pi*1000*t))));
figure(2)
plot(0:length(t)-1,angle(fft(sin(2*pi*1000*t))))

imjacob 发表于 2014-9-14 18:45:16

charlesg 发表于 2014-9-13 11:53
t = 0:0.0002:0.1;
figure(1)
plot(0:length(t)-1,abs(fft(sin(2*pi*1000*t))));


你这样我试了,图出来了,但是 不太对啊。应该频率在 1000HZ吧。但是图上是100和 400有值了。不懂原因。谢谢

charlesg 发表于 2014-9-14 19:19:23

imjacob 发表于 2014-9-14 18:45
你这样我试了,图出来了,但是 不太对啊。应该频率在 1000HZ吧。但是图上是100和 400有值了。不懂原因。 ...

采样率是5K,图上X轴有500个左右的点,表示从DC-5K,你觉得100和400号点是代表多少频率?
另外400出现信号,是因为混叠,没有把大于Fs/2的频率去掉

imjacob 发表于 2014-9-14 22:26:39

charlesg 发表于 2014-9-14 19:19
采样率是5K,图上X轴有500个左右的点,表示从DC-5K,你觉得100和400号点是代表多少频率?
另外400出现信 ...

为什么是采样率5k呢?我没看出来。 500个点我是看出来了,0.1/0.0002=500.另外,我原来以为100,400就是100hz,400hz了。想来肯定是错的。但还没搞清楚原因。
水平很菜,还望指教,谢谢!

charlesg 发表于 2014-9-14 22:39:58

imjacob 发表于 2014-9-14 22:26
为什么是采样率5k呢?我没看出来。 500个点我是看出来了,0.1/0.0002=500.另外,我原来以为100,400就 ...

t = 0:0.0002:0.1;
因为上面这段。
t的间隔是0.0002(如果默认为秒的话,就是5KHz了)

imjacob 发表于 2014-9-15 08:46:17

charlesg 发表于 2014-9-14 22:39
t = 0:0.0002:0.1;
因为上面这段。
t的间隔是0.0002(如果默认为秒的话,就是5KHz了) ...

那最终的结果100代表1khz是因为 1/0.1=10,所以要扩大10倍吗。我不理解,只能这么乱猜了

charlesg 发表于 2014-9-15 23:56:22

imjacob 发表于 2014-9-15 08:46
那最终的结果100代表1khz是因为 1/0.1=10,所以要扩大10倍吗。我不理解,只能这么乱猜了 ...

可能你拘泥于所谓的时域频域。
仔细想想,一堆离散的点,有频率吗?有时间吗?

imjacob 发表于 2014-9-16 09:13:57

charlesg 发表于 2014-9-15 23:56
可能你拘泥于所谓的时域频域。
仔细想想,一堆离散的点,有频率吗?有时间吗? ...

恩。但sin(2*pi*1000*t)这个函数怎么会是离散的点呢?他的频率是1khz的正弦波,然后采样频率是5khz。所以一个周期要采样5各点。因为要采样500各点,所以需要100个周期。当然可以做FFT了

imjacob 发表于 2014-9-17 22:02:07

本帖最后由 imjacob 于 2014-9-17 22:10 编辑

自己参照网上弄了个程序,基本满足我的要求:

close all;               %先关闭所有图片
F1=50;                  %信号1频率(Hz)
Fs=256;                %采样频率(Hz)
N=256;               %采样点数
t=;   %采样时刻

%信号
S=sin(2*pi*F1*t);
%显示原始信号
plot(S);
title('原始信号');

Y = fft(S,N);                        %做FFT变换
Ayy = (abs(Y));                            %取模

figure;
Ayy=Ayy/(N/2);                           %换算成实际的幅度
Ayy(1)=Ayy(1)/2;
F=(-1)*Fs/N;                  %换算成实际的频率值
plot(F(1:N/2),Ayy(1:N/2));         %显示换算后的FFT模值结果
title('幅度-频率曲线图');

figure;
Pyy=;
for i=1:N/2
Pyy(i)=phase(Y(i));                  %计算相位
Pyy(i)=Pyy(i)*180/pi;               %换算为角度
end;
plot(F(1:N/2),Pyy(1:N/2));            %显示相位图
title('相位-频率曲线图');

imjacob 发表于 2014-9-17 22:07:34

本帖最后由 imjacob 于 2014-9-17 22:09 编辑

imjacob 发表于 2014-9-17 22:02
自己参照网上弄了个程序,基本满足我的要求:

close all;               %先关闭所有图片


但我的问题是 这里只用了fft和 abs,phase就求得了幅度谱和相位谱,为什么看到有些文章上会用到功率谱来得到 幅度谱和相位谱呢?这两种方法有什么区别呢?
页: [1]
查看完整版本: 在matlab中怎么画sin(x)的频谱图,相位图?