সমান এবং বিজোড় এফএফটি দৈর্ঘ্যের জন্য কীভাবে ফ্রিকোয়েন্সি অক্ষ তৈরি করবেন?


12

নেতিবাচক ফ্রিকোয়েন্সি থেকে ধনাত্মক ফ্রিকোয়েন্সি, (হার্টজ-এ) গিয়ে কীভাবে ফ্রিকোয়েন্সি অক্ষ তৈরি করা যায় সে সম্পর্কে কী আমি সহায়তা পেতে পারি, এটি কোনও এফএফটি ফলাফলের এক্স-অক্ষ হবে, তবে একটি এমনকি দৈর্ঘ্যের এফএফটি বা বিজোড় দৈর্ঘ্য এফএফটি দেওয়া হবে। এটি ম্যাটল্যাবে তৈরি করতে আমার কিছুটা সমস্যা হচ্ছে। (ধরুন আপনি নমুনা ফ্রিকোয়েন্সি f_s জানেন)।


1
এটি আপনাকে ইউনিট বৃত্তের চারপাশে সমানভাবে স্থান নির্ধারণের সম্পর্কে চিন্তা করতে সহায়তা করতে পারে। একটি 4-পয়েন্ট এফএফটির ফ্রিকোয়েন্সি বিন রয়েছে [0 / 4fs, 1 / 4fs, 2 / 4fs, 3 / 4fs], উদাহরণস্বরূপ, যা সাধারণত [0, fs / 4, fs / 2, -fs / হিসাবে লেখা হয় 4]। একটি 3-পয়েন্ট FFT এর ফ্রিকোয়েন্সি বিন রয়েছে [0 / 3fs, 1 / 3fs, 2 / 3fs], বা [0, fs / 3, -fs / 3] হিসাবে লেখা যেতে পারে। বিজোড় মাপ জন্য Nyquist ফ্রিকোয়েন্সি উপর এই সমান ব্যবধান ছেড়ে যাওয়া, কিন্তু সবসময় 0. অন্তর্ভুক্ত
endolith

@ এন্ডোলিথ এই উপমাটি আমাকে প্রচুর পরিমাণে সাহায্য করেছিল, আপনাকে অনেক ধন্যবাদ!
মার্ক লেওমাইন

উত্তর:


5

একটি পদ্ধতি হ'ল আনশিফ্ট ডিএফটি আউটপুটটির জন্য ফ্রিকোয়েন্সি ভেক্টর গণনা করা (যেমন আপনি ম্যাটল্যাবের fft()ফাংশন থেকে সরাসরি কী পাবেন , কোনও কাজ না করে fftshift()), তারপরে অক্ষের নেতিবাচক দিকের সাথে সম্পর্কিত ফ্রিকোয়েন্সিগুলি পুনরায় তৈরি করুন। উদাহরণ:

% assume input signal "x", sampling frequency "fs"
% calculate FFT
X = fft(x,Nfft);
% calculate frequency spacing
df = fs / Nfft;
% calculate unshifted frequency vector
f = (0:(Nfft-1))*df;
% move all frequencies that are greater than fs/2 to the negative side of the axis
f(f >= fs/2) = f(f >= fs/2) - fs;
% now, X and f are aligned with one another; if you want frequencies in strictly
% increasing order, fftshift() them
X_normal_order = fftshift(X);
f_normal_order = fftshift(f);

শিখেস্টের দেওয়া উত্তরটিরও কাজ করা উচিত; এটি কেবল এটির সম্পর্কে চিন্তা করার অন্য একটি উপায় যা এমনকি / বিজোড় ডিএফটি আকারের জন্য কোনও বিশেষ কেসিংয়ের প্রয়োজন হয় না।


হ্যালো জেসনআর, এটি কি নিশ্চিত যে এই কোডটি কাজ করছে, যেহেতু আমি যদি এফএস = 1000 এবং এনএফটি = 256 দিয়ে চেষ্টা করি তবে যে f_normal_order আমি ইতিবাচক সংখ্যা দিয়ে শুরু করি, তা নেতিবাচক হয় এবং তারপরে আবার ইতিবাচক হয়। এছাড়াও দৈর্ঘ্য মিলছে না।
TheGrapeBeyond

দুঃখিত, কোডটিতে কয়েকটি টাইপস ঠিক করেছেন। এটি এখন কাজ করা উচিত।
জেসন আর

9

আপনি বেশ সহজভাবে একটি ইতিবাচক ফ্রিকোয়েন্সি বর্ণালী তৈরি করতে পারেন (যেখানে fsস্যাম্পলিংয়ের হার এবং NFFTএটি ফুফটের বিনের সংখ্যা)। এফএফটি অ্যালগরিদমের মতলব বাস্তবায়নে প্রথম উপাদানটি সর্বদা ডিসি উপাদান থাকে, সুতরাং অ্যারেটি শূন্য থেকে কেন শুরু হয়। এটি NFFT এর বিজোড় এবং এমনকি মানগুলির জন্য সত্য for

%//Calculate frequency axis
df = fs/NFFT;
fAxis = 0:df:(fs-df);

আপনার যদি ফ্রিকোয়েন্সি বর্ণালী মোড়ানোর প্রয়োজন হয় তবে আপনার কাছে একটি বিজোড় সংখ্যাযুক্ত এনএফএফটি আছে কিনা তা বিবেচনা করা উচিত। সর্বদা একটি ডিসি উপাদান থাকা দরকার , তাই। ।

df = fs/NFFT;
fAxis = (0:df:(fs-df)) - (fs-mod(NFFT,2)*df)/2;

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

এই কোড স্নিপেটগুলি এসওতে পোস্ট করা দীর্ঘ উত্তর থেকে নেওয়া হয়েছিল (যাতে আপনি আকর্ষণীয় খুঁজে পেতে পারেন) এখানে পাওয়া গেছে: /programming/9694297/matlab-fft-xaxis-limits-messing-up-and-fftshift/ 9699983 # 9699983


ঠিক আছে, তাহলে আমি কী খুব তাড়াতাড়ি বিজোড় এনএফএফটির জন্য ব্যবহার করতে পারি?
43

ওহ দুঃখিত. আমি-থেকে + ve ফ্রিকোয়েন্সি যাওয়ার সময় সামান্য জটিলতা দেখি। আমি উত্তরটি কিছুটা পরিবর্তন করেছি।
শিখুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.