站長留言

  • ✅ 本站維護及更新歷史紀錄,詳情請參考公告
  • ✅ 有任何意見、想法,歡迎留言給Spicy知道喔
  • ✅ 固定於每周一至周五更新Blogger文章,周末不定期
上課筆記大氣資料分析Matlab

【Matlab】Fourier Transform 傅立葉轉換 / 反轉換

tags: 大氣資料分析 Matlab

Common 簡介

Formula 公式

Application 應用

Code 程式碼

Fourier Transform 傅立葉轉換

  • 變數
    • c:振幅大小
    • fn:頻率
    • dt:資料時間解析度
    • N:資料筆數 (資料長度)
    • n:要分解的頻率
    • k:要合併的時間
  • 以下僅為 Function 副程式的部分
function [c, fn] = fourierTransform(xvalue, dt)

N=length(xvalue);

k=0:N-1;
for n=0:N-1
    fexp=exp(-i*2*pi*n*k/N);
    c(n+1)=sum(xvalue.*fexp*dt);
    fn(n+1)=n/(N*dt);
end

Fourier Inverse Transform 傅立葉反轉換

  • 變數
    • c:振幅大小
    • tk:位置,xvalue
    • dt:資料時間解析度
    • N:資料筆數 (資料長度)
    • n:要分解的頻率
    • k:要合併的時間
  • 以下僅為 Function 副程式的部分
function [tk] = fourierInverseTransform(c, dt)

N=length(c);

n=0:N-1;
for k=0:N-1
    fexp=exp(i*2*pi*n*k/N);
    tk(k+1)=sum(c.*fexp)/(N*dt);
end

Example 範例

Fourier Transform 傅立葉轉換

clear all
close all

% 載入資料
load 'ffttest_data.mat'

N=length(xvalue);
T=max(tvalue)-min(tvalue);
dt=T/N;

% 使用 Function 副程式
[c, fn] = fourierTransform(xvalue, dt);

% 振幅大小 c 取絕對值
plot(fn, abs(c), '-');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
title '<Fourier Transform> Frequency-Amplitude'
set(gca,'fontsize',16)
print '-dpng' 'Fourier Transform.png';
  • Result 結果

Fourier Inverse Transform 傅立葉反轉換

clear all
close all

% 載入資料
load 'ffttest_data.mat'

N=length(xvalue);
T=max(tvalue)-min(tvalue);
dt=T/N;

% 使用 Function 副程式,先傅立葉轉換,再傅立葉反轉換
[c, fn] = fourierTransform(xvalue, dt);
[tk]=fourierInverseTransform(c, dt);

plot(tvalue, tk, '-');
xlabel('Time');
ylabel('Amplitude');
title '<Fourier Inverse Transform> Time-Amplitude'
set(gca,'xlim',[0 10.23], 'fontsize',16)
print '-dpng' 'Fourier Inverse Transform.png';
  • Result 結果

Filter 篩選資料

clear all
close all

% 載入資料
load 'ffttest_data.mat'

N=length(xvalue);
T=max(tvalue)-min(tvalue);
dt=T/N;

% 使用 Function 副程式,先傅立葉轉換
[c, fn] = fourierTransform(xvalue, dt);
% 保留振幅大小 c 大於5的資料
f=find(c<5);
c(f)=0;

% 使用 Function 副程式,再傅立葉反轉換
[tk]=fourierInverseTransform(c, dt);

plot(tvalue, tk, 'r-');
xlabel('Time');
ylabel('Amplitude');
set(gca,'xlim',[0 10.23], 'fontsize',16)
print '-dpng' 'Fourier Inverse Transform-Filter.png';
  • Result 結果
    • Fourier Transform 傅立葉轉換
    • Fourier Inverse Transform 傅立葉反轉換

Comparison 比較

作圖
原始資料
傅立葉反轉換
振幅大於5
合併比較

Matlab 傅立葉相關 原生方法

Fourier Transform 傅立葉轉換

  • 方法名稱:fft
  • 使用方式:y=fft(x,n)
    • 對資料長度 n 的 x 資料進行傅立葉轉換

Fourier Inverse Transform 傅立葉反轉換

  • 方法名稱:ifft
  • 使用方式:x=fft(y,n)
    • 對資料長度 n 的 y 資料進行傅立葉反轉換

Reference 參考資料

  1. 大氣資料處理、分析與展示 上課講義
  2. fft 官方文件:https://www.mathworks.com/help/matlab/ref/fft.html
  3. ifft 官方文件:https://www.mathworks.com/help/matlab/ref/ifft.html

沒有留言:

張貼留言

本網站建議使用電腦或平板瀏覽