বিপরীতে শর্ট টাইম ফুরিয়ার রূপান্তর অ্যালগরিদম শব্দে বর্ণিত


20

ফরোয়ার্ড এবং ইনভার্স শর্ট টাইম ফুরিয়ার ট্রান্সফর্ম (এসটিএফটি) একটি বিচ্ছিন্ন সময়-ডোমেন সংকেতে প্রয়োগ করা হয় তখন আমি ধারণামূলকভাবে বুঝতে চেষ্টা করছি। আমি অ্যালেন এবং রবিনার ( 1977 ) এর ক্লাসিক কাগজ , পাশাপাশি একটি উইকিপিডিয়া নিবন্ধ ( লিঙ্ক ) পেয়েছি । আমি বিশ্বাস করি যে এখানে আরও একটি ভাল নিবন্ধ পাওয়া যাবে

আমি গ্যাবার রূপান্তর গণনা করতে আগ্রহী, যা কোনও গাউসির উইন্ডোতে এসটিএফটি ছাড়া আর কিছুই নয়।

ফরোয়ার্ড এসটিএফটি সম্পর্কে এটিই আমি বুঝতে পারি :

  1. সময়ের ডোমেন উপাদানগুলির সমন্বয়ে সিগন্যাল থেকে একটি উপ-অনুক্রম নির্বাচন করা হয়।
  2. উপ-অনুক্রমটি সময় ডোমেনে পয়েন্ট-বাই-পয়েন্ট গুণক ব্যবহার করে একটি উইন্ডো ফাংশন দ্বারা গুণিত হয়।
  3. গুণিত সাব-সিকোয়েন্সটি এফএফটি ব্যবহার করে ফ্রিকোয়েন্সি ডোমেনে নেওয়া হয়।
  4. ধারাবাহিকভাবে ওভারল্যাপিং উপ-অনুক্রমগুলি নির্বাচন করে এবং উপরের পদ্ধতিটি পুনরাবৃত্তি করে আমরা এম সারি এবং এন কলাম সহ একটি ম্যাট্রিক্স পাই । প্রতিটি কলাম একটি নির্দিষ্ট সময়ে গণিত উপ-অনুক্রম হয়। এটি একটি স্পেকট্রামগ্রাম গণনা করতে ব্যবহার করা যেতে পারে।

তবে বিপরীতমুখী এসটিএফটি-র জন্য, কাগজপত্রগুলি ওভারল্যাপিং বিশ্লেষণ বিভাগগুলির উপর একটি সংলাপের কথা বলে। আমি এখানে সত্যিই কী চলছে তা কল্পনা করা খুব চ্যালেঞ্জিং পাচ্ছি। বিপরীত এসটিএফটি (উপরে হিসাবে ধাপে ধাপে ক্রম) গণনা করতে সক্ষম হতে আমার কী করতে হবে ?

ফরোয়ার্ড এসটিএফটি

আমি একটি অঙ্কন তৈরি করেছি যা আমার মনে হয় ফরোয়ার্ড এসটিএফটি-র জন্য কী চলছে showing আমি যা বুঝতে পারি না তা হ'ল প্রতিটি উপ-অনুক্রমগুলি কীভাবে একত্রিত করা যায় যাতে আমি মূল সময়ের ক্রমটি ফিরে পাই। কেউ যদি এই অঙ্কনটি সংশোধন করতে পারে বা উপ-অনুক্রমগুলি কীভাবে যুক্ত হয় তা দেখিয়ে একটি সমীকরণ দিতে পারে?ফরোয়ার্ড রূপান্তর

বিপরীত রূপান্তর

বিপরীত রূপান্তর সম্পর্কে আমি যা বুঝতে পারি তা এখানে। প্রতিটি ক্রমাগত উইন্ডোটিকে আইএফএফটি ব্যবহার করে সময় ডোমেনে ফিরিয়ে নেওয়া হয়। তারপরে প্রতিটি উইন্ডোটি ধাপের আকার দ্বারা স্থানান্তরিত হয় এবং পূর্ববর্তী শিফটের ফলাফলের সাথে যুক্ত হয়। নিম্নলিখিত চিত্রটি এই প্রক্রিয়াটি দেখায়। যোগফল আউটপুট হ'ল সময় ডোমেন সিগন্যাল।

বিপরীত রূপান্তর

কোড উদাহরণ

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

দ্রষ্টব্য যে অ্যালেন এবং রবিনারের (1977) অনুসারে যদি ফ্রিকোয়েন্সি প্রতিক্রিয়া পরিবর্তন করতে ফ্রিকোয়েন্সি ডোমেনে কোনও গুণ ঘটে থাকে তবে বিশ্লেষণ উইন্ডোর দৈর্ঘ্য অবশ্যই পয়েন্টের সমান বা বৃহত্তর হতে হবে , যেখানে ফিল্টার প্রতিক্রিয়া । দৈর্ঘ্য শূন্য-প্যাডিং দ্বারা প্রসারিত করা হয়। পরীক্ষার কোডটি কেবল দেখায় যে বিপরীতটি ফরোয়ার্ড ট্রান্সফর্মের দ্বৈত। একটি বৃত্তাকার সমঝোতা রোধ করতে দৈর্ঘ্য বাড়ানো উচিত।এন 0এন+ +এন0-1এন0

% The code computes the STFT (Gabor transform) with step size = 1
% This is most useful when modifications of the signal is required in
% the frequency domain

% The Gabor transform is a STFT with a Gaussian window (w_t in the code)

% written by Nicholas Kinar

% Reference:
% [1] J. B. Allen and L. R. Rabiner, 
% “A unified approach to short-time Fourier analysis and synthesis,” 
% Proceedings of the IEEE, vol. 65, no. 11, pp. 1558 – 1564, Nov. 1977.

% generate the signal
mm = 8192;                  % signal points
t = linspace(0,1,mm);       % time axis

dt = t(2) - t(1);           % timestep t
wSize = 101;                % window size


% generate time-domain test function
% See pg. 156
% J. S. Walker, A Primer on Wavelets and Their Scientific Applications, 
% 2nd ed., Updated and fully rev. Boca Raton: Chapman & Hall/CRC, 2008.
% http://www.uwec.edu/walkerjs/primer/Ch5extract.pdf
term1 = exp(-400 .* (t - 0.2).^2);
term2 = sin(1024 .* pi .* t);
term3 = exp(-400.*(t- 0.5).^2);
term4 = cos(2048 .* pi .* t);
term5 = exp(-400 .* (t-0.7).^2);
term6 = sin(512.*pi.*t) - cos(3072.*pi.*t);
u = term1.*term2  + term3.*term4 + term5.*term6; % time domain signal
u = u';

figure;
plot(u)

Nmid = (wSize - 1) / 2 + 1;    % midway point in the window
hN = Nmid - 1;                 % number on each side of center point       


% stores the output of the Gabor transform in the frequency domain
% each column is the FFT output
Umat = zeros(wSize, mm);     


% generate the Gaussian window 
% [1] Y. Wang, Seismic inverse Q filtering. Blackwell Pub., 2008.
% pg. 123.
T = dt * hN;                    % half-width
sp = linspace(dt, T, hN); 
targ = [-sp(end:-1:1) 0 sp];    % this is t - tau
term1 = -((2 .* targ) ./ T).^2;
term2 = exp(term1);
term3 = 2 / (T * sqrt(pi));
w_t = term3 .* term2;
wt_sum = sum ( w_t ); % sum of the wavelet


% sliding window code
% NOTE that the beginning and end of the sequence
% are padded with zeros 
for Ntau = 1:mm

    % case #1: pad the beginning with zeros
    if( Ntau <= Nmid )
        diff = Nmid - Ntau;
        u_sub = [zeros(diff,1); u(1:hN+Ntau)];
    end

    % case #2: simply extract the window in the middle
    if (Ntau < mm-hN+1 && Ntau > Nmid)
        u_sub = u(Ntau-hN:Ntau+hN);
    end

    % case #3: less than the end
    if(Ntau >= mm-hN+1)
        diff = mm - Ntau;
        adiff = hN - diff;
        u_sub = [ u(Ntau-hN:Ntau+diff);  zeros(adiff,1)]; 
    end   

    % windowed trace segment
    % multiplication in time domain with
    % Gaussian window  function
    u_tau_omega = u_sub .* w_t';

    % segment in Fourier domain
    % NOTE that this must be padded to prevent
    % circular convolution if some sort of multiplication
    % occurs in the frequency domain
    U = fft( u_tau_omega );

    % make an assignment to each trace
    % in the output matrix
    Umat(:,Ntau) = U;

end

% By here, Umat contains the STFT (Gabor transform)

% Notice how the Fourier transform is symmetrical 
% (we only need the first N/2+1
% points, but I've plotted the full transform here
figure;
imagesc( (abs(Umat)).^2 )


% now let's try to get back the original signal from the transformed
% signal

% use IFFT on matrix along the cols
us = zeros(wSize,mm);
for i = 1:mm 
    us(:,i) = ifft(Umat(:,i));
end

figure;
imagesc( us );

% create a vector that is the same size as the original signal,
% but allows for the zero padding at the beginning and the end of the time
% domain sequence
Nuu = hN + mm + hN;
uu = zeros(1, Nuu);

% add each one of the windows to each other, progressively shifting the
% sequence forward 
cc = 1; 
for i = 1:mm
   uu(cc:cc+wSize-1) = us(:,i) + uu(cc:cc+wSize-1)';
   cc = cc + 1;
end

% trim the beginning and end of uu 
% NOTE that this could probably be done in a more efficient manner
% but it is easiest to do here

% Divide by the sum of the window 
% see Equation 4.4 of paper by Allen and Rabiner (1977)
% We don't need to divide by L, the FFT transform size since 
% Matlab has already taken care of it 
uu2 = uu(hN+1:end-hN) ./ (wt_sum); 

figure;
plot(uu2)

% Compare the differences bewteen the original and the reconstructed
% signals.  There will be some small difference due to round-off error
% since floating point numbers are not exact
dd = u - uu2';

figure;
plot(dd);

2
দুর্দান্ত প্রশ্ন - তবে, আপনি কীভাবে এই চিত্রগুলি দ্রুত
ফ্লাইতে তৈরি করলেন

2
আমি ডায়াগ্রামগুলির জন্য অ্যাডোব ইলাস্ট্রেটর এবং গ্রীক অক্ষরের জন্য ম্যাথটাইপ ব্যবহার করেছি।
নিকোলাস কিনার

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

এন্ডোলিথটি নির্দেশ করার জন্য ধন্যবাদ। সিগন্যাল প্রসেসিংয়ের সময় আমি খুব বিচ্ছিন্নভাবে চিন্তাভাবনা করি।
নিকোলাস কিনার

উত্তর:


11

এসটিএফটি ট্রান্সফর্ম জোড়টি 4 টি বিভিন্ন পরামিতি দ্বারা চিহ্নিত করা যেতে পারে:

  1. এফএফটি আকার (এন)
  2. ধাপের আকার (এম)
  3. বিশ্লেষণ উইন্ডো (আকার এন)
  4. সংশ্লেষ উইন্ডো (আকার এন)

প্রক্রিয়াটি নিম্নরূপ:

  1. বর্তমান ইনপুট অবস্থান থেকে নমুনা ধরুন এন (ফিটফুট)
  2. বিশ্লেষণ উইন্ডো প্রয়োগ করুন
  3. এফএফটি করুন
  4. ফ্রিকোয়েন্সি ডোমেনে আপনি যা করতে চান তা করুন
  5. বিপরীত এফএফটি
  6. সংশ্লেষ উইন্ডো প্রয়োগ করুন
  7. বর্তমান আউটপুট অবস্থানের আউটপুট যোগ করুন
  8. এম (পদক্ষেপের আকার) নমুনাগুলি দ্বারা অগ্রিম ইনপুট এবং আউটপুট অবস্থান

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

এর জন্য আরও অনেক পছন্দ আছে এবং নির্দিষ্ট শর্তে ফরওয়ার্ড / বিপরীত স্থানান্তর সম্পূর্ণরূপে পুনর্গঠন করা হয় (যেমন আপনি মূল সংকেতটি ফিরে পেতে পারেন)।

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


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

যদি বিশ্লেষণ উইন্ডো ফাংশনটি প্রতিটি ধাপে ধাপ আকারের পদক্ষেপ = 1 দিয়ে কেন্দ্রীভূত হয়, তবে আমি কি সময়-ডোমেন ক্রমের শুরু এবং শেষকে শূন্য প্যাড করব যাতে উইন্ডোর মাঝখানে প্রতিটি নমুনায় কেন্দ্রীভূত হয় (প্রথম এবং শেষ সহ) সময়-ডোমেন অনুক্রমের নমুনাগুলি)?
নিকোলাস কিনার

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

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

আমি কিছু পরীক্ষার কোড লিখেছি এবং তারপরে আমার মূল প্রশ্নটি আপডেট করেছি।
নিকোলাস কিনার

2

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

নীচের বিবৃতিগুলির শিরোনামটি আরও ভাল স্বচ্ছতার জন্য অতিরঞ্জিত।

  1. এসটিএফটি-র ফরোয়ার্ড প্রক্রিয়াটি আসলে আসল সংকেত সংরক্ষণের জন্য নয়।
    • একটি অ-তুচ্ছ উইন্ডো (সমস্ত-নয়) এর সাথে এসটিএফটি ব্যবহার করার সময়, এফএফটিতে ইনপুট সংকেতটি মূল সংকেত খণ্ডটির স্কিউ / প্রসারিত সংস্করণ।
    • এটি বৈশিষ্ট্য নিষ্কাশন জন্য ভাল, যেখানে অকেজো / অপ্রয়োজনীয় ডেটা ফিল্টার আউট করা হয়। সিলেবল সনাক্তকরণের মতো, সমস্ত টেম্পোরাল ডেটা কোনও বক্তৃতায় কিছু নির্দিষ্ট টোন সনাক্ত করতে হয় না।
    • উইন্ডো ভেক্টরের শীর্ষটি একটি অডিও সিগন্যালে অবস্থানের সংখ্যালঘু প্রতিনিধিত্ব করে যেখানে অ্যালগরিদমগুলিকে মনোযোগ দেওয়া উচিত।
  2. সুতরাং বিপরীত এসটিএফটির কাঁচা ফলাফল এমন কিছু হতে পারে যা আমরা স্বজ্ঞাতভাবে আশা করতে পারি না।
    • এটি উইন্ডোযুক্ত সিগন্যাল টুকরা হওয়া উচিত যা এসটিএফটি বৈশিষ্ট্যগুলির আইফফিটের মতো দেখা উচিত।
  3. আসল আন-উইন্ডোযুক্ত সিগন্যাল টুকরাগুলি পেতে, কেউ ইফফ্টের কাঁচা আউটপুটে একটি বিপরীত উইন্ডো প্রয়োগ করতে পারে।
    • ম্যাপিং ফাংশনটি ডিজাইন করা সহজ যা হ্যান / হামিং উইন্ডো প্রভাবটিকে পূর্বাবস্থায় ফিরিয়ে আনতে পারে।
  4. এরপরে সংশ্লেষণ উইন্ডোটি অস্থায়ী ফ্র্যাগমেন্টেশন ওভারল্যাপিংয়ের সাথে ডিল করার জন্য জড়িত
    • যেহেতু মূল আন-উইন্ডোযুক্ত সংকেত টুকরোটি ইতিমধ্যে প্রাপ্ত হিসাবে দেখা যায়, তাই কোনও "ট্রানজিশন ওয়েটিং" ওভারল্যাপযুক্ত অংশগুলিকে বিচ্ছিন্ন করতে ব্যবহার করা যেতে পারে।
  5. আপনি যদি বিবেচনা করতে চান যে উইন্ডোযুক্ত স্পিচটির ফিটটি দুর্বল সংকেতগুলিকে কম সম্মান করতে পারে তবে সেই শক্তিশালী সংকেতগুলিকে পছন্দ করে, তবে সংশ্লেষণের উইন্ডোগুলির নকশা করার উপায় থাকতে পারে।
  6. এছাড়াও, একটি নীচের নীতি প্রয়োগ করে একটি সরাসরি এগিয়ে সংশ্লেষ উইন্ডো জেনারেশন অ্যালগরিদম দেওয়া যেতে পারে:
    • সংশ্লেষণ উইন্ডোতে ওজন উচ্চতর অবস্থান যদি এই অবস্থার জন্য বিশ্লেষণ উইন্ডোর মান বেশি হয় তবে এই অবস্থানটি ওভারল্যাপ করে এমন অন্যান্য খণ্ডগুলির সাথে তুলনা করে।
    • এই অবস্থানের জন্য বিশ্লেষণ উইন্ডোর মান কম হলে ওজন সংশ্লেষণ উইন্ডোতে অবস্থানগুলি কম করে এবং অন্যান্য ওভারল্যাপিং টুকরা বৃহত্তর বিশ্লেষণ উইন্ডো মান সহ এই অবস্থানটিকে আরও সম্মান করে।

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