স্টোরফোর্ডের অ্যান্ড্রু এনগের কোরসেরে মেশিন লার্নিংয়ের প্রারম্ভিক বক্তৃতার একটি স্লাইডে তিনি অডিও উত্স দুটি স্থান পৃথক পৃথক মাইক্রোফোনের দ্বারা রেকর্ড করা ককটেল পার্টি সমস্যার জন্য নিম্নলিখিত এক লাইন অক্টাভা সমাধান দিয়েছেন:
[W,s,v]=svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');
স্লাইডের নীচে রয়েছে "উত্স: স্যাম রোয়েস, ইয়ার ওয়েইস, ইরো সাইমনসেলি" এবং আগের স্লাইডের নীচে রয়েছে "টি-ওন লির অডিও ক্লিপস সৌজন্যে"। ভিডিওতে অধ্যাপক এনজি বলেছেন,
"সুতরাং আপনি এটির মতো নিরীক্ষণযোগ্য শিক্ষার দিকে নজর দিতে পারেন এবং জিজ্ঞাসা করতে পারেন, 'এটি বাস্তবায়ন করা কতটা জটিল?' দেখে মনে হচ্ছে এই অ্যাপ্লিকেশনটি তৈরি করার জন্য, এই অডিও প্রসেসিংটি করার মতো মনে হচ্ছে, আপনি এক টন কোড লিখবেন, অথবা অডিও প্রসেসিং করে সি ++ বা জাভা লাইব্রেরিগুলির একটি গোছায় লিঙ্ক করবেন। মনে হচ্ছে এটি সত্যিই হবে এই অডিওটি করার জটিল প্রোগ্রাম: অডিওকে আলাদা করে দেওয়া ইত্যাদি .এটি আপনি যা শুনেছেন তা করতে অ্যালগরিদম বেরিয়েছে, এটি কোডের এক লাইন দিয়েই করা যেতে পারে ... ঠিক এখানে দেখানো হয়েছে। এটি গবেষকদের অনেক সময় নিয়েছে কোডের এই লাইনের সাথে আসতে হবে। সুতরাং আমি বলছি না এটি একটি সহজ সমস্যা But তবে এটি প্রমাণিত হয়েছে যে আপনি যখন সঠিক প্রোগ্রামিং পরিবেশটি ব্যবহার করবেন তখন অনেক শিখনের অ্যালগরিদমগুলি সত্যই সংক্ষিপ্ত প্রোগ্রাম হবে ""
ভিডিও লেকচারে খেলানো পৃথক অডিও ফলাফলগুলি নিখুঁত নয় তবে আমার মতে আশ্চর্যজনক। সেই এক লাইনের কোডটি কীভাবে এত সুন্দরভাবে সম্পাদন করে সে সম্পর্কে কি কারও অন্তর্দৃষ্টি আছে? বিশেষত, এমন একটি রেফারেন্সের কথা কি কেউ জানেন যা এই এক লাইনের কোডটির সাথে সম্পর্কিত তে-ওয়ান লি, স্যাম রোয়েস, ইয়ার ওয়েইস এবং ইরো সাইমনসিলির কাজ ব্যাখ্যা করে?
হালনাগাদ
অ্যালগরিদমের সংবেদনশীলতা মাইক্রোফোন বিচ্ছিন্নতার দূরত্বের প্রতি প্রদর্শন করতে, নিম্নলিখিত সিমুলেশন (অক্টাভেতে) দুটি স্থান পৃথক পৃথক টোন জেনারেটর থেকে টোনগুলি পৃথক করে।
% define model
f1 = 1100; % frequency of tone generator 1; unit: Hz
f2 = 2900; % frequency of tone generator 2; unit: Hz
Ts = 1/(40*max(f1,f2)); % sampling period; unit: s
dMic = 1; % distance between microphones centered about origin; unit: m
dSrc = 10; % distance between tone generators centered about origin; unit: m
c = 340.29; % speed of sound; unit: m / s
% generate tones
figure(1);
t = [0:Ts:0.025];
tone1 = sin(2*pi*f1*t);
tone2 = sin(2*pi*f2*t);
plot(t,tone1);
hold on;
plot(t,tone2,'r'); xlabel('time'); ylabel('amplitude'); axis([0 0.005 -1 1]); legend('tone 1', 'tone 2');
hold off;
% mix tones at microphones
% assume inverse square attenuation of sound intensity (i.e., inverse linear attenuation of sound amplitude)
figure(2);
dNear = (dSrc - dMic)/2;
dFar = (dSrc + dMic)/2;
mic1 = 1/dNear*sin(2*pi*f1*(t-dNear/c)) + \
1/dFar*sin(2*pi*f2*(t-dFar/c));
mic2 = 1/dNear*sin(2*pi*f2*(t-dNear/c)) + \
1/dFar*sin(2*pi*f1*(t-dFar/c));
plot(t,mic1);
hold on;
plot(t,mic2,'r'); xlabel('time'); ylabel('amplitude'); axis([0 0.005 -1 1]); legend('mic 1', 'mic 2');
hold off;
% use svd to isolate sound sources
figure(3);
x = [mic1' mic2'];
[W,s,v]=svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');
plot(t,v(:,1));
hold on;
maxAmp = max(v(:,1));
plot(t,v(:,2),'r'); xlabel('time'); ylabel('amplitude'); axis([0 0.005 -maxAmp maxAmp]); legend('isolated tone 1', 'isolated tone 2');
hold off;
আমার ল্যাপটপ কম্পিউটারে প্রায় 10 মিনিটের মৃত্যুর পরে, সিমুলেশনটি দুটি পৃথক টোনকে সঠিক ফ্রিকোয়েন্সি সহ চিত্রিত করে নিম্নলিখিত তিনটি চিত্র তৈরি করে।
যাইহোক, মাইক্রোফোন বিচ্ছিন্নতা দূরত্বকে শূন্যে স্থাপন করা (অর্থাত্ dMic = 0) সিমুলেশনটির পরিবর্তে সিমুলেশনটি নিম্নলিখিত তিনটি চিত্রের উত্পন্ন করে যা সিমুলেশনটি দ্বিতীয় টোনকে বিচ্ছিন্ন করতে পারে না (একক তাৎপর্যপূর্ণ তির্যক শব্দটি দ্বারা নিশ্চিত হওয়া যা এসভিডি এর ম্যাট্রিক্সে ফিরে এসেছে)।
আমি আশা করছিলাম যে কোনও স্মার্টফোনে মাইক্রোফোন বিচ্ছেদের দূরত্ব ভাল ফলাফলের পক্ষে যথেষ্ট হবে তবে মাইক্রোফোন বিচ্ছেদের দূরত্ব 5.25 ইঞ্চি (যেমন, dMic = 0.1333 মিটার) নির্ধারণের ফলে সিমুলেশনটি নিম্নলিখিত উত্সাহিত করে, উত্সাহ দেওয়ার চেয়ে কম, চিত্রগুলি উচ্চতর চিত্রিত করে প্রথম বিচ্ছিন্ন স্বরে ফ্রিকোয়েন্সি উপাদান।
x
; এটি কি তরঙ্গরূপের বর্ণালী, বা কী?