اطلاعیه

Collapse
No announcement yet.

fft در matlab

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    fft در matlab

    سلام.من یک دسته موج سینوسی با فرکانسهای مضرب اصلی دارم که می خوام از fft استفاده کرده و هارمونیک های موج را رسم کنم.
    لطفا مرا راهنمایی کنید.

    #2
    پاسخ : fft در matlab

    مثال تابع fft رو تو هلپ متلب نگاه کن

    دیدگاه


      #3
      پاسخ : fft در matlab

      سلام
      استفاده از دستور fft چند نکته داره. فرض میکنیم که سیگنال مورد نظر x و فرکانس نمونه برداری برابر fs باشد.
      مرحله اول: تعیین تعداد نقاط fft است که ما با nfft نشان میدهیم. برای دست یافتن به سرعت بالای محاسبات توصیه میکنند که nfft را به شکل توانی از 2 در نظر بگیریم(مثلا 1024 یا 2048 یا ...) از طرف دیگر nfft باید از تعداد نقاط تشکیل دهنده سیگنال بزرگتر باشد. برای آنکه به چنین nfft برسیم کافی است از دستور زیر استفاده کنیم:
      کد:
      nfft = 2^( nextpow2(length(x)) );
      مرحله دوم: تعیین محور فرکانس: دستور fft تنها یکسری اعداد مختلط به شما میدهد و هیچ اطلاعاتی در باره اینکه این اعداد به کدام فرکانس مربوط هستند نمیدهد. بنابراین برای رسم fft باید محور فرکانس را خودتان بسازید. برای اینکار از دستورات زیر استفاده کنید:
      کد:
      df = fs/nfft;
      f = 0:df:fs/2;
      مرحله سوم: محاسبه fft سیگنال که با دستور زیر انجام میشود:
      کد:
       X = fft(x,nfft);
      مرحله چهارم: اکنون fft سیگنال که با X نشان داده شده است را دارید. اما خاصیت تبدیل فوریه این است که نسبت به محور عمودی متقارن است یعنی نیمی از اعدادی که fft به شما میدهد تکراری است که رسم آنها بیهوده است بنابراین با دستور زیر مقادیر تکراری را حذف کنید:
      کد:
      X = X(1:nfft/2+1);
      مرحله پنجم و آخر: حالا میتوانید اندازه یا فاز fft را رسم کنید. بر فرض که بخواهید اندازه را رسم کنید از دستور زیر استفاده خواهید کرد:
      کد:
      plot(f,abs(X))
      این هم یک مثال
      کد:
      fs = 500;
      t = 0:1/fs:1;
      x = 5*sin(2*pi*50*t) + 1*sin(2*pi*150*t);
      nfft = 2^( nextpow2(length(x)) );
      df = fs/nfft;
      f = 0:df:fs/2;
      X = fft(x,nfft);
      X = X(1:nfft/2+1);
      plot(f,abs(X))

      دیدگاه


        #4
        سوال !

        سلام

        از اونجایی که فرکانس نمونه برداری حد اقل بیشتر از دو برابر بزرگترین مولفه فرکانسی در سیگنال ورودی هستش واسه همین شما بازه فرکانس رو به صورت زیر تعیین کردین :
        f = 0:df:fs/2
        اما این قسمت اولی رو اصلا متوجه نمیشم.
        df = fs/nfft;

        چرا بازه زمانی در محور فرکانس برابر است با فرکانس نمونه برداری تقسیم بر nfft ؟
        Life is Song , Song it

        دیدگاه


          #5
          پاسخ : fft در matlab

          سلام
          df رزولوشن فرکانسیه یعنی فاصله فرکانسی میان دو نقطه محاسبه شده fft
          fft به ما nfft نقطه میده. نقطه اول مقدار متوسط سیگناله(که همون فرکانس صفر محسوب میشه). از نقطه دوم تا نقطه nfft/2 + 1 ام نمایانگر محتویات فرکانسی سیگنال هستند. از نقطه nfft/2+2 به بعد، دیگر اطلاعات مفیدی وجود نداره. چون این نقاط عملا کپی نقاط دسته اول هستند(به خاطر دارید که تبدیل فوریه یک سیگنال حقیقی، نسبت به محور عمودی متقارن هست. یعنی نیمی از آن تکراری و بی ارزشه)
          بنابراین در مجموع nfft/2+1 نقطه وجود داره که در بازه فرکانسی 0 تا fs/2 به شکل یکنواختی پخش شدن. خوب حالا سوالی که باید پرسید اینه که فاصله میان این نقاط چیه؟ مشخصه! fs/2 تقسیم بر nfft/2 یا همون fs/nfft که من با df نشون دادم
          و یک نتیجه که میشه گرفت اینه که با افزایش nfft میتوان df رو کاهش و رزولوشن فرکانسی رو افزایش داد.

          البته در نسخه ها جدید matlam دستور spectrum کار تهیه محور فرکانسی رو هم انجام میده.

          دیدگاه


            #6
            پاسخ : fft در matlab

            ممنون از توضیحاتت منهدس
            Life is Song , Song it

            دیدگاه


              #7
              پاسخ : fft در matlab

              من هم خیلی از توضیحاتتون استفاده کردم
              متشکرم

              دیدگاه


                #8
                پاسخ : fft در matlab

                من هم استفاده کردم ممنون از همه

                دیدگاه


                  #9
                  پاسخ : fft در matlab

                  سلام.
                  من از این روشی که اینجا گفتید برای آنالیز فرکانسی فوریه استفاده کردم منتها مشکلی که وجود داره اینه که دامنه و فرکانس سیگنال موردنظرمو دقیق بهم نمیده. روشی وجود داره که بتونم این اطلاعات و دقیق تر بدست بیارم؟

                  دیدگاه


                    #10
                    پاسخ : fft در matlab

                    بسیار آموزنده عالی بود .

                    دیدگاه

                    لطفا صبر کنید...
                    X