শূন্য-প্যাডিং বিজোড়-দৈর্ঘ্যের এফএফটি যখন আসল-মূল্যবান বেজে যায়


13

সুতরাং আমি একটি ফ্রিকোয়েন্সি-ডোমেন ইন্টারপোলটার লেখার চেষ্টা করছি যা একটি সিগন্যাল এবং বিপরীত রূপান্তরগুলির ফ্রিকোয়েন্সি প্রতিক্রিয়াটিকে শূন্যপ্যাড দেয়। আমাকে দুটি মামলা মোকাবেলা করতে হবে:

  1. সম-দৈর্ঘ্যের প্রতিক্রিয়া - বিনটি বিভক্ত করতে হবে কারণ এটি অস্পষ্ট। সুতরাং আমি বর্ণালীটির নেতিবাচক অংশটি অনুলিপি করছি এবং এর মধ্যে শূন্যগুলি যুক্ত করব ।Fs/2n*(interp-1)-1
  2. অদ্ভুত দৈর্ঘ্যের প্রতিক্রিয়া - কোনও বিন নেই তাই কেবল ইতিবাচক / নেতিবাচক ফ্রিকোয়েন্সি বিভক্ত করুন এবং তাদের মধ্যে শূন্য .োকান।Fs/2n*(interp-1)

শূন্য-প্যাডিংয়ের কোডটি এখানে দেখা যাবে

// Copy negative frequency components to end of buffer and zero out middle
//  inp    - input buffer of complex floats
//    n    - transform size
//  interp - interpolation amount
void zero_pad_freq(cfloat_t *inp, size_t n, size_t interp) {
    if ((n % 2) == 0) {
        memmove(inp + n*interp - n/2, inp + n/2,     n/2*sizeof(cfloat_t));
        memset (inp + n/2 + 1, 0,       (n*(interp-1)-1)*sizeof(cfloat_t)); // Duplicate Fs/2 so we need one less zero

        inp[n/2]          /= 2.0;
        inp[n*interp-n/2] /= 2.0;
    } else {
        memmove(inp + n*interp - n/2, inp + (n+1)/2, n/2*sizeof(cfloat_t));
        memset (inp + (n+1)/2, 0,         (n*(interp-1))*sizeof(cfloat_t));
    }
}

50μs

50μs

কাল্পনিক চ্যানেলটিতে এটির একটি ছোট ছোট রিপল রয়েছে তবে এটি প্রায় খারাপ নয়:

Fs/2Fs/2


আপনার প্লটগুলি সঙ্কুচিত হওয়ার কারণে দেখতে কিছুটা শক্ত।
জেসন আর

@ জেসন দুঃখিত, আমি ভেবেছিলাম তারা লিঙ্ক হয়েছে, আমি এইচটিএমএলটি টুইট করেছি যাতে তারা এখন পূর্ণ আকারের জন্য ক্লিক করতে পারে।
gct

3
আপনি ইনপুট হিসাবে ব্যবহার করছেন তার জন্য আপনার কাছে কোনও কোড বা উদাহরণ ফাইল আছে? একটি বিষয় মনে রাখবেন তা হ'ল ডিএফটি দ্বারা গৃহীত সীমানা শর্তগুলি। বিশেষত, একটি অন্তর্নিহিত অনুমান যে আগ্রহের সংকেত পর্যায়ক্রমিক হয়। সুতরাং, বিজোড় দৈর্ঘ্যের ইনপুটটিতে যদি প্রথম এবং শেষ নমুনাগুলির মধ্যে কোনও বিরতি থাকে, তবে আপনি যা দেখেছেন তার মতো বাজে দেখতে পাবেন। এটি সম্ভব যে সম-দৈর্ঘ্যের নমুনা শুরু থেকে শেষ পর্যন্ত আরও অবিচ্ছিন্ন থাকে, তাই আপনি এই ঘটনাটি দেখেন না।
জেসন আর

অন্য যে কোনওরকম সহজেই হজম করতে সক্ষম হবে এমন ফর্ম্যাটে আমার কাছে ডেটা নেই, তবে আমি মনে করি আপনি ঠিক বলেছেন। আমি সবেমাত্র এখানে এসেছি এবং আমার কোডটি পুনরায় তৈরি করেছি / একটি পরীক্ষার ইনপুট পুনরায় জেনারেট করেছি (10Hz-100Hz চিপ 1 সেকেন্ডের ওপরে) এবং কোডটি আবার চালিয়েছি এবং রিংটি পাইনি। আমি আপনার মন্তব্যটি দেখেছি এবং ফ্রিকোয়েন্সিটি 10-100.314 এ পরিবর্তন করেছি এবং আমি এখন উভয় এবং বিজোড় উভয় রূপান্তরগুলিতে বাজতে দেখছি।
gct

1
আপনি কি আপনার ডেটাতে একটি উইন্ডো ফাংশন প্রয়োগ করার চেষ্টা করেছেন? এটি সাধারণত রিংটি হ্রাস করবে।
মার্কএসসি

উত্তর:


1

উচ্চ ফ্রিকোয়েন্সি বিনগুলি শূন্য করে, আপনি কার্যকরভাবে একটি আয়তক্ষেত্রাকার ফাংশন দিয়ে সংকেতের বর্ণালীকে গুণিত করেছেন। ফ্রিকোয়েন্সিতে গুণটির সময় সময়ে সংমিশ্রণ হয় এবং কোনও রেক্টরের ফুরিয়ার জুটি একটি সিনক। সুতরাং আপনি যা করেছিলেন তা হ'ল সময় ডোমেন সিগন্যালটিকে সিন্টের মূল লবটির প্রস্থের সাথে রেক্টের দৈর্ঘ্যের বিপরীত আনুপাতিক সমান করে conv এ কারণেই পার্কস-ম্যাকক্লেলান ডিজাইনের মতো অসংখ্য ফিল্টার ডিজাইনিং কৌশলগুলি যাকে "ট্রানজিশন অঞ্চল" বা "ট্রানজিশন" ব্যান্ড বলা হয় যাতে ফিল্টারটির ফ্রিকোয়েন্সি প্রতিক্রিয়াতে তাত্ক্ষণিক পরিবর্তন না ঘটে। এই ফিল্টার ডিজাইনের কৌশলগুলি গুরুত্বপূর্ণ কারণ আপনার মতো "আদর্শ" ফিল্টারটি সময় ডোমেনে যেমন অযাচিত প্রভাব ফেলে।


0

ফ্রিকোয়েন্সি ডোমেনের একটি পদক্ষেপ সময় ডোমেনে রিপল হিসাবে প্রদর্শিত হবে। যদি আপনি একটি উইন্ডো ফাংশন (যেমন হামিং উইন্ডো) দিয়ে আপনার ফ্রিকোয়েন্সি ডেটা মসৃণ করেন তবে তা উল্লেখযোগ্যভাবে ripples হ্রাস করতে হবে।

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