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

时间:2024-02-24 22:16:47

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

  首先我们今天绘制的正弦信号的函数表达式: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);%离散绘制幅频谱,取消原图像小圆圈,线条粗细3
xlabel(
\'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之后的信号绘图。)