Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wp-aparat domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/h241212/public_html/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wordpress-seo domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/h241212/public_html/wp-includes/functions.php on line 6114
تبدیل فوریه سریع یا FFT - omid zandi

تبدیل فوریه سریع یا FFT

تبدیل فوریه سریع FFT

فهرست مطالب

در این آموزش کوتاه می‌خواهیم تبدیل فوریه سریع یا FFT را معرفی کنیم. به بیان ریاضی کاری که این ابزار انجام می‌دهد تجزیه یک سیگنال به عوامل سازنده آن سیگنال است. عوامل سازنده در تبدیل فوریه سریع سینوسی‌ها با فرکانس‌های مختلف هستند. البته تبدیلات دیگری مانند تبدیل موجک وجود دارند که عوامل سازنده در آنها متفاوت است و در مطلب جداگانه‌ای به آن خواهیم پرداخت.

خیلی اوقات پیش میاد که در کاربردهای تحقیقاتی و دانشگاهی دنبال این هستیم که ببینیم در یک سیگنال چه مولفه‌های فرکانسی مهمی وجود دارد. برای مثال، با آنالیز سیگنال‌ ارتعاش یک موتور الکتریکی می‌توان وجود عیب در بخش‌های مختلف آن را شناسایی کرد. و یا از طریق آنالیز سیگنال الکتروکاردیوگرام یا ECG  می‌توان خیلی از بیماری‌های قلبی و ناهنجاری‌های مرتبط با آن را شناسایی کرد. تبدیل فوریه سریع یکی از ابزارهای خیلی خیلی مهم و کاربردی برای آنالیز سیگنال‌های واقعی و صنعتی است. در ادامه می‌خواهم چگونگی محاسبه تبدیل فوریه یک سیگنال را در نرم‌افزار قدرتمند متلب را آموزش بدهم.

مثال تبدیل فوریه سریع یا FFT

فرض کنید در یک کاربرد صنعتی سیگنال شکل زیر با استفاده از کارت داده‌برداری DAQ ثبت شده است و می‌خواهیم عناصر سازنده آن را تشخیص دهیم. در محاسبه تبدیل فوریه سریع  FFT باید فرکانس نمونه‌برداری کاملاً مشخص باشد. فرکانس نمونه‌برداری یعنی اینکه در هر ثانیه چند نمونه ثبت شده است و یا ثبت هر نمونه چند ثانیه طول کشیده است. مشخص است که از روی شکل ظاهری سیگنال نمی‌توان فرکانس‌های موجود در آن را تشخیص داد. شاید اگر سیگنال نویز کمی داشت می‌توانستیم این کار را انجام دهیم. ولی در کاربردهای صنعتی عموماً نویز شدیدی وجود دارند و شکل سیگنال‌ها تقریباً به همین صورت است.

سیگنال فرضی جهت محاسبه تبدیل فوریه سریع یا FFT
سیگنال فرضی جهت محاسبه تبدیل فوریه سریع یا FFT

در شکل زیر تبدیل فوریه این سیگنال نشان داده شده است. با توجه به این شکل مشخص است که درصد خیلی بالایی (۹۹ درصد!) سیگنال شکل بالا از دو فرکانس 50 و 100 هرتز تشکیل شده است که نویز تصادفی هم به آن اضافه شده است. بنابراین،‌ با توجه به این مثال ساده، می‌توان قدرت تبدیل فوریه سریع را درک کرد. با استفاده از FFT می‌توان محتوای فرکانسی سیگنال‌های صنعتی را استخراج نمود و از طریق آنها می‌توان اطلاعات سودمندی را هم به دست آورد.

تبدیل فوریه سریع یا FFT سیگنال
تبدیل فوریه سریع یا FFT سیگنال

با استفاده از برنامه زیر در نرم‌افزار متلب می‌توانید سیگنال‌های دلخواه و تبدیل فوریه آنها را رسم کنید. اگر سیگنال عملی دارید که در یک فایل CSV ذخیره شده است به راحتی با دستور csvread یا fileread می‌توانید آنها را در متلب فراخوانی کنید و به جای آرایه signal در برنامه زیر استفاده کنید تا تبدیل فوریه سریع FFT آن رسم شود. نکته آخر این است که از نظر ریاضی تبدیل فوریه سریع همانند سری فوریه زمان گسسته است و فرض می‌کند که سیگنالی که ثبت شده با همان طول ثبت‌شده متناوب است. به عبارت دیگر، اگر هزار داده ثبت شده است، تبدیل فوریه فرض می‌کند که سیگنال دارای دوره تناوب هزار نمونه است و سپس تبدیل فوریه در حقیقت همان ضرایب سری فوریه گسسته سیگنال است.

مشکلی که در این فرض ایجاد می شود این است که اگر داده‌های اول و آخر با هم برابر نباشند در سیگنال فرض شده توسط تبدیل فوریه سریع ناپیوستگی وجود دارد. به همین دلیل علاوه بر پیک‌های فرکانسی اصلی سیگنال یک سری پیک‌های جعلی (طبف نشتی) هم ایجاد می‌شوند. برای رع این مشکل قبل از وارد کردن سیگنال در دستور FFT سیگنال ثبت‌شده در یک پنجره ضرب می‌شود. پنجره‌های در حقیقت وزن‌‌دهی به نمونه‌های ثبت‌شده هستند و همیشه وزن نمونه اول و آخر صفر است. در نتیجه اگر پنجره در سیگنال ضرب شود نمونه اول و آخر همیشه صفر می‌شوند و دیگر طیف جعلی ایجاد نمی‌شود. در معروف‌ترین پنجره‌های استفاده‌شده در تبدیل فوریه سریع می‌توان به پنجره Hamming و Hanning اشاره کرد.

کد متلب MATLAB تبدیل فوریه سریع FFT

کد متلب

clc
clear;
close all;
warning off
%% Plot FFT Using Matlab

Fs = 10e3; % Sampling Rate in Hz
Ts = 1/Fs; % Sampling Time
Tf = 1; % Data Recording Length

t = 0:Ts:Tf ; t = t’ ;
signal = sin(2*pi*50*t) + 2*cos(2*pi*100*t) ; % define signal
signal = signal + randn(size(signal)) ; % add noise

L = numel(signal) ; % number of recorded data
signalFFT = fft(signal .* hamming(L));

P2 = abs(signalFFT/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);

freq = Fs*(0:(L/2))/L; % frequency range

Fig = figure(1);
Fig.WindowState = ‘normal’ ;
Fig.Color = [1 1 1] ;
plot(t , signal , ‘r’ , ‘linewidth’ , 3 );
xlabel(‘t (sec)’ , ‘FontSize’ , 14, ‘FontWeight’,’bold’);
ylabel(‘Amp’ , ‘FontSize’ , 14, ‘FontWeight’,’bold’);
title(‘Time Domain Signal’ , ‘FontSize’ , 14, ‘FontWeight’,’bold’);
fig = gca ;
fig.FontSize = 14 ;
fig.FontWeight = ‘B’ ;
grid on ;
xlim([0 0.1])

Fig = figure(2);
Fig.WindowState = ‘normal’ ;
Fig.Color = [1 1 1] ;
plot(freq , P1 , ‘r’ , ‘linewidth’ , 3 );
xlabel(‘freq (Hz)’ , ‘FontSize’ , 14, ‘FontWeight’,’bold’);
ylabel(‘Amp’ , ‘FontSize’ , 14, ‘FontWeight’,’bold’);
title(‘Signal Power Spectrum’ , ‘FontSize’ , 14, ‘FontWeight’,’bold’);

fig = gca ;
fig.FontSize = 14 ;
fig.FontWeight = ‘B’ ;
grid on ;
xlim([0 300])

پیروز و شاد و تندرست باشید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *