আমি কীভাবে এফএফটিতে প্রতিটি মানের ফ্রিকোয়েন্সি পেতে পারি?


148

আমার একটি এফএফটি ফলাফল রয়েছে। এগুলি দুটি doubleঅ্যারেতে সঞ্চয় করা হয় : একটি আসল অংশ অ্যারে এবং একটি কাল্পনিক অংশ অ্যারে। এই অ্যারেগুলির প্রতিটি উপাদানের সাথে সামঞ্জস্য করা ফ্রিকোয়েন্সি আমি কীভাবে নির্ধারণ করব?

অন্য কথায়, আমি একটি অ্যারে তৈরি করতে চাই যা আমার এফএফটির প্রতিটি বাস্তব এবং কাল্পনিক উপাদানগুলির জন্য ফ্রিকোয়েন্সি সঞ্চয় করে।


আমি সি # নেট এ এটি করি। আপনি কি আমাকে সাহায্য করতে পারেন?
রাঙ্গো

9
যদি আপনি কোনও এফএফটির আসল এবং কল্পিত অংশগুলির প্রাসঙ্গিকতা বুঝতে না পারেন তবে আপনি কোনও অর্থবহ ফলাফল পাচ্ছেন না, সুতরাং ফলাফলগুলি কীভাবে ব্যাখ্যা করতে হয় তা বোঝার জন্য আপনাকে কিছু এফএফটি এবং সিগন্যাল প্রসেসিং টিউটোরিয়াল সন্ধান করা উচিত। আমি মনে করি এটি সম্ভবত সম্ভবত আপনি এফএফটি বা পাওয়ার স্পেকট্রাল ঘনত্বের মাত্রা চাইচ্ছেন whatever
the_mandrill

ধন্যবাদ! আমি প্রতিটি ফ্রেমের শীর্ষ ফ্রিকোয়েন্সি পেতে চাই (ফ্রেমের দৈর্ঘ্য উইন্ডো দৈর্ঘ্যের এবং শিফটের দৈর্ঘ্যের উপর নির্ভর করে)
রাঙ্গো

উত্তর:


350

এফএফটির প্রথম বিন হ'ল ডিসি (0 হার্জ), দ্বিতীয় বিনটি Fs / N, যেখানে Fsনমুনার হার এবং Nএফএফটির আকার is পরের বিন হয় 2 * Fs / N। সাধারণ পরিপ্রেক্ষিতে এই প্রকাশ করার জন্য, n তম বিন হয় n * Fs / N

সুতরাং যদি আপনার নমুনার হারটি Fs44.1 কেএজেডজ এবং আপনার এফএফটি আকার N1024 হয় তবে এফএফটি আউটপুট বিনগুলি এখানে রয়েছে:

  0:   0 * 44100 / 1024 =     0.0 Hz
  1:   1 * 44100 / 1024 =    43.1 Hz
  2:   2 * 44100 / 1024 =    86.1 Hz
  3:   3 * 44100 / 1024 =   129.2 Hz
  4: ...
  5: ...
     ...
511: 511 * 44100 / 1024 = 22006.9 Hz

লক্ষ্য করুন একটি বাস্তব ইনপুট সংকেত জন্য (কল্পিত অংশের সব শূন্য) FFT দ্বিতীয়ার্ধে (থেকে বিন N / 2 + 1থেকে N - 1) কোন দরকারী অতিরিক্ত তথ্য (তারা প্রথম অনুবন্ধী জটিল প্রতিসাম্য আছে ধারণ N / 2 - 1বিন)। সর্বশেষ দরকারী বিন (ব্যবহারিক N / 2 - 1অ্যাপ্লিকেশনগুলির জন্য ) এ রয়েছে , যা উপরোক্ত উদাহরণটিতে 22006.9 হার্জেডের সাথে মিলে যায়। বিন এ N / 2Nyquist ফ্রিকোয়েন্সি, অর্থাত্ শক্তি প্রতিনিধিত্ব করেFs / 2 (= 22050 এই উদাহরণে Hz হয়), কিন্তু এই সাধারণ নয় কোন ব্যবহারিক প্রয়োগের, যেহেতু anti-aliasing ফিল্টার সাধারণত কোনো সংকেত এবং উপরে কৃশ হবে Fs / 2


8
দ্রষ্টব্য - উত্তরটি কিছুটা ভুল 5 0 থেকে N / 2 সহ অন্তর্ভুক্ত বিনগুলিগুলিতে দরকারী মান রয়েছে।
ডেভিড ভ্যানটি

4
সম্পাদনা এবং স্পষ্টকরণের জন্য ধন্যবাদ ... আমি অনুমান করি এটি এখানেই আমি ব্যবহারিকতার কিছু অভাব প্রকাশ করি। আমি: তবে মাস্টার, এফএফটি-র কাজটি ন্যুইকিস্ট পর্যন্ত! আপনি: পদাওয়ান, আপনার সত্যিই এটি ফিল্টার করা উচিত।
ডেভিড ভ্যান

5
আমি আশা করি আমি উত্তরগুলি তারকাতে পারতাম। এই উত্তরটি মূল প্রশ্নের চেয়েও ভাল!
স্কাইলিয়ন

14
@ পলআর - আমি এই বিস্ময়কর উত্তরের জন্য আপনাকে ধন্যবাদ জানাতে চাই যা বছরের পর বছর ধরে আমাকে পরিবেশন করেছে। আমার স্ট্যাকওভারফ্লো অ্যাকাউন্ট হওয়ার আগে আমি এই উত্তরটি দেখতে যাব এবং একবার সাইন আপ করার পরে আমি আপনাকে ধন্যবাদ জানাতে ভুলে গিয়েছিলাম। আমি সম্প্রতি এফএফটি স্টাফগুলিতে একবার নজর রেখেছিলাম এবং আমি আপনার উত্তরটির কথা মনে করেছি এবং এখনই এটি দেখেছি। একবার আমি এখানে এলে, আপনাকে ধন্যবাদ মনে পড়ল ... তাই আপনাকে ধন্যবাদ! আমি যখনই কারও সাথে এফএফটিটির অনুভূমিক অক্ষের প্রতিটি বিন্দুটি ব্যাখ্যা করার বিষয়ে কারও সাথে বিতর্ক করি, আমি কেবল তাদের এই লিঙ্কটিতে নির্দেশ করি।
রায়রেং

6
@ রাইরিং: আপনাকে অনেক ধন্যবাদ - আমার কাছে মনে হয় এটাই এখানে ~ 5 বছরে প্রশ্নের উত্তর দেওয়ার I've বছরে আমার মধ্যে সবচেয়ে সেরা স্বীকৃতি!
পল আর

55

আমার উত্তর এখানে দেখুন

মন্তব্যের জবাব:

এফএফটি আসলে সাইন এবং কোসাইন ফাংশন (বেস ফাংশন) এর সাথে ইনপুট সিগন্যালের আন্তঃসম্পর্ককে সমানভাবে ব্যবধানযুক্ত ফ্রিকোয়েন্সিগুলির পরিসরে গণনা করে । প্রদত্ত এফএফটি আউটপুটের জন্য, আমি পোস্ট করা উত্তর অনুসারে একটি সম্পর্কিত ফ্রিকোয়েন্সি (এফ) রয়েছে। আউটপুট নমুনার আসল অংশটি হ'ল ইনপুট সিগন্যালের আন্তঃসম্পর্ক cos(2*pi*F*t)এবং কল্পিত অংশটি হ'ল ইনপুট সিগন্যালের ক্রস-সম্পর্ক sin(2*pi*F*t)। ইনপুট সিগন্যাল sinএবং cosফাংশনগুলির সাথে সম্পর্কিত হওয়ার কারণটি হ'ল ইনপুট সিগন্যাল এবং বেস ফাংশনগুলির মধ্যে পর্বের পার্থক্যের জন্য অ্যাকাউন্ট করা।

জটিল এফএফটি আউটপুটটির প্রস্থতা নিয়ে, আপনি ইনপুট সিগন্যাল পর্যায়ে নির্বিশেষে ইনপুট সিগন্যাল সাইনোসয়েডগুলির সাথে কতটা ভালভাবে সংযোগ করতে পারেন তার একটি পরিমাপ পাবেন। আপনি যদি কেবলমাত্র একটি সংকেতের ফ্রিকোয়েন্সি বিষয়বস্তু বিশ্লেষণ করে থাকেন তবে আপনি প্রায়শই এফএফটির জটিল আউটপুটটির দৈর্ঘ্য বা দৈর্ঘ্যের স্কোয়ার গ্রহণ করবেন।


আসল এবং কালিরিয়াল অংশটি এফএফটির ফলাফল যা ব্যবহার করে? আমার জন্য ব্যাখ্যা করুন। আপনাকে ধন্যবাদ
রাঙ্গো

5
এই উত্তরটি আরও ভালবাসার দাবি রাখে।
উজ্জ্বল তারকা

1
জটিল আউটপুটগুলির দৈর্ঘ্যকে প্রতিটি দ্বিগুণ করতে হবে? (যদি আমি আমার ব্যাখ্যাটি
ওল্ফ

18

আমি নিম্নলিখিত ব্যবহার করেছি:

public static double Index2Freq(int i, double samples, int nFFT) {
  return (double) i * (samples / nFFT / 2.);
}

public static int Freq2Index(double freq, double samples, int nFFT) {
  return (int) (freq / (samples / nFFT / 2.0));
}

ইনপুটগুলি হ'ল:

  • i: অ্যাক্সেস বিন
  • samples: হার্টজে নমুনার হার (অর্থাত্ 8000 হার্জ, 44100 হার্জ ইত্যাদি)
  • nFFT: এফএফটি ভেক্টরের আকার

7
আপনি কী samplesবা এর সাথে প্রতিনিধিত্ব করছেন তা মানুষ সঠিকভাবে জানতে পারে না nFFT। সুতরাং দয়া করে এটি আরও ব্যাখ্যাযোগ্য করুন।
মোস্তার

14
গৃহীত উত্তর বলছে এটি হওয়া উচিত i * samples / nFFT2সেখানে অতিরিক্ত কেন ? আমি কিছু অনুপস্থিত করছি?
ইয়াতী সাগাদ

13

এফএফটি আউটপুট সহগের (আকার এন-এর জটিল ইনপুটের জন্য) 0 থেকে এন - 1 এর মধ্যে [এলওউ, এমআইডি, এইচআই, এইচআই, এমআইডি, লো) ফ্রিকোয়েন্সি হিসাবে শ্রেণিবদ্ধ হয়।

আমি বিবেচনা করব যে কে-তে থাকা উপাদানটির এন.কে. তে উপাদান হিসাবে একই ফ্রিকোয়েন্সি রয়েছে, যেহেতু বাস্তব তথ্য, এফএফটি [এনকে] = এফএফটি [কে] এর জটিল সংযুক্তি।

LOW থেকে HIGH ফ্রিকোয়েন্সি পর্যন্ত স্ক্যান করার ক্রম

0,

 1,
 N-1,

 2,
 N-2

 ...

 [N/2] - 1,
 N - ([N/2] - 1) = [N/2]+1,

 [N/2]

ইনডেক্স i = 0 থেকে [এন / 2] এর ফ্রিকোয়েন্সিগুলির [এন / 2] +1 গ্রুপ রয়েছে, যার প্রতিটি রয়েছে frequency = i * SamplingFrequency / N

সুতরাং বিন এফএফটি [কে] এর ফ্রিকোয়েন্সিটি হ'ল:

if k <= [N/2] then k * SamplingFrequency / N
if k >= [N/2] then (N-k) * SamplingFrequency / N

5

আপনার কে তম এফএফটি ফলাফলের ফ্রিকোয়েন্সি 2 * পাই * কে / এন।


6
আমার ধারণা এটি রেডিয়ানে থাকবে
বার্নাবি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.