Common 簡介
Application 應用
Code 程式碼
- 變數
- 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
- 變數
- 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 範例
clear all
close all
load 'ffttest_data.mat'
N=length(xvalue);
T=max(tvalue)-min(tvalue);
dt=T/N;
[c, fn] = fourierTransform(xvalue, dt);
plot(fn, abs(c), '-');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
title '<Fourier Transform> Frequency-Amplitude'
set(gca,'fontsize',16)
print '-dpng' 'Fourier Transform.png';
- Result 結果
clear all
close all
load 'ffttest_data.mat'
N=length(xvalue);
T=max(tvalue)-min(tvalue);
dt=T/N;
[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;
[c, fn] = fourierTransform(xvalue, dt);
f=find(c<5);
c(f)=0;
[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 傅立葉相關 原生方法
- 方法名稱:ifft
- 使用方式:
x=fft(y,n)
Reference 參考資料
- 大氣資料處理、分析與展示 上課講義
- fft 官方文件:https://www.mathworks.com/help/matlab/ref/fft.html
- ifft 官方文件:https://www.mathworks.com/help/matlab/ref/ifft.html
沒有留言:
張貼留言