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.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

 

 

 

文件鏈接:https://ricardio.lanzous.com/iJDdrjoewpe      (matlabxinhao1文件是本文所提到的信號,matlabxinhao2是將本文提到的信號延遲T/4之后的信號繪圖。)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM