1. 程式人生 > >一維信號頻譜圖仿真——matlab

一維信號頻譜圖仿真——matlab

font 要求 16px cnblogs 折線圖 nbsp 0.00 頻譜 足夠

程序1:

%在MATLAB中是用連續信號在等時間間隔點的樣值來近似地表示連續信號的,當采樣時間間隔足夠小時,這些離散的采樣值就能較好地近似出連續信號,matlab中連續信號的顯示實際上還是離散信號的顯示,只是取樣點特別
%多的時候,用線連接起來,顯示出來的圖形就比較圓滑,接近連續信號;如果取樣點特別少,連接起來就會變成折線;
 clear all;   %這個其實可以沒有,只不過以前出過問題,現在就加上!
 N=1024;      %這個是你舉得信號的點數,隨便你了
 fs=16000;       %這個是抽樣頻率,記得要高於信號中最高頻率的2倍
 t=(0:N-1)/fs;%信號時域橫軸向量,以等間隔抽樣時間1/fs為一系列時間點做橫向坐標軸,因為信號的周期為1/20
,即0.05s,而1024點的抽樣時間為20.48s,所以畫出來的圖形大概為400多個周期,周期太多,太集中 t1=(0:3)/fs; %顯示出來後,看起來就像正方形。而且抽樣時間為0.02,一個周期為0.05,所以一個周期內就取了3個點,一個周期的圖形顯示出來後明顯是個折線圖;如圖subplot(1,3,3);如果一個周期內多取一些點,圖形就會越 t2=0:0.000001:0.05;%接近原圖形,如圖subplot(1,4,4); f=(0:N-1)*fs/N; %信號頻域橫軸向量,不過待會要減半處理一下 x=sin(2*pi*125.*t); %想分析什麽函數,自己寫 x1=sin(2*pi*20.*t1); x2
=sin(2*pi*20.*t2); y=abs(fft(x)); %頻域分析,不過記得要求模 f=f(1:N/2); %減半了,根據那奎斯特抽樣定理,抽樣頻率要高於信號中最高頻率的兩倍,才不會失真,因此頻譜中(fs/2,fs)為無用譜,故頻域信號的定義域向量與值域向量都應該做減半處理。 y=y(1:N/2); %減半了 %subplot(2,2,1) %畫圖 %plot(t,x); %subplot(2,2,2) %畫圖 plot(f,y); %subplot(2,2,3) %plot(t1,x1); %subplot(2,2,4) %plot(t2,x2);

程序2:

%  在MATLAB中是用連續信號在等時間間隔點的樣值來近似地表示連續信號的,當采樣時間間隔足夠小時,這些離散的采樣值就能較好地近似出連續信號,matlab中連續信號的顯示實際上還是離散信號的顯示,只是取樣點特別
%多的時候,用線連接起來,顯示出來的圖形就比較圓滑,接近連續信號;如果取樣點特別少,連接起來就會變成折線;
clear all;   %這個其實可以沒有,只不過以前出過問題,現在就加上!
 N=1024;      %這個是你舉得信號的點數,隨便你了
 fs=50;       %這個是抽樣頻率,記得要高於信號中最高頻率的2倍
 t=(0:N-1)/fs;%信號時域橫軸向量,以等間隔抽樣時間1/fs為一系列時間點做橫向坐標軸,因為信號的周期為1/20,即0.05s,而1024點的抽樣時間為20.48s,所以畫出來的圖形大概為400多個周期,周期太多,太集中
 t1=(0:3)/fs; %顯示出來後,看起來就像正方形。而且抽樣時間為0.02,一個周期為0.05,所以一個周期內就取了3個點,一個周期的圖形顯示出來後明顯是個折線圖;如圖subplot(2,2,3);如果一個周期內多取一些點,圖形就會越
 t2=0:0.000001:0.05;%接近原圖形,如圖subplot(2,2,4);
 f=(0:N-1)*fs/N;    %信號頻域橫軸向量,不過待會要減半處理一下
 x=sin(2*pi*20.*t);   %想分析什麽函數,自己寫
 x1=sin(2*pi*20.*t1);
  x2=sin(2*pi*20.*t2);
 y=abs(fft(x));     %頻域分析,不過記得要求模
 f=f(1:N/2);      %減半了,根據那奎斯特抽樣定理,抽樣頻率要高於信號中最高頻率的兩倍,才不會失真,因此頻譜中(fs/2,fs)為無用譜,故頻域信號的定義域向量與值域向量都應該做減半處理。
 y=y(1:N/2);      %減半了
 subplot(2,2,1)   %畫圖
 plot(t,x);
 subplot(2,2,2)   %畫圖
 plot(f,y);
subplot(2,2,3)
plot(t1,x1);
subplot(2,2,4)
plot(t2,x2);

一維信號頻譜圖仿真——matlab