matlab绘制正弦信号频谱图(虚频谱、实频谱、单、双边相位谱、单、双边幅频谱)
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.01n=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.5CnR=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('相位⾓')figureplot(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;endT=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('相位⾓')figureplot(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;endT=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('相位⾓')figureplot(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 evenelse
k=-(N-1)/2:(N-1)/2; % N oddendT=N/Fs;
freq=k/T; %the frequency axisaccordinglyX=fft(x)/N; X=fftshift(X);End
⽂件链接: (matlabxinhao1⽂件是本⽂所提到的信号,matlabxinhao2是将本⽂提到的信号延迟T/4之后的信号绘图。)