اطلاعیه

Collapse
No announcement yet.

fft از صوت

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

    fft از صوت

    سلام
    من به یه مشکل بزرگ درباره fft برخوردم
    میشه یه نفر به من بگه که وقتی یه صوت رو از میکروفون میگیریم و میخوایم ببینیم کدوم مولفه فرکانسیش قویتره چه کار باید بکنیم؟
    سیگنالی که از دستور record blocking با مثلا Fs=44100hzمیگیریم گسسته هست؟بعد اگه این سیگنال رو بدیم به fft دقیقا چی به ما میده؟
    ممنون

    #2
    پاسخ : fft از صوت

    نوشته اصلی توسط z.esb
    سلام
    من به یه مشکل بزرگ درباره fft برخوردم
    میشه یه نفر به من بگه که وقتی یه صوت رو از میکروفون میگیریم و میخوایم ببینیم کدوم مولفه فرکانسیش قویتره چه کار باید بکنیم؟
    سیگنالی که از دستور record blocking با مثلا Fs=44100hzمیگیریم گسسته هست؟بعد اگه این سیگنال رو بدیم به fft دقیقا چی به ما میده؟
    ممنون
    http://www.eca.ir/forum2/index.php?topic=7030.msg430148#msg430148
    لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
    لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
    با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
    اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
    يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

    دیدگاه


      #3
      پاسخ : fft از صوت

      در ادامه ی پاسخ دوستمون، اینو بگم که:
      فرض کن صوت رو با فرکانس fs نمونه برداری کردی و الان n نمونه از صوت در اختیارته!
      وقتی که fft بگیری، این n نمونه تبدیل میشن به داده هایی در حوزه ی فرکانس، که معمولا هم مختلط هستن، و تعدادشون همون n تاست!
      حوزه ی فرکانس، چون مختلطه، براش هم اندازه تعریف میکنیم و هم فاز! اما چیزی که بیشتر به کار ما میاد معمولا، همون اندازه ست. یا همون دستوراتی مانند abs (درنرم افزارهایی مانند متلب و متمتیکا) اینکارو میکنه (بعد از گرفتن fft )
      خب حالا چه تناظری وجود داره؟
      با توجه به لینکی که دوستمون گذاشتن، جواب اینه که بعد از اینکه fft گرفتی، داده ی اول معادل فرکانس 0 (یا همون DC) میشه و دادهآ‌ی n/2 معادل fs میشه. داده های بین داده ی اول و داده ی n/2 متناظر میشن با فرکانس هایی بین 0 تا fs که رابطه ی خطی دارن.
      :read:
      1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
      2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
      3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

      دیدگاه


        #4
        پاسخ : fft از صوت

        بذار یه مثال عددی بزنم:
        فرض کن 4 ثانیه صوت داری، و فرکانس نمونه برداریت هم 10 کیلو هرتزه. بنابراین، 40000 تا داده در اختیار تو قرار داره ( هر ثانیه 10000 تا، 4 ثانیه ست میشه 40000)
        وقتی که ازش fft بگیری، بازهم همون 40000 تا داده رو داری. اما با این تفاوت که در حوزه ی فرکانس هستی!
        با توجه به توضیحات، اولین نمونه متناظر با 0 هرتز میشه و نمونه ی 20000 ام متناظر میشه با 10 کیلوهرتز! حالا اگه 10000 رو بر 20000 تقسیم کنیم، میشه: نیم. و این یعنی دقت فرکانسی شما نیم هرتزه! یعنی اطلاعات مربوط به فرکانس های : 0.5 ، 1، 1.5، 2 ، 2.5، و .... 9999، 9999.5 و 10000 در اختیار شما قرار داره!
        :rolleyes:
        1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
        2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
        3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

        دیدگاه


          #5
          پاسخ : fft از صوت

          خیلی خیلی متشکر از توضیحاتتون
          :wow:
          فقط یه چیزی من fft که گرفتم یه ماتریس بهم داده که 2 تا ستون داره؟چرا؟ :eek:
          ولی تعداد سطرها درسته برابر با تعداد نمونه هاست

          دیدگاه


            #6
            پاسخ : fft از صوت

            نوشته اصلی توسط محمدصادق رستمی
            بذار یه مثال عددی بزنم:
            فرض کن 4 ثانیه صوت داری، و فرکانس نمونه برداریت هم 10 کیلو هرتزه. بنابراین، 40000 تا داده در اختیار تو قرار داره ( هر ثانیه 10000 تا، 4 ثانیه ست میشه 40000)
            وقتی که ازش fft بگیری، بازهم همون 40000 تا داده رو داری. اما با این تفاوت که در حوزه ی فرکانس هستی!
            با توجه به توضیحات، اولین نمونه متناظر با 0 هرتز میشه و نمونه ی 20000 ام متناظر میشه با 10 کیلوهرتز! حالا اگه 10000 رو بر 20000 تقسیم کنیم، میشه: نیم. و این یعنی دقت فرکانسی شما نیم هرتزه! یعنی اطلاعات مربوط به فرکانس های : 0.5 ، 1، 1.5، 2 ، 2.5، و .... 9999، 9999.5 و 10000 در اختیار شما قرار داره!
            :rolleyes:
            این چیزی که شما میگید معادل این هست درسته؟ Fs=44100
            Y=fft(I
            f=0:(2*Fs/n):Fs
            plot(f,abs(Y
            اما ارور داره اخه :cry2:
            Error using plot
            Vectors must be the same lengths.

            دیدگاه


              #7
              پاسخ : fft از صوت

              ببین اینا به کارت میاد:
              http://www.public.iastate.edu/~e_m.350/FFT%205.pdf
              http://www.utdallas.edu/~dlm/3350%20...un%20huang.pdf
              http://www.ele.uri.edu/~hansenj/projects/ele436/fft.pdf
              مخصوصا دومی مثال های خیلی خوبی داره!
              توجه: اگر از n تا داده fft بگیری، nتا عدد مختلط خواهی داشت!

              اینم ببین:
              http://stackoverflow.com/questions/1...ab-fft-example

              :read:
              1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
              2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
              3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

              دیدگاه


                #8
                پاسخ : fft از صوت

                مشکل اینه که(fft(x یه ماتریس میده با دو تاستون شما خودتون امتحان بکنید اخه!!به هیچ وجه خروجیش یه بردار نیست :eek:

                دیدگاه


                  #9
                  پاسخ : fft از صوت


                  خروجی که من میبینم این جوریه وقتی که فرکانسhz 440 بهش میدم اخه واقعا این انصافه؟؟؟ اصلن دیگه نمی فهمم چیکارش کنم :cry:
                  کدم هم اینه:
                  Y = fft(I);
                  Y(length(Y)/2+1 : end)=[];
                  f = [0:length(Y) - 1] * Fs;
                  plot(f,abs(Y));

                  دیدگاه


                    #10
                    پاسخ : fft از صوت

                    سلام ..

                    در این فایل ها چند مثال هست، که در کنار مطالب خوب دوستان، شاید بتونه کمکتون کنه .. (از Documentation نرم افزار MATLAB هم برگرفته شده دو فایل از چهار فایل پلود شده .. ) .. موفق و سلامت و شاد باشید ..
                    دوستان! مدتی کمتر به سایت میام ..

                    دیدگاه


                      #11
                      پاسخ : fft از صوت

                      موقعی که از یک سیگنال fft می گیرید چیزی که بر می گردونه و شما با دستور plot می تونید ببینیش (البته قبلش باید به اندازه تبدیلش کنی) از فرکانس صفر تا فرکانس نمونه برداری شماست. اما ما به طور شهودی عادت داریم فرکانس 2/fs- تا 2/fs رو ببینیم و در واقع همین هم درسته! در بقیه جاها همین طیفه که داره تکرار میشه و اون هم به خاطر نمونه برداریه! در واقع طیف صحیح همونیه که ما عادت به دیدنش داریم.
                      حالا او چیزی که شما بدست آوردی بعد از fft گرفتن باید تابع پایین رو روش اعمال کنی تا درست نشون بده
                      fs = 8000 %for example
                      f = fft(y);
                      ff = abs((fftshift(f)));
                      x = linspace(-max(size(ff))/2,max(size(ff))/2,max(size(ff)));
                      xf = x * fs;
                      plot(xf,ff)
                      xlabel('frequency (Hz)&#039
                      به درک درست برس، تفکر کن و وارد عمل شو.

                      دیدگاه


                        #12
                        پاسخ : fft از صوت

                        نوشته اصلی توسط محمدصادق رستمی
                        در ادامه ی پاسخ دوستمون، اینو بگم که:
                        فرض کن صوت رو با فرکانس fs نمونه برداری کردی و الان n نمونه از صوت در اختیارته!
                        وقتی که fft بگیری، این n نمونه تبدیل میشن به داده هایی در حوزه ی فرکانس، که معمولا هم مختلط هستن، و تعدادشون همون n تاست!
                        حوزه ی فرکانس، چون مختلطه، براش هم اندازه تعریف میکنیم و هم فاز! اما چیزی که بیشتر به کار ما میاد معمولا، همون اندازه ست. یا همون دستوراتی مانند abs (درنرم افزارهایی مانند متلب و متمتیکا) اینکارو میکنه (بعد از گرفتن fft )
                        خب حالا چه تناظری وجود داره؟
                        با توجه به لینکی که دوستمون گذاشتن، جواب اینه که بعد از اینکه fft گرفتی، داده ی اول معادل فرکانس 0 (یا همون DC) میشه و دادهآ‌ی n/2 معادل fs میشه. داده های بین داده ی اول و داده ی n/2 متناظر میشن با فرکانس هایی بین 0 تا fs که رابطه ی خطی دارن.
                        :read:
                        سلام.شما این n/2رو از کجا آوردی هرچی فکر میکنم به نتیجه نمیرسم؟
                        ضمنا دوستان لطفا این سوالمو جواب بدند:
                        f=k*fs/N
                        fفرکانس آنالوگه.Kهم فرکانس دیجیتال.
                        حالا اگر من شکل زمانی صوت رو بخوام نشون بدم میشهplot(yمثلا
                        درسته؟
                        اگر هم fft ش بخوام میشهplot(abs(fft(y(1:256)))درسته؟
                        حالا سوالم اینه با اون رابطه بین فراکنس انالوگ و دیجیتال اینا رو میشه بهم تبدیل کرد؟
                        1)اونجایی که بولد کردم،داده n/2طبق این فرمول باید معادل k=n/2*N/fs باشه.درسته؟؟؟؟
                        2)الان اون دستوراتکه نوشتم برای رسم حوزه فرکانس و زمانش کفایت میکنه؟تبدیل دیگری لازم نیست؟
                        هرگز توان خودت را در تغيير دادن خويش،دست كم نگير!
                        هرگز توان خودت را در تغيير دادن ديگران،دست بالا نگير!

                        http://www.eca.ir/forum2/index.php?topic=112772.0

                        دیدگاه


                          #13
                          پاسخ : fft از صوت

                          سلام
                          من از یک سیگنال صدا تبدیل فوریه گرفتم
                          [y,fs]=wavread(‘s.wav&rsquo
                          Fy=fft(y)
                          الان میخوام همون سیگنال رو به روش قطبی (اندازه و فاز) و گرفتن تبدیل فوریه معکوس به شکل سیگنال اولیه برسم ولی نمیشه.
                          Phaz=unwrap(angle(fy))
                          Ay=abs(fy).*exp(i*180/pi*phaz)
                          Yy=ifft(ay)
                          ولی yy برابر y نمی شود
                          میشه علتش رو بگید؟
                          کسی تا به حال روی کدهای تفریق طیفی سیگنال صدا برای حذف نویز کار کرده؟
                          من توی نوشتن کر تفریق طیفی مشکل دارم.
                          ممنون

                          دیدگاه

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