এফএফটি আউটপুট বোঝা


88

ডিএফটি / এফএফটি গণনার আউটপুট বুঝতে আমার কিছুটা সহায়তা দরকার।

আমি একজন অভিজ্ঞ সফটওয়্যার ইঞ্জিনিয়ার এবং কিছু স্মার্টফোন অ্যাক্সিলোমিটার রিডিং যেমন প্রধান ফ্রিকোয়েন্সিগুলি সন্ধানের অর্থ ব্যাখ্যা করা দরকার। দুর্ভাগ্যক্রমে, আমি আমার কলেজের বেশিরভাগ EE ক্লাসে পনের বছর আগে ঘুমিয়েছি, তবে আমি ডিএফটি এবং এফএফটি নিয়ে গত বেশ কয়েকদিন ধরে পড়ছি (সামান্য উপকারে, স্পষ্টতই)।

দয়া করে, "একটি EE ক্লাস নিন" এর কোনও প্রতিক্রিয়া নেই। আমি যদি আমার নিয়োগকর্তা আমাকে বেতন দেয় তবে তা করার পরিকল্পনা করছি। :)

সুতরাং এখানে আমার সমস্যা:

আমি 32 Hz এ একটি সংকেত ক্যাপচার করেছি। এখানে 32 পয়েন্টের 1 সেকেন্ডের নমুনা দেওয়া হয়েছে, যা আমি এক্সেলের মাধ্যমে চার্ট করেছি।

এখানে চিত্র বর্ণনা লিখুন

আমি তখন কলম্বিয়া বিশ্ববিদ্যালয় থেকে জাভাতে কিছু এফএফটি কোড পেয়েছি (" জাভায় নির্ভরযোগ্য এবং দ্রুত এফএফটি " সম্পর্কিত একটি পোস্টে পরামর্শগুলি অনুসরণ করার পরে) )।

এই প্রোগ্রামটির ফলাফল নিম্নরূপ as আমি বিশ্বাস করি এটি একটি স্থান এফএফটি চলছে, সুতরাং এটি ইনপুট এবং আউটপুট উভয়ের জন্য একই বাফারটিকে পুনরায় ব্যবহার করে।

Before: 

Re: [0.887  1.645  2.005  1.069  1.069  0.69  1.046  1.847  0.808  0.617  0.792  1.384  1.782  0.925  0.751  0.858  0.915  1.006  0.985  0.97  1.075  1.183  1.408  1.575  1.556  1.282  1.06  1.061  1.283  1.701  1.101  0.702  ]

Im: [0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  ]

After: 

Re: [37.054  1.774  -1.075  1.451  -0.653  -0.253  -1.686  -3.602  0.226  0.374  -0.194  -0.312  -1.432  0.429  0.709  -0.085  0.0090  -0.085  0.709  0.429  -1.432  -0.312  -0.194  0.374  0.226  -3.602  -1.686  -0.253  -0.653  1.451  -1.075  1.774  ]

Im: [0.0  1.474  -0.238  -2.026  -0.22  -0.24  -5.009  -1.398  0.416  -1.251  -0.708  -0.713  0.851  1.882  0.379  0.021  0.0  -0.021  -0.379  -1.882  -0.851  0.713  0.708  1.251  -0.416  1.398  5.009  0.24  0.22  2.026  0.238  -1.474  ]

সুতরাং, এই মুহুর্তে, আমি আউটপুটটির মাথা বা লেজগুলি তৈরি করতে পারি না। আমি ডিএফটি ধারণাগুলি বুঝতে পারি, যেমন আসল অংশটি উপাদান কোসাইন ওয়েভের প্রশস্ততা এবং কল্পিত অংশটি উপাদান সাইন ওয়েভের প্রশস্ততা। আমি এই চিত্রটিও দ্য সায়েন্টিস্ট অ্যান্ড ইঞ্জিনিয়ার গাইড টু ডিজিটাল সিগন্যাল প্রসেসিংয়ের দুর্দান্ত বই থেকে অনুসরণ করতে পারি " : এখানে চিত্র বর্ণনা লিখুন

সুতরাং আমার নির্দিষ্ট প্রশ্নগুলি হ'ল:

  1. এফএফটির আউটপুট থেকে, আমি কীভাবে "সর্বাধিক সংঘটিত ফ্রিকোয়েন্সি" খুঁজে পাব? এটি আমার অ্যাক্সিলোমিটার ডেটা বিশ্লেষণের অংশ। আমি কি আসল (কোসাইন) বা কল্পিত (সাইন) অ্যারেগুলি পড়তে পারি?

  2. আমার কাছে সময় ডোমেনে একটি 32-পয়েন্ট ইনপুট রয়েছে। এফএফটিটির আউটপুট বাস্তবের জন্য 16-উপাদান অ্যারে এবং কাল্পনিক জন্য 16-উপাদান অ্যারে হওয়া উচিত নয়? প্রোগ্রামটি কেন আমাকে আসল এবং কাল্পনিক অ্যারে 32 আকারের উভয় আউটপুট দেয়?

  3. পূর্ববর্তী প্রশ্নের সাথে সম্পর্কিত, আমি কীভাবে আউটপুট অ্যারে সূচিগুলি পার্স করব? 32 হার্জে নমুনাযুক্ত 32 টি নমুনাগুলির আমার ইনপুট দেওয়া, আমার বোধগম্যতা হল যে 16-এলিমেন্টের অ্যারে আউটপুটে তার সূচকটি সমানভাবে 1/2 নমুনা হার (32 হার্জ এর) পর্যন্ত ছড়িয়ে দেওয়া উচিত, তাই আমি বুঝতে পেরেছি যে প্রতিটি উপাদান অ্যারের প্রতিনিধিত্ব করে (32 হার্জ * 1/2) / 16 = 1 হার্জ?

  4. কেন এফএফটি আউটপুট নেতিবাচক মান আছে? আমি ভেবেছিলাম মানগুলি সিনোসয়েডের প্রশস্ততা উপস্থাপন করে। উদাহরণস্বরূপ, রিয়েল [3] = -1.075 এর আউটপুটটির বোঝা উচিত ফ্রিকোয়েনির কোসাইন ওয়েভের জন্য -1.075 এর প্রশস্ততা 3.. এটি কি ঠিক? প্রশস্ততা কীভাবে নেতিবাচক হতে পারে?


অ্যাক্সিলোমিটার রিডিংগুলি থেকে আপনি কী গুনতে চান: বেগ, দূরত্ব? অ্যাক্সিলোমিটার রিডিংয়ের আওয়াজ গাউসির বিতরণকে অনুসরণ করে এবং আমি দেখতে পাচ্ছি না যে একটি সাইন ওয়েভ কতটা মানানসই তার প্রতিকার করবে।
আলী

4
জাভা ট্যাগটি মুছে ফেলা উচিত কারণ এটি কোনও নির্দিষ্ট ভাষার চেয়ে বেশি জেনেরিক
ইউজার 3791372

কলম্বিয়া বিশ্ববিদ্যালয়ের স্যুসের দিকে তাকিয়ে, এটি মোটেই দক্ষ নয়। এটি প্রজাপতি অনুসন্ধানের টেবিলগুলির সাথে কুলি-টাকির একটি সরল, অবিচ্ছিন্ন বাস্তবায়ন এবং বিট-রিভার্সালটি বিদ্যমান লাইব্রেরির ফাংশনগুলি ব্যবহার না করে নিজেই সম্পন্ন করা হয়েছে
মার্ক জেরোনিমাস

@ মার্ক জারনিমাস: আপনি কি জাভাতে দক্ষ এফএফটি বাস্তবায়নের পরামর্শ দিতে পারেন? যদি আমি সঠিকভাবে স্মরণ করি তবে আমি কলম্বিয়া বিশ্ববিদ্যালয়ের কোডটি কেন এফএফটিডাব্লু লাইব্রেরিটি অ্যান্ড্রয়েড স্মার্টফোনে চালানো খুব জটিল ছিল না।
stackoverflowuser2010

আমি কিছু বিক্ষিপ্ত 'অপ্টিমাইজ' বাস্তবায়নের পাওয়া যায় নি, কিন্তু তারা মূলত এক অ্যালগরিদম হয় প্রতি এন আকার, তাই আপনি যদি মাপ আপনি ঐ সমস্ত রুটিন প্রয়োজন একটি সীমার প্রয়োজন। অনুশীলনে আমি মূলত ইন্টেল ইন্টিগ্রেটেড পারফরম্যান্স প্রিমিটিভ ব্যবহার করেছি (হ্যাঁ, জাভা থেকে, জেএনএর মাধ্যমে), তবে এটি নিখরচায়। বাড়িতে আমি একইভাবে আপনি যুক্ত লিখিত অ্যালগরিদম ব্যবহার করি তবে 2005 সালে পাঠ্যপুস্তক ব্যবহার করে স্ক্র্যাচ থেকে লেখা। এটি কেবল এফএফটি (ফাস্ট ফুরিয়ার ট্রান্সফর্ম), 'ফাস্ট এফএফটি' নামটি ন্যায়সঙ্গত করার জন্য এতো 'ফাস্ট' কিছুই নয়।
মার্ক জেরোনিমাস

উত্তর:


86
  1. আপনার একটিও জটিল সংখ্যার আসল বা কাল্পনিক অংশের সন্ধান করা উচিত নয় (এটি আপনার আসল এবং কাল্পনিক অ্যারেটি কী)। পরিবর্তে আপনি যে ফ্রিকোয়েন্সিটির স্কয়ারটি (রিয়েল * রিয়েল + ইমেজ * ইমেজ) হিসাবে সংজ্ঞায়িত হয়েছে তার তীব্রতার সন্ধান করতে চান। এই সংখ্যাটি সর্বদা ইতিবাচক থাকবে। এখন আপনাকে যা সন্ধান করতে হবে তা হ'ল সর্বোচ্চ মান (আপনার অ্যারেতে প্রথম প্রবেশটি উপেক্ষা করুন। এটি আপনার ডিসি অফসেট এবং কোনও ফ্রিকোয়েন্সি নির্ভর তথ্য বহন করে না)।

  2. আপনি 32 বাস্তব এবং 32 টি কাল্পনিক আউটপুট পান কারণ আপনি একটি জটিল থেকে জটিল এফএফটি ব্যবহার করছেন। মনে রাখবেন যে আপনি আপনার 32 টি নমুনাকে শূন্য কাল্পনিক অংশগুলি দিয়ে প্রসারিত করে 64 টি মান (বা 32 জটিল মান) তে রূপান্তর করেছেন। এর ফলে সিমেট্রিক এফএফটি আউটপুট আসে যেখানে ফ্রিকোয়েন্সি ফলাফল দুবার ঘটে। একবার আউটপুট 0 থেকে এন / 2 এ ব্যবহারের জন্য প্রস্তুত, এবং একবার আউটপুটগুলিতে N / 2 থেকে N এ আয়নিত হয়ে গেছে ored আপনার ক্ষেত্রে সহজেই আউটপুটগুলিকে N / 2 থেকে N উপেক্ষা করা সহজ You আপনার প্রয়োজন হবে না, তারা হ'ল আপনি কীভাবে আপনার এফএফটি গণনা করেন তার একটি নিদর্শন।

  3. ফুট-বিন সমীকরণের ফ্রিকোয়েন্সি হ'ল (বিন_আইডি * ফ্রেইক / ২) / (এন / ২) যেখানে ফ্রিক আপনার নমুনা-ফ্রিকোয়েন্সি (ওরফে 32 হার্জ এবং এন আপনার এফএফটির আকার)। আপনার ক্ষেত্রে এটি বিন প্রতি 1 হার্জ হার্টে সরল করে। N / 2 থেকে N বিনটিগুলি নেতিবাচক ফ্রিকোয়েন্সি উপস্থাপন করে (অদ্ভুত ধারণা, আমি জানি) আপনার ক্ষেত্রে তাদের কাছে কোনও উল্লেখযোগ্য তথ্য নেই কারণ এগুলি কেবল প্রথম এন / 2 ফ্রিকোয়েন্সিগুলির একটি আয়না।

  4. প্রতিটি বিনের আপনার আসল এবং কাল্পনিক অংশগুলি একটি জটিল সংখ্যা গঠন করে। আসল এবং কল্পিত অংশগুলি যদি নেতিবাচক থাকে তবে ফ্রিকোয়েন্সিটির পরিমাণটি ইতিবাচক হয় তবে ঠিক আছে (1 প্রশ্নের উত্তরটি আমার দেখুন)। আমি পরামর্শ দিচ্ছি যে আপনি জটিল সংখ্যায় পড়ুন। তারা কীভাবে কাজ করে তা ব্যাখ্যা করা (এবং কেন তারা কার্যকর) একক স্ট্যাকওভারফ্লো-প্রশ্নে ব্যাখ্যা করা সম্ভব কি তার চেয়ে বেশি।

দ্রষ্টব্য: আপনি স্বতঃসিদ্ধকরণ কী এবং কোনও সংকেতের মৌলিক ফ্রিকোয়েন্সি সন্ধান করতে এটি কীভাবে ব্যবহৃত হয় তাও আপনি পড়তে চাইতে পারেন। আমার অনুভূতি আছে যে আপনি সত্যই এটি চান।


4
ধন্যবাদ 1 সম্পর্কিত: আমি এই মাতলাব পৃষ্ঠাটি দেখেছি যা একটি ফ্রিকোয়েন্সি বর্ণালী দেখায় ( mathworks.com/help/techdoc/ref/fft.html )। সেই পৃষ্ঠায় "এককতরফা প্রশস্ততা স্পেকট্রামের y (টি)" শিরোনাম সহ একটি প্লট রয়েছে। আপনার পরামর্শ অনুসারে কি ফ্রিকোয়েন্সিটির বিশালতার প্লট করা হচ্ছে, স্কয়ার্ট (আসল ^ 2 + img ^ 2)? 3 সম্পর্কিত: আমি এখনও প্রতি প্রতি 2Hz পাই না। আমার ক্ষেত্রে, এন = 32 এবং ফ্রিক = 32, ঠিক আছে? সুতরাং এন / 2 = 32/2 = 16 টি বিন রয়েছে এবং সর্বাধিক ফ্রিকোয়েন্সি (নাইকুইস্ট) ফ্রিক / 2 = 32/2 = 16 হার্জ হয়, যার ফলস্বরূপ 16 টি বিন প্রতি 16 হার্জ হয়, প্রতি বিন প্রতি 1 হার্জ দেয়?
stackoverflowuser2010

4
হ্যাঁ, প্লট বর্ণালীটির परिमाण দেখায় - | ওয়াই (চ) | পরম-মান বারগুলি মানে বিশালতা। বিন প্রস্থ = নমুনা হার / এফএফটি আকার। আপনার নমুনার হার 32 হার্জেড, আপনার এফএফটি আকার 32 Yes হ্যাঁ, আপনি বিন প্রস্থ সম্পর্কে ঠিক বলেছেন!
ম্যাট মন্টাগ

বিন ফ্রিকোয়েন্সি স্থির।
আন্দ্রে চ্যালেলা

4
সুন্দর উত্তর, ধন্যবাদ! দুঃখিত যে আমি পার্টিতে কিছুটা দেরি করেছি, তবে সম্ভবত আপনি আমাকে উত্তর দিতে পারবেন যে ফ্রিকোয়েন্সিটির দৈর্ঘ্য (সাধারণ পয়েন্টে আপনি যেমন উল্লেখ করেছেন) সাধারণভাবে কোন ইউনিট? আমার ক্ষেত্রে, অ্যাক্সিলোমিটারের মানগুলির সংকেতে (এটি এম / এস ^ 2)। আমি বেশ তা বুঝতে পারি না।
মার্কাস

মুগ্ধকর! আমার সংগীত-ভিজ্যুয়ালাইজেশন ফ্রিকোয়েন্সি-বারগুলি বাম থেকে ডানে মিরর করে বেরিয়ে আসছে; উত্তর # 2 এটি ব্যাখ্যা করে !! পাগল !!
রায়ান এস

11

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


আমি এই প্রশংসা করি যে এই উত্তরটির পরে অনেকটা সময় কেটে গেছে .. তবে, আপনি কী ধরণের নিদর্শন বলতে চাচ্ছেন তা ব্যাখ্যা করতে সক্ষম হবেন?
ম্যাটহস্জ

4
@ ম্যাটহুস: এই নিদর্শনগুলির উত্থানের জন্য সাধারণ শব্দটি হল "বর্ণাল ফুটো" - আমি উত্তরের সাথে একটি লিঙ্ক যুক্ত করেছি যা এটি ব্যাখ্যা করে। যদিও আমি প্রভাবটি বর্ণনা করতে পারি তার সেরা উপায়টি হ'ল অন্তর্নিহিত আয়তক্ষেত্রাকার উইন্ডোর কারণে আপনার বর্ণালীটি "গন্ধযুক্ত" হবে।
পল আর

6

1) আসল অ্যারে সূচকগুলি সর্বাধিক মান সহ প্রথম সন্ধান ছাড়াও (এটি ডিসি উপাদান) Look অর্থবহী ফলাফলের জন্য অনেক কিছু পেতে আপনার সম্ভবত সম্ভবত একটি নমুনার হার 32 হার্জেডের চেয়ে বেশি এবং একটি উইন্ডোর আকারের বেশি প্রয়োজন।

2) উভয় অ্যারের দ্বিতীয়ার্ধটি প্রথমার্ধের আয়না। উদাহরণস্বরূপ, নোট করুন যে আসল অ্যারের শেষ উপাদানটি (1.774) দ্বিতীয় এলিমেন্টের (1.774) সমান এবং কাল্পনিক অ্যারের শেষ উপাদানটি (1.474) দ্বিতীয় উপাদানটির নেতিবাচক

3) সর্বাধিক ফ্রিকোয়েন্সি আপনি 32 হার্জেডের নমুনা হারে তুলতে পারবেন 16 হার্জ ( নাইকুইস্ট সীমা ), তাই প্রতিটি পদক্ষেপ 2 হার্জ হয়। যেমন পূর্বে উল্লেখ করা হয়েছে, মনে রাখবেন যে প্রথম উপাদানটি 0 হার্জেড (অর্থাত্ ডিসি অফসেট)।

4) অবশ্যই, একটি নেতিবাচক প্রশস্ততা নিখুঁত ধারণা তৈরি করে। এর অর্থ কেবল এই যে সিগন্যালটি "উল্টানো" - একটি স্ট্যান্ডার্ড এফএফটি একটি কোসিনের উপর ভিত্তি করে তৈরি হয়, যার সাধারণত মান = 1 টি = 0 থাকে, সুতরাং একটি সংকেতের যার মান = -1 সময় = 0 ছিল একটি নেতিবাচক প্রশস্ততা থাকতে পারে ।


জবাবের জন্য ধন্যবাদ. (1) আপনি কি বোঝাতে চেয়েছেন যে আমি কাল্পনিক (সাইন) অ্যারে উপেক্ষা করতে পারি এবং যদি তাই হয় তবে কেন? অবশ্যই সাইন উপাদান গুরুত্বপূর্ণ হতে হবে? (২) কেন এই মিররিং ঘটে? এটি কি কেবল এফএফটি অ্যালগরিদমের ফলাফল? বেশিরভাগ মানুষ কি মিরর করা অর্ধেক উপেক্ষা করবেন? (3) আপনি 2Hz এর পদক্ষেপগুলি কীভাবে গণনা করেছেন? আমি 16 Hz এর Nyquist সীমাটি বুঝতে পারি, সুতরাং যদি 16 টি (অ-মিররযুক্ত) অ্যারে উপাদান থাকে তবে প্রতিটি উপাদান অবশ্যই 16 হার্জ / 16 = 1 হার্জ হতে হবে? (4) প্রধান ফ্রিকোয়েন্সিগুলি সন্ধান করার জন্য, আমি কি কেবল আউটপুট অ্যারেগুলিতে প্রশস্ত মানের জন্য নিখুঁত মানটি গ্রহণ করি?
stackoverflowuser2010

আপনার সর্বোচ্চ মানের জন্য আসল অ্যারেটি সন্ধান করা উচিত নয় এবং আপনি সাইন / আই অ্যারে উপেক্ষা করতে পারবেন না। পরিবর্তে আপনি যৌগিক জটিল ভেক্টরের পরিধি চান। মিররিং ঘটে কারণ অর্ধেক ইনপুট (আই অ্যারে) সমস্ত শূন্য, সুতরাং ফলাফলটি স্বাধীনতার অর্ধেক ডিগ্রি অর্জন করে। আপনার ডেটা কঠোরভাবে সত্য হলে আপনি এটিকে উপেক্ষা করতে পারেন।
হটপাউ 2

@ ডুসকুফ অনেক ধন্যবাদ: আপনি যে প্রশ্নটি পোস্ট করতে যাচ্ছেন তার উত্তর দিয়েছিলেন, যদি আমি আপনার উত্তর না পাই: কীভাবে এফএফটির দ্বিতীয় অংশটি ব্যাখ্যা করতে পারি। আমি ডেটা পরিবর্তন করতে এবং বিপরীত সম্পাদন করতে চাই এবং আমি কেবল অর্ধেক ফলাফল পেতে থাকি, কারণ আমি সেই অংশে ভুল ডেটা পরিবর্তন করেছি। আবার ধন্যবাদ.
মার্টিন

(3), পদক্ষেপ = 2Hz এর মান এখনও পর্যন্ত আমার কাছে জড়িত। আমাদের 16 টি বিন রয়েছে, যা দৈর্ঘ্যের অ্যারে দ্বারা প্রতিনিধিত্ব করে = 16। আমাদের 0Hz থেকে 16Hz পর্যন্ত সমস্ত ফ্রিকোয়েন্সি বর্ণনা করতে হবে। আমি ধরে নিয়েছি প্রতিটি বিন সেই ব্যাপ্তির একটি অংশ বর্ণনা করে, তাইনা?
ক্রাফটার

@ ক্রাফটার আমার মনে হয় এটি অর্ধেক হয়ে গেছে কারণ আপনি একক মান থেকে কোনও ফ্রিকোয়েন্সি তুলতে পারবেন না (কারণ কোনও পুনরাবৃত্তি নেই)।
JVE999

5

মনে রাখবেন যে "সর্বাধিক সংঘটিত ফ্রিকোয়েন্সি" এমনকি উইন্ডো ফাংশন সহ একাধিক এফএফটি বিনগুলিতে ছড়িয়ে পড়ে। সুতরাং কোনও বর্ণাল শিখরের ফ্রিকোয়েন্সি আরও ভালভাবে অনুমান করার জন্য আপনাকে লম্বা উইন্ডো, একাধিক উইন্ডো বা ইন্টারপোলেশন ব্যবহার করতে হতে পারে।

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