উচ্চতর অর্ডার ফিল্টারগুলির জন্য কীভাবে ক্যাসকেডিং বিভ্যাড বিভাগগুলি কাজ করে?


20

আমি একটি 8 তম অর্ডার আইআইআর ফিল্টার বাস্তবায়ন করার চেষ্টা করছি এবং আমি যে প্রতিটি অ্যাপ্লিকেশন নোট এবং পাঠ্যপুস্তক পড়েছি তা বলছে যে কোনও অর্ডার ফিল্টারকে দ্বিতীয় অর্ডার বিভাগ হিসাবে 2 এরও বেশি কার্যকর করা ভাল। আমি ব্যবহৃত tf2sosম্যাটল্যাব দ্বিতীয় অর্ডার বিভাগে যা আমাকে, 4 দ্বিতীয় ক্রম বিভাগে একটি 6x4 coeffs দিলেন আশানুরূপ জন্য কোফিসিয়েন্টস জন্য। এসওএস হিসাবে বাস্তবায়নের আগে, 8 তম অর্ডার ফিল্টারটিতে 7 পূর্ববর্তী নমুনা মানগুলি সংরক্ষণ করতে হবে (এবং আউটপুট মানগুলিও)। এখন দ্বিতীয় অর্ডার বিভাগ হিসাবে প্রয়োগ করার সময় প্রবাহ কীভাবে ইনপুট থেকে আউটপুট পর্যন্ত কাজ করে, আমার কি পূর্ববর্তী 2 টি নমুনা মান সংরক্ষণ করতে হবে? অথবা প্রথম ফিল্টারের আউটপুট x_inদ্বিতীয় ফিল্টার হিসাবে ফিড এবং তাই কি?


আপনার প্রতিটি স্তরের জন্য পূর্ববর্তী রাজ্যগুলি সংরক্ষণ করতে হবে, সেই পর্যায়ে ফিল্টারের ক্রমের উপর নির্ভর করে এটি আপনার উল্লিখিত হিসাবে কেবল 2 হবে না

উত্তর:


13

এটি আপনি যা শেষ কথা বলেছেন ("বা প্রথম ফিল্টারটির আউটপুটটি x_in হিসাবে দ্বিতীয় ফিল্টারটিতে ফিড করে এবং তাই?")। ধারণাটি সহজ: আপনি ব্রিক্য্যাডকে পৃথক দ্বিতীয়-ক্রমের ফিল্টার হিসাবে গণ্য করেন যা ক্যাসকেডে রয়েছে। প্রথম ফিল্টার থেকে আউটপুট হ'ল দ্বিতীয়টিতে ইনপুট এবং তাই, সুতরাং বিলম্বের লাইনগুলি ফিল্টারগুলির মধ্যে ছড়িয়ে দেওয়া হয়। আপনার যদি মেমরি-সীমাবদ্ধ পরিবেশে কাঠামোটির অনুকূলকরণের প্রয়োজন হয় তবে আপনি নোট করতে পারেন যে সংলগ্ন বিভাডগুলিতে অপ্রয়োজনীয় বিলম্ব মেমরি রয়েছে (অর্থাত পর্ব 1 এর শেষ কয়েকটি আউটপুট নমুনা পর্যায় 2 এর শেষ কয়েকটি ইনপুট নমুনার সমান, তাই আপনি ডন এগুলি আলাদাভাবে সংরক্ষণ করতে হবে না যদি আপনি কেবল ফিল্টারগুলি বিচ্ছিন্নভাবে প্রয়োগ করেন)।


ধন্যবাদ! আমি কেবল এটি ম্যাটল্যাবে দ্রুত করতে পেরেছি। তার আগে বিভ্রান্তির কারণ ছিল যে আমি লাভ গুন করতে ভুলে গেছি (বিতৃষ্ণা!) এবং অত: পর ধারনা সব বিশৃঙ্খলভাবে মধ্যে লতানে শুরু করে।
anasimtiaz

আপনি যদি টিএফ 2সোস থেকে আউটপুট আর্গ হিসাবে লাভের জন্য জিজ্ঞাসা করবেন না (যেমন পোস্ট করা আমার উদাহরণ কোডের মতো) তবে আপনার আবার এটিকে আবার গুণতে বিরক্ত করার দরকার নেই।
learnvst

9

দ্বিতীয় ক্রম বিভাগগুলি বাস্তবায়নের দুটি উপায় রয়েছে: সমান্তরাল এবং সিরিয়াল। সিরিয়াল সংস্করণে, বিভাগ এন এর আউটপুটগুলি বিভাগ এন + 1 এর ইনপুট। সমান্তরাল সংস্করণে সমস্ত বিভাগের একই ইনপুট থাকে (এবং জিরোগুলির একটি সংক্ষিপ্ত জটিল জুটির পরিবর্তে কেবলমাত্র একটি আসল শূন্য) এবং প্রতিটি বিভাগের আউটপুট কেবল সংক্ষেপে সংক্ষিপ্ত করা হয়। দুটি পদ্ধতি জেড-ডোমেন স্থানান্তর ফাংশনের আংশিক-ভগ্নাংশ প্রসারণের মাধ্যমে সম্পর্কিত। সতর্কতা: এটি একটি সংখ্যাগতভাবে জটিল সমস্যা এবং স্ট্যান্ডার্ড মতলব বাস্তবায়ন "রেসিডুয়েজ" ইউনিট বৃত্তের কাছাকাছি খুঁটি রয়েছে এমন সাধারণ অডিও ফিল্টারগুলির জন্য খুব বড় সংখ্যাগত ত্রুটি থাকতে পারে।


6

আপনি ২ য় অর্ডার বিভাগকে ক্যাসকেড করা থেকে কেন ভাল show

clc

sr = 44100;
order = 13;

[b,a] = butter(order,1000/(sr/2),'low');
[sos] = tf2sos(b,a);

x = [1; zeros(299,1)]; %impulse


% all in one
Y = filter(b,a,x);

% cascaded biquads
Z = x;
for nn = 1:size(sos,1);
    Z = filter(sos(nn,1:3),sos(nn,4:6), Z );
end


cla; plot(Y, 'k'); hold on; plot(Z,':r'); hold off

উপরোক্ত উদাহরণে প্রদত্ত লোপপাস ফিল্টারটির জন্য, প্রায় 12 থেকে 13 এর আদেশ দ্বারা, সংখ্যাসূচক ত্রুটিগুলি বাস্তবায়নের জন্য দৃশ্যমানভাবে পৃথক আবেগ প্রতিক্রিয়া দেয় যা ক্যাসকেড বিক্যাড ব্যবহার করে না। ফিল্টার উপর নির্ভর করে আপনার মাইলেজ পৃথক হবে।

অর্ডার = 10

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

আদেশ = 13

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


@ অ্যালার্ভস্ট আমি ভুল হলে আমাকে সংশোধন করুন, তবে আপনার কোডটি লাভগুলি মিস করে। এটি হওয়া উচিত নয়:[sos gain] = tf2sos(b,a); // Rest of code for nn = 1:size(sos,1); Z = filter(sos(nn,1:3),sos(nn,4:6), Z ); end Z = filter(gain,1,Z);
user915783
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.