Matlab信号处理FFT变换后的幅频相频曲线.docx
《Matlab信号处理FFT变换后的幅频相频曲线.docx》由会员分享,可在线阅读,更多相关《Matlab信号处理FFT变换后的幅频相频曲线.docx(6页珍藏版)》请在冰点文库上搜索。
用matlab编程:
构造一个信号函数,用FFT变换后,做出其幅频及相位的曲线。
1、流程图
2、程序代码
%用fft求幅频相频
clc;%清空
clearall;%清除所有变量
closeall;%关闭所有窗口
A=10;%振幅
fw=50;%固有频率
phi=pi/3;%相位
step=1000;
t=0:
1/step:
10*pi;%时间t
y=A*sin(2*pi*fw*t+phi);%正弦函数y
f=step*(0:
256)/512;%频率
subplot(3,1,1);%三行一列第一幅图
plot(t,y);%绘制图形
xlabel('t/s','fontsize',13);%横坐标显示t/s,字号13
ylabel('y','fontsize',13);%纵坐标显示y,字号13
title('正弦函数曲线','fontsize',13);%显示标题
Y=fft(y,512);%对y进行傅里叶变换
subplot(3,1,2);%三行一列第二幅图
plot(f,abs(Y(1:
257)));%绘制图形
xlabel('f/Hz','fontsize',13);%横坐标显示f/Hz,字号13
ylabel('幅值','fontsize',13);%纵坐标显示幅值,字号13
title('幅频特性曲线','fontsize',13);%显示标题
[value,index]=max(abs(Y));%将abs(Y)最大值点的横坐标、纵坐标分别赋给
value和index
text(f(index),value,sprintf('maxpiont=(%f,%f)',f(index),value),'fonts
ize',13);%显示最大值点坐标
subplot(3,1,3);%三行一列第三幅图
plot(f,angle(Y(1:
257))*180/pi);%绘制图形
xlabel('f/Hz','fontsize',13);%横坐标显示f/Hz,字号13
ylabel('相位/°','fontsize',13);%纵坐标显示相位/°,字号13
title('相位特性曲线','fontsize',13);%显示标题
3、程序运行结果
图1N=9时fft结果
4、困惑及自我理解
为什么最大值的横坐标为50.781250,而不是50,是不是因为f=step*(0:
256)/512并不能将所有的f列出,所以修改程序如下:
%用fft求幅频相频
clc;%清空
clearall;%清除所有变量
closeall;%关闭所有窗口
A=10;%振幅
fw=50;%固有频率
phi=pi/3;%相位
step=1000;
t=0:
1/step:
10*pi;%时间t
y=A*sin(2*pi*fw*t+phi);%正弦函数y
N=input('请输入2的指数N=');
f=step*(0:
2^(N-1))/2^N;%频率
subplot(3,1,1);%三行一列第一幅图
plot(t,y);%绘制图形
xlabel('t/s','fontsize',13);%横坐标显示t/s,字号13
ylabel('y','fontsize',13);%纵坐标显示y,字号13
title('正弦函数曲线','fontsize',13);%显示标题
Y=fft(y,2^N);%对y进行傅里叶变换
subplot(3,1,2);%三行一列第二幅图
plot(f,abs(Y(1:
2^(N-1)+1)));%绘制图形
xlabel('f/Hz','fontsize',13);%横坐标显示f/Hz,字号13
ylabel('幅值','fontsize',13);%纵坐标显示幅值,字号13
title('幅频特性曲线','fontsize',13);%显示标题
[value,index]=max(abs(Y));%将abs(Y)最大值点的横坐标、纵坐标分别赋给value和index
text(f(index),value,sprintf('maxpiont=(%f,%f)',f(index),value),'fontsize',13);%显示最大值点坐标
subplot(3,1,3);%三行一列第三幅图
plot(f,angle(Y(1:
2^(N-1)+1))*180/pi);%绘制图形
xlabel('f/Hz','fontsize',13);%横坐标显示f/Hz,字号13
ylabel('相位/°','fontsize',13);%纵坐标显示相位/°,字号13
title('相位特性曲线','fontsize',13);%显示标题
当N=10时,结果如图2
图2
当N=12时,结果如图3
图3
当N=20时,结果如图4
图4
通过观察比较图1到图4,可以很明显的看到最大值点的横坐标越来越接近50,自然会想到当N趋于无穷时,那么横坐标的值就是50。
由此给我们的启示是,在以后求fft时,尽量将N取大,尤其是噪声信号与有用信号的频率很接近时,这样能保证有更高的精度。