Peducate.ir

Peducate.ir

با هم بیاموزیم
Peducate.ir

Peducate.ir

با هم بیاموزیم

محاسبه تبدیل فوریه گسسته با دستور fft در متلب

محاسبه تبدیل فوریه گسسته با دستور fft در متلب

در نرم افزار متلب (Matlab)، با دستور fft(x)، تبدیل فوریه گسسته بردار x محاسبه می شود. بردار حاصل از لحاظ طول با بردار x هم اندازه است

 

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

t=linspace(-2*pi,2*pi,100);

x=cos(t);

y=fft(x);

y=abs(y);

bar(y(1:5),0.5)

در مثال زیر تبدیل فوریه گسسته سیگنال مستطیلی که یک تابع سینک در حوزه فرکانس است را با دستور stem رسم می کنیم:

t=linspace(-5,5,100);

y=heaviside(t+0.5)-heaviside(t-0.5);

z=fft(y);

z=abs(z);

stem(z)

نظرات 15 + ارسال نظر
محمد دوشنبه 26 دی 1401 ساعت 11:27 ب.ظ

سلام
برای دیدن گذرای dc شکل موج جریان خطا چکار باید بکنم ؟

سلام دوست عزیز
اگر امکانش هست سوالتون رو کاملتر بفرمایید

مینا دوشنبه 6 تیر 1401 ساعت 01:22 ب.ظ

سلام
اگر بخواهیم نمودارمون تو ربع اول دستگاه مختصات قرار بگیره ،چه تغییری باید در کدزیر اعمال کنیم:


fs=100
nn=length(y)
X=fft(y)
Y=fftshift(X)
fshift=(-nn/2:nn/2-1)*(fs/nn)
powershift=abs(Y).^2/nn
plot(fshift,powershift)
در کد بالا y داده های جریان هست و fs فرکانس نمونه برداری

با سلام
اگر منظورتون اینه که بخواید کل شکل در سمت راست محور افقی قرار بگیره باید نمودار رو شیفت بدید ولی اگر منظورتون اینه که بخواید شکل رو فقط به ازای فرکانس های مثبت رسم کنید، در اینصورت از دستور xlim استفاده کنید

آروین تاجیک جمعه 3 تیر 1401 ساعت 09:24 ق.ظ

سلام دوست عزیز
از کد زیر استفاده کنید:
fs=100
nn=length(y)
X=fft(y)
Y=fftshift(X)
fshift=(-nn/2:nn/2-1)*(fs/nn)
powershift=abs(Y).^2/nn
plot(fshift,powershift)
در کد بالا y داده های جریان هست و fs فرکانس نمونه برداری
سلام این کدی که نوشتید به زمان اصلا دقت نداره.سیگنال خروجی من جریان بر حسب زمان هست .کدی که شما نوشتید اصلا داده های زمانی فراخوانی و استفاده نمیکنه.

سلام
کد درست هست. فرکانس نمونه برداری تعیین کننده رزولوشن بردار زمان است.
میتونید جهت اطمینان از صحت کد، تبدیل فوریه تابع سینوس یا پالس رو حساب کنید و ببینید که با تئوری یکسان هست

حامد پنج‌شنبه 26 خرداد 1401 ساعت 09:12 ب.ظ http://Mylife98.blogfa.com

با سلام
نتیجه این شد
https://s6.uupload.ir/files/47_zrhb.jpg

سلام دوست عزیز
ایمیل خوتون رو چک کنید

حامد چهارشنبه 25 خرداد 1401 ساعت 08:37 ب.ظ http://Mylife98.blogfa.com

سلام
ببخشید که دوباره سوال میپرسم
و ممنون از شما که همیشه پاسخگو هستین...


من یک معادله ارتعاشی بر حسب زمان دارم((نمودارمکان زمانش میشه لینک زیر))
https://s6.uupload.ir/files/c3d1ddb6-b533-466b-84e2-b6ba3071d155_98kk.jpg

و با یک رابطه تونستم نمودار شتاب زمانش رو هم بدست بیارم...(((الان عکس نمودار شتاب زمانش رو ندارم))


حالا که من نقاط نمودار شتاب زمان رو دارم ،،،،اگر بخوام به نمودار زیر برسم، چه روندی رو باید طی کنم .؟

https://s6.uupload.ir/files/42906b99-10a7-4d2a-938c-3dfe62a7164c_h7ce.jpg



با تشکر

سلام دوست عزیز
چون من به فیزیک مساله شما تسلط ندارم در نتیجه فرض رو بر این میزارم که نمودار شتاب-فرکانس همون طیف فوریه نمودار شتاب-زمان هست. در نتیجه از کد زیر استفاده کنید و ببینید به همون نمودار مورد نظر می رسید یا خیر:
fs=100
nn=length(y)
X=fft(y)
Y=fftshift(X)
fshift=(-nn/2:nn/2-1)*(fs/nn)
powershift=abs(Y).^2/nn
plot(fshift,powershift)
در کد بالا y داده های شتاب در حوزه زمان هست و fs فرکانس نمونه برداری

نتیجه رو بمن اطلاع دهید. سپاس

آروین تاجیک یکشنبه 22 خرداد 1401 ساعت 11:30 ق.ظ

سلام من یک نمودار جریان بر حسب زمان دارم که فرکانس کاریم 50 هرتز هست و میخوام تبدبلش کنم به جریان در حوزه فرکانس با طول1000 یا 1500. و مقدار مولفه هارمونیک اصلی.سوم.پنجم و.. میخوام دقیقا باید چکار کنم و چه کدی بزنم در متلب؟ در ضمن داده های جریان و زمان هرکدوم حدود 1000 نموه هست حداقل
ممنون از شما

سلام دوست عزیز
از کد زیر استفاده کنید:
fs=100
nn=length(y)
X=fft(y)
Y=fftshift(X)
fshift=(-nn/2:nn/2-1)*(fs/nn)
powershift=abs(Y).^2/nn
plot(fshift,powershift)
در کد بالا y داده های جریان هست و fs فرکانس نمونه برداری

حامد شنبه 21 خرداد 1401 ساعت 01:07 ق.ظ http://Mylife98.blogfa.com

با سلام و احترام
در ادامه سوال قبلی ، میخواستم ببینم که اگر از معادلات ارتعاشی تابع زمان، فرم فضای حالت بگیرم و با دستور ode45 ، یکسری نقطه (نقاط تابع جابجایی و سرعت بر حسب زمان ) بگیرم و در ادامه این روند را طی کنم :
1: نقاط را داخل بردار v ذخیره کنم
2: fv=fft(v)
3: stem(abs(fv))

نموداری که میگیرم ، جابجایی و سرعت ، بر حسب فرکانس است...؟

سلام دوست عزیز
من سوال شما رو اینجوری متوجه شدم:
"برداری دارید که درایه های آن سرعت برحسب زمان هست. حال از این بردار تبدیل فوریه میگیرید. میخواید بدونید که بردار جدید fv که شامل تبدیل فوریه سرعت هست آیا سرعت برحسب فرکانس هست یا خیر؟"

بردار fv در حقیقت تبدیل فوریه سرعت در حوزه فرکانس هست. به بیان دیگر طیف فرکانسی سرعت می باشد.

اگر باز هم پاسخ برای شما مبهم بود بفرمایید دقیق تر بیان کنم.

حامد چهارشنبه 18 خرداد 1401 ساعت 02:56 ب.ظ http://Mylife98.blogfa.com

با سلام
من از یک سری معادله ارتعاشی سیستم جرم و فنر و دمپر، فرم فضای حالت گرفتم و با استفاده از دستور ode 45، نمودار های جابجایی و سرعت بر حسب زمان گرفتم.
حال اگر بخواهم نمودارهایم در حوزه‌ی فرکانس باشد چکار کنم...؟

مثلا نمودارهایم شتاب بر حسب فرکانس بشه.

با تشکر

سلام دوست عزیز
اگر رابطه معادلات مساله شما در حوزه زمان و فرکانس مشابه تبدیل فوریه است باید از معادلات زمانی تبدیل فوریه بگیرید. در غیر اینصورت باید ابتدا بدانید چه رابطه ای بین حوزه زمان و فرکانس مساله شما برقرار است و طبق آن داده هایتان را از حوزه زمان به حوزه فرکانس منتقل کنید.

آروین تاجیک یکشنبه 29 اسفند 1400 ساعت 04:31 ب.ظ

سلام منم تز اسلیسکوپ یک‌نمودار ولتاژ بر حسب زمان دارم البته داده هاش از در اکسل هم دارم.میخوام تبدیلش کنم به نمودار طیف هارمونیکی جریان بر حسب فرکانس.یک‌مقاومت ثابت دارم که با تقسینم ولتاژ بر اون منقاومت مقادیر جریانم بدست میاد ولی نمیدونم برای نمنودار طیف هارمونیکی جریان بر حسب فرکانس باید چکار کنم.ممنون میشم کمک کنید

سلام دوست عزیز
ابتدا داده های جریان را در یک بردار مثلا با نام y ذخیره کنید. برای محاسبه طیف هارمونیکی جریان بر حسب فرکانس از دستور زیر استفاده کنید:
z=fft(y)
با دستور فوق، همان داده های زمانی به حوزه فرکانس تبدیل می شود. فقط توجه داشته باشید چون تبدیل فوریه معمولا مختلط است، برای رسم، باید ابتدا از بردار z اندازه گرفته و سپس با دستور stem آن را رسم کنید:
stem(abs(z))

مجتبی دوشنبه 18 تیر 1397 ساعت 10:37 ق.ظ

سلام. من در محیط سیمولینک متلب شکل موجی رو بدست آوردم حالا میخوام روی این شکل موج با استفاده از chirp z transform طیف ها را بدست بیارم. باید چیکار کنم؟؟

سلام
لطفا در لینک زیر نحوه به کار گیری دستور chirp z transform کامل توضیح داده شده است
https://tinyurl.com/y9o3k42l

معصومه دوشنبه 14 خرداد 1397 ساعت 02:27 ب.ظ

با سلام من یکسری نقطه از تابعی دارم که این تابع سرعت برحسب زمان است.حال میخواهم این تابع را به حوزه فرکانس ببرم چطور این کار را بکنم؟

با سلام
نقاطی که در اختیار دارید را در یک بردار مثلا با نام v ذخیره کنید. حال با دستور زیر داده های حوزه زمان را در بردار دیگری مثلا با نام fv ذخیره می شود.
fv=fft(v)
یعنی با دستور فوق، همان داده های زمانی به حوزه فرکانس تبدیل می شود. فقط توجه داشته باشید چون تبدیل فوریه معمولا مختلط است، برای رسم، باید ابتدا از بردار fv اندازه گرفته و سپس با دستور stem آن را رسم کنید (برای رسم به دستور زیر توجه کنید).
stem(abs(fv))

شیرین چهارشنبه 1 آذر 1396 ساعت 10:30 ق.ظ

سلام ببخشید تبدیل سری فوریه
x(t)=1 به X(W) چی میشه؟داخل پرانتز امگا هستش میشه لطفا جواب بدین

تبدیل فوریه تابع فوق برابر
2pi Delta (w)
است
که pi برابر 3.14 بوده و Delta تابع ضربه است.
w هم همان امگا است

مسعود شنبه 27 خرداد 1396 ساعت 02:45 ق.ظ

با عرض سلام و احترام:
من از یک سیگنال سینوسی هارمونیک دار مربوط به جریان یک ترانسفورماتور از صفر تا 1000 میلی ثانیه به صورت گسسته متناسب با هر میلی ثانیه نیز یک جریان را دارم به چه صورتی میتوانم مقدار موثر و زاویه فاز جریان با فرکانس 50 هرتز را محاسبه کنم ...( در ضمن از سیگنال گسسته گفته شده fft گرفتم اما نتوانستم میزان مولفه فرکانس های 50 هرتز را جدا کنم)---
از راهنمایی و لطف اساتید و مهندسان محترم ممنون میشم

سلام
کافی است ابتدا سیگنال خود را از فیلتر پایین گذر عبور داده تا هارمونیکهای آن حذف شود (با فرض اینکه هارمونیکها فرکانسهایی بیش از فرکانس مورد نظر شما داشته باشند در غیر اینصورت باید از فیلتر میانگذر استفاده کنید). سپس مقادیر خواسته شده را حساب کنید. مثلا برای محاسبه مقدار موثر از دستور rms استفاده کنید و با رسم زاویه فاز را بیابید.
در طراحی فیلتر هم می توانید از دستور butter استفاده کنید.
کلیه موارد ذکر شده در سایت قبلا توضیح داده شده اند که با جستجو می توانید آنها را بیابید.

رضا یکشنبه 10 بهمن 1395 ساعت 11:01 ق.ظ

با سلام . من میخواهم خروجی یک سنسور ویبره(که در واقع یک عدد است در حوزه زمان یا (mm/s)و با استفاده از ترانسمیتر به (20-4)میلی امپر) نصب شده روی الکتروموتور را در حوزه فرکانس مشاهده کنم.ایا دستگاهی وجود دارد؟ یا برنامه ای که بشود روی میکرو پروسسور ریخت
ممنون میشم راهنماییم کنین09385405758

.

با سلام
اگر خروجی یک عدد تنها است، مشاهده آن در حوزه فرکانس بی معنی است مگر آنکه فرمول خاصی برای آن وجود داشته باشد که در این صورت با آی سی های AVR و با یک برنامه ساده انجام چنین کاری امکان پذیر است. چون معمولا تابعیت در حوزه زمان را می توان به حوزه فرکانس منتقل کرد (البته با توجه به اینکه شما سوال را در بخش مربوط به مطلب تبدیل فوریه مطرح کردید، همچین ذهنیتی دارم).
البته امیدوارم سوال شما رو درست متوجه شده باشم. در غیر اینصورت لطفا بیشتر توضیح دهید.

عباس پنج‌شنبه 18 آذر 1395 ساعت 01:33 ب.ظ

با سلام
اصولا تبدیل فوریه یک سیگنال گسسته در حوزه زمان، یک سیگنال متناوب با دوره تناوب 2*pi در حوزه فرکانس است. این قضیه با راه حل ارائه شده چطور نمایش داده میشود؟

سلام
در اینجا طیف سیگنال مد نظر است. به مثال زیر توجه کنید:
Fs = 150; % Sampling frequency
t = -0.5:1/Fs:0.5; % Time vector of 1 second
w = .2; % width of rectangle
x = rectpuls(t, w); % Generate Square Pulse
nfft = 512; % Length of FFT
% Take fft, padding with zeros so that length(X) is equal to nfft
equal to nfft
X = fft(x,nfft);
% FFT is symmetric, throw away second half
X = X(1:nfft/2);
% Take the magnitude of fft of x
mx = abs(X);
% Frequency vector
f = (0:nfft/2-1)*Fs/nfft;
% Generate the plot, title and labels.
figure(1);
plot(t,x);
title('Square Pulse Signal');
xlabel('Time (s)');
ylabel('Amplitude');
figure(2);
plot(f,mx);
title('Power Spectrum of a Square Pulse');
xlabel('Frequency (Hz)');
ylabel('Power');
ولی برای آنچه مد نظر شماست میتوانید بازه فرکانسی را با توجه به تعداد نمونه ها در بازه ذکر شده محدود کنید. مثلا در موقع رسم از کد زیر استفاده کنید:
f=linspace(0,2*pi,Fs)

ایمیل شما بعد از ثبت نمایش داده نخواهد شد