



https://ww2.mathworks.cn/products/matlab-online.html
Fclk=1; %時鐘頻率為1Hz
Num_T=1000; %信號長度為1000個時鐘周期
Num_Data=10; %數(shù)據(jù)線的個數(shù)10個
%%%%%%%%%%%%%%%%%%%%%%%% fft采樣設(shè)置
Fs=100; %采樣率為Fs
L=(Fs/Fclk)*Num_T; %信號長度(采樣總點數(shù)):Num_T個周期的信號,長度越長,fft精度越高,但是執(zhí)行時間越長
T=1/Fs; %采樣周期
t=(1:L)*T; %時間長度
%SIG_DATA=round(rand(Num_Data,2*Num_T)); %產(chǎn)生數(shù)據(jù)信號:0,1隨機分布
SIG_DATA=round(rand(Num_Data,Num_T)); %產(chǎn)生數(shù)據(jù)信號:0,1隨機分布
SIG_CLK=rand(1,2*Num_T); %產(chǎn)生時鐘信號
for i = 1:length(SIG_CLK)
if mod(i,2)
SIG_CLK(i)=1;
else
SIG_CLK(i)=0;
end
end
N=length(t);
LEN_CLK=zeros(1,N); %定義時鐘信號采樣序列
LEN_DATA=zeros(Num_Data,N); %定義數(shù)據(jù)信號采樣序列
for i=1:N
LEN_CLK(i)=SIG_CLK(ceil(i/((Fs/Fclk)/2))); %時鐘信號的采樣序列
for j=1:Num_Data
% LEN_DATA(j,i)=SIG_DATA(j,ceil(i/((Fs/Fclk)/2))); %數(shù)據(jù)信號的采樣序列
LEN_DATA(j,i)=SIG_DATA(j,ceil(i/(Fs/Fclk))); %數(shù)據(jù)信號的采樣序列
end
end
figure;
subplot(2,2,[1 2]);
plot(t,LEN_CLK+1.5*Num_Data,''''r''''); %畫出30個時鐘周期時鐘信號
set(gca,''''XLim'''',[0 30]);%x軸的數(shù)據(jù)顯示范圍,0-30
set(gca,''''ytick'''',[]);
grid on;
hold on
for j=1:Num_Data
plot(t,LEN_DATA(j,:)+(j-1)*1.5,''''k'''');
hold on
end
X_LEN_CLK=abs(fft(LEN_CLK));
subplot(2,2,3);
semilogx(Fs*(0:(L/2))/L,X_LEN_CLK(1:L/2+1)*2/L);
set(gca,''''XLim'''',[0.1 10000]);%x軸的數(shù)據(jù)顯示范圍
set(gca, ''''XTickLabel'''' ,{''''0.1'''',''''1'''',''''10'''',''''100'''',''''10K'''',''''100K''''}); %x軸頻率數(shù)據(jù)
title(''''時鐘頻譜'''');
set(gca,''''YLim'''',[-0.1 1]);
xlabel(''''f (Hz)'''');
ylabel(''''幅度'''');
X1_LEN_DATA= abs(fft(LEN_DATA(1,:)));
X_LEN_DATA = abs(fft(LEN_DATA(1,:)));
for j=2:Num_Data
X_LEN_DATA = abs(fft(LEN_DATA(j,:)))+X_LEN_DATA;
end
subplot(2,2,4);
semilogx(Fs*(0:(L/2))/L,X_LEN_DATA(1:L/2+1)*2/L,Fs*(0:(L/2))/L,X1_LEN_DATA(1:L/2+1)*2/L);
legend(['''''''',num2str(Num_Data),''''根-數(shù)據(jù)線''''],['''' 1根-數(shù)據(jù)線'''']);
set(gca,''''XLim'''',[0.1 10000]);%x軸的數(shù)據(jù)顯示范圍
set(gca, ''''XTickLabel'''' ,{''''0.1'''',''''1'''',''''10'''',''''100'''',''''10K'''',''''100K''''}); %x軸頻率數(shù)據(jù)
title(['''''''',num2str(Num_Data),''''數(shù)據(jù)線頻譜'''']);
set(gca,''''YLim'''',[-0.1 1]);
xlabel(''''f (Hz)'''');
ylabel(''''幅度'''');
(來源:硬件工程師煉成之路)


