matlab绘制正弦信号频谱图(虚频谱、实频谱、单、双边相位谱、单、双边幅频谱)

您所在的位置:网站首页 matlab画三角函数图像 matlab绘制正弦信号频谱图(虚频谱、实频谱、单、双边相位谱、单、双边幅频谱)

matlab绘制正弦信号频谱图(虚频谱、实频谱、单、双边相位谱、单、双边幅频谱)

2023-04-06 20:44| 来源: 网络整理| 查看: 265

matlab绘制正弦信号频谱图(虚、实频谱、单、双边相位谱、单、双边幅频谱)

  原文链接:https://www.cnblogs.com/tablog/p/xinhaochuli.html

  首先我们今天绘制的正弦信号的函数表达式:f(x)=sin(2*π*f*t),其中f=2. 

  我使用的是matlab2020b,打开matlab后,新建脚本。

  我们先画出sin(2*π*f*t)信号的图像:

f=2; T=1/f; Fs=100; %采样率 Ts=1/Fs; t=0:Ts:1-Ts; %t范围0~1,步长0.01 n=length(t); y=sin(2*pi*f*t); %正弦信号函数 sinplot=figure; plot(t,y) %绘制函数图像 x轴为时间t,y轴为信号函数 xlabel('时间(s)') %x轴名称 ylabel('信号') %y轴名称 title('原信号图像') %图像顶部名称 grid on

  函数图像如下:

 

  然后对函数进行快速傅里叶变换、计算实部虚部,绘制幅频谱、相频谱、实频谱、虚频谱。

  代码如下:

[Doain,Range]=cFFT(y,Fs); Doain2=Doain(1,51:100); stem(Range(1,51:100),abs(Doain2)*2,'Marker','none','LineWidth',3);%离散绘制幅频谱,取消原图像小圆圈,线条粗细3xlabel('Freq(Hz)') ylabel('幅值') title('单边幅频谱') grid axis([-2.5,2.5,-1.5,1.5]) %坐标显示范围:x轴-2.5~2.5,y轴-1.5~1.5 CnR=real(Doain); %实部 CnI=imag(Doain); %虚部 Cn=(CnR.^2+CnI.^2).^(1/2); %幅值 fain=tand(CnI./CnR)/3; %相位角 fain=fain(1,48:54); %去除影响因素 figure stem(Range,CnR) %离散绘制 grid axis([-6,6,-2,2]) title('实频谱') xlabel('Hz') ylabel('CnR') figure stem(Range,CnI,'Marker','none','LineWidth',3) grid axis([-2.5,2.5,-1,1]) title('虚频谱') xlabel('Hz') ylabel('CnI') figure stem(Range,Cn,'Marker','none','LineWidth',3) grid axis([-2.5,2.5,-0.5,1]) title('双边幅频谱') xlabel('Hz') ylabel('|Cn|') figure stem(Range(1,48:54),-fain,'Marker','none','LineWidth',3) grid axis([-2.5,2.5,-2.5,2.5]) title('双边相频谱') xlabel('Hz') ylabel('相位角') figure fain2=fain(1,4:7); stem(Range(1,51:54),-fain2,'Marker','none','LineWidth',3) grid axis([-2.5,2.5,-2.5,1.5]) title('单边相频谱') xlabel('Hz') ylabel('相位角') figure plot(t,y) xlabel('时间(s)') ylabel('信号') title('原信号图像') grid on function[X,freq]=cFFT(x,Fs) %修正 N=length(x); if mod(N,2)==0 k=-N/2:N/2-1; else k=-(N-1)/2:(N-1)/2; end T=N/Fs; freq=k/T; X=fft(x)/N; X=fftshift(X); end

  绘制图像如下:

 

  最后附上完整代码:

f=2; T=1/f; Fs=100; Ts=1/Fs; t=0:Ts:1-Ts; n=length(t); y=sin(2*pi*f*t); sinplot=figure [Doain,Range]=cFFT(y,Fs); Doain2=Doain(1,51:100); stem(Range(1,51:100),abs(Doain2)*2,'Marker','none','LineWidth',3); xlabel('Freq(Hz)') ylabel('幅值') title('单边幅频谱') grid axis([-2.5,2.5,-1.5,1.5]) CnR=real(Doain); CnI=imag(Doain); Cn=(CnR.^2+CnI.^2).^(1/2); fain=tand(CnI./CnR)/3; fain=fain(1,48:54); figure stem(Range,CnR) grid axis([-6,6,-2,2]) title('实频谱') xlabel('Hz') ylabel('CnR') figure stem(Range,CnI,'Marker','none','LineWidth',3) grid axis([-2.5,2.5,-1,1]) title('虚频谱') xlabel('Hz') ylabel('CnI') figure stem(Range,Cn,'Marker','none','LineWidth',3) grid axis([-2.5,2.5,-0.5,1]) title('双边幅频谱') xlabel('Hz') ylabel('|Cn|') figure stem(Range(1,48:54),-fain,'Marker','none','LineWidth',3) grid axis([-2.5,2.5,-2.5,2.5]) title('双边相频谱') xlabel('Hz') ylabel('相位角') figure fain2=fain(1,4:7); stem(Range(1,51:54),-fain2,'Marker','none','LineWidth',3) grid axis([-2.5,2.5,-2.5,1.5]) title('单边相频谱') xlabel('Hz') ylabel('相位角') figure plot(t,y) xlabel('时间(s)') ylabel('信号') title('原信号图像') grid on function[X,freq]=cFFT(x,Fs) N=length(x); if mod(N,2)==0 k=-N/2:N/2-1; else k=-(N-1)/2:(N-1)/2; end T=N/Fs; freq=k/T; X=fft(x)/N; X=fftshift(X); end

 延迟T/4后的代码

 

fo=2; T=1/fo; Fs=100; Ts=1/Fs; t=0:Ts:1-Ts; n=length(t); y=sin(2*pi*fo*t-pi/2); sinplot=figure [Doain,Range]=centeredFFT(y,Fs); Doain2=Doain(1,51:100); stem(Range(1,51:100),abs(Doain2)*2,'Marker','none','LineWidth',3); xlabel('Freq(Hz)') ylabel('幅值') title('单边幅频谱') grid axis([-2.5,2.5,-1,1.5]) CnR=real(Doain); CnI=imag(Doain); Cn=(CnR.^2+CnI.^2).^(1/2); fain=tand(CnR./CnI)*3.2; fain=fain(1,48:54); figure stem(Range,CnR,'Marker','none','LineWidth',3) grid axis([-2.5,2.5,-1,1]) title('实频谱') xlabel('Hz') ylabel('CnR') figure stem(Range,CnI) grid axis([-6,6,-2,2]) title('虚频谱') xlabel('Hz') ylabel('CnI') figure stem(Range,Cn,'Marker','none','LineWidth',3) grid axis([-2.5,2.5,-0.5,1]) title('双边幅频谱') xlabel('Hz') ylabel('|Cn|') figure stem(Range(1,48:54),abs(fain),'Marker','none','LineWidth',3) grid axis([-2.5,2.5,-4,4]) title('双边相频谱') xlabel('Hz') ylabel('相位角') figure fain2=fain(1,4:7); stem(Range(1,51:54),abs(fain2),'Marker','none','LineWidth',3) grid axis([-2.5,2.5,-4,4]) title('单边相频谱') xlabel('Hz') ylabel('相位角') figure plot(t,y) xlabel('时间(s)') ylabel('y') title('原信号图像') grid on function[X,freq]=centeredFFT(x,Fs) N=length(x); if mod(N,2)==0 k=-N/2:N/2-1; % N even else k=-(N-1)/2:(N-1)/2; % N odd end T=N/Fs; freq=k/T; %the frequency axis accordingly X=fft(x)/N; X=fftshift(X); End

 

 

 

文件链接: matlab绘制正弦信号频谱.zip   (matlabxinhao1文件是本文所提到的信号,matlabxinhao2是将本文提到的信号延迟T/4之后的信号绘图。)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3