matlab读取图片的频率,获得时域图之后,也获得了频域图,但是如何查看频率呢......
本帖最后由 zmy240778 于 2017-12-8 09:09 編輯
上面那個圖都是時域,下面那個圖都是我通過FFT轉化得到的頻域,
但是我得到的頻域上面有很多分支,我看不清哪個是一階頻率,哪個是二階頻率。
但是我看別人的,就很清楚,
所以想請教一下,這個應該怎么做。
下面附上我的matlab程序。
%FFT變換,獲得采樣數據基本信息,時域圖,頻域圖
%這里的向量都用行向量,假設被測變量是速度,單位為m/s
clear;
close all;
A=importdata('DATA.TXT');? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? %通過儀器測量的原始數據,存儲為data.txt中,附件中有一個模版(該信號極不規則)
%將測量數據賦給A,此時A為N×2的數組
x=A(:,1);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? %將A中的第一列賦值給x,形成時間序列
x=x';? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? %將列向量變成行向量
y=A(:,2);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? %將A中的第二列賦值給y,形成被測量序列
y=y';? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? %將列向量變成行向量
%顯示數據基本信息
fprintf('\n數據基本信息:\n')
fprintf('? ?? ???采樣點數 = %7.0f \n',length(x))? ?? ?? ?? ?? ?? ?? ?? ? %輸出采樣數據個數
fprintf('? ?? ???采樣時間 = %7.3f s\n',max(x)-min(x))? ?? ?? ?? ?? ?? ???%輸出采樣耗時
fprintf('? ?? ???采樣頻率 = %7.1f Hz\n',length(x)/(max(x)-min(x)))? ?%輸出采樣頻率
fprintf('? ?? ???最小速度 = %7.3f m/s\n',min(y))? ?? ?? ?? ?? ?? ?? ?? ? %輸出本次采樣被測量最小值
fprintf('? ?? ???平均速度 = %7.3f m/s\n',mean(y))? ?? ?? ?? ?? ?? ?? ? %輸出本次采樣被測量平均值
fprintf('? ?? ???速度中值 = %7.3f m/s\n',median(y))? ?? ?? ?? ?? ?? ? %輸出本次采樣被測量中值
fprintf('? ?? ???最大速度 = %7.3f m/s\n',max(y))? ?? ?? ?? ?? ?? ?? ?? ???%輸出本次采樣被測量最大值
fprintf('? ?? ???標準方差 = %7.3f \n',std(y))? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? %輸出本次采樣數據標準差
fprintf('? ?? ? 協 方 差 = %7.3f \n',cov(y))? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???%輸出本次采樣數據協方差
fprintf('? ???自相關系數 = %7.3f \n\n',corrcoef(y))? ?? ?? ?? ?? ?? ?? ???%輸出本次采樣數據自相關系數
%顯示原始數據曲線圖(時域)
subplot(2,1,1);
plot(x,y)? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???%顯示原始數據曲線圖
axis([min(x) max(x) 1.1*floor(min(y)) 1.1*ceil(max(y))])? ?? ?? ?? ? %優化坐標,可有可無
xlabel('時間 (s)');
ylabel('被測變量y');
title('原始信號(時域)');
grid;
%傅立葉變換
y=y-mean(y);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???%消去直流分量,使頻譜更能體現有效信息
Fs=5000;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???%得到原始數據data.txt時,儀器的采樣頻率。其實就是length(x)/(max(x)-min(x));
N=1012108;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? %data.txt中的被測量個數,即采樣個數。其實就是length(y);
z=fft(y);
%頻譜分析
f=(0:N-1)*Fs/N;
Mag=2*abs(z)/N;
%幅值,單位同被測變量y
Pyy=Mag.^2;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? %能量;對實數系列X,有 X.*X=X.*conj(X)=abs(X).^2=X.^2,故這里有很多表達方式
%顯示頻譜圖(頻域)
subplot(2,1,2,'Linewidth',2)
plot(f(1:N/2),Mag(1:N/2),'r')? ?? ?? ?? ?? ?? ?? ?? ? %顯示頻譜圖
%? ?? ?? ?? ? 將這里的Pyy改成Mag就是 幅值-頻率圖了
axis([min(f(1:N/2)) max(f(1:N/2)) 1.1*floor(min(Pyy(1:N/2))) 1.1*ceil(max(Pyy(1:N/2)))])
xlabel('頻率 (Hz)')
ylabel('能量')
title('頻譜圖(頻域)')
grid on;
%返回最大能量對應的頻率和周期值
[a,b]=max(Pyy(1:N/2));
fprintf('\n傅立葉變換結果:\n')
fprintf('? ?? ?? ???FFT_f = %1.3f Hz\n',f(b))? ?? ?? ?? ? %輸出最大值對應的頻率
fprintf('? ?? ?? ???FFT_T = %1.3f s\n',1/f(b))? ?? ?? ? %輸出最大值對應的周期
總結
以上是生活随笔為你收集整理的matlab读取图片的频率,获得时域图之后,也获得了频域图,但是如何查看频率呢......的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习导论(张志华):核定义
- 下一篇: 机器学习导论(张志华):核定义(2)