اطلاعیه

Collapse
No announcement yet.

پروژه پردازش گفتار با HMM

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    پروژه پردازش گفتار با HMM

    پروژه پردازش گفتار با HMM
    دوستان کمک بفرمایید :nerd:
    آنقدر شکست میآ‌خورم تا راه شکست دادن را بیاموزم

    #2
    پاسخ : پروژه پردازش گفتار با HMM

    با سلام خدمت مهندس های گرامی
    بنده پروژه پردازش گفتار دارم :cry: بدین شرح که قراراه با HMM و با کمک MFCC چند کلمه رو به سیستم آموزش بدم و بعد از آموزش سیستم بتونه با شنیدن صدای شخص تشخیص بده گفتار بیان شده صحیح بوده یا خیر!!
    تا اینجا با MFCC کار کردم (در برنامه متلب) و کلمه رو پردازش شده تونستم تو سیستم ذخیره کنم :job: حالا میخوام چندین کلمه رو با مدل مخفی مارکف آموزش بدم و تو سیستم ذخیره کنم
    تو پرانتز هم بگم (حالا سی یا متلب فرقی نمیکنه مهم روش اجراست)
    کسی تجربه ای داره و تو این زمینه ها کار انجام داده؟ اگر ممکنه به من کمک کنه
    آنقدر شکست میآ‌خورم تا راه شکست دادن را بیاموزم

    دیدگاه


      #3
      پاسخ : پروژه پردازش گفتار با HMM

      سلام.
      میتونی از تولباکس Murphy برای HMM استفاده کنی(گوگل کنی پیدا میشه). در صورتی که در کار با برنامه مشکل داشتی همین جا بگو تا راهنمایی کنم.
      لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
      لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
      با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
      اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
      يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

      دیدگاه


        #4
        پاسخ : پروژه پردازش گفتار با HMM

        درود
        تاپیک زیر شاید به کارتون بیاد
        پیروز باشید
        http://www.eca.ir/forum2/index.php?topic=31504.msg284966#msg284966

        دیدگاه


          #5
          پاسخ : پروژه پردازش گفتار با HMM

          نوشته اصلی توسط هـادی
          سلام.
          میتونی از تولباکس Murphy برای HMM استفاده کنی(گوگل کنی پیدا میشه). در صورتی که در کار با برنامه مشکل داشتی همین جا بگو تا راهنمایی کنم.
          راستش من اصلا نتونستم استفاده کنم :angry:
          کاری که من کردم استفاده از ی برنامه برای MFCC بوده حالا میخوام با مدل مارکوف قدرت یادگیری چند کلمه رو هم بهش بدم :read:
          آنقدر شکست میآ‌خورم تا راه شکست دادن را بیاموزم

          دیدگاه


            #6
            پاسخ : پروژه پردازش گفتار با HMM

            نوشته اصلی توسط علی سعیدی
            درود
            تاپیک زیر شاید به کارتون بیاد
            پیروز باشید
            http://www.eca.ir/forum2/index.php?topic=31504.msg284966#msg284966
            تاپیک رو خوندم مهندس :read:
            شرح حال منم بدتر از شما هست که بهتر نیست :cry2:
            تازه باز من یه مثالی از MFCC تونستم پیدا کنم و برنامش تو متلب ران شد (یه کارایی انجام داد :applause
            آنقدر شکست میآ‌خورم تا راه شکست دادن را بیاموزم

            دیدگاه


              #7
              پاسخ : پروژه پردازش گفتار با HMM

              در این فایل درباره نحوه استفاده از تولباکس Kevin Murphy توضیح دادم.
              لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
              لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
              با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
              اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
              يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

              دیدگاه


                #8
                پاسخ : پروژه پردازش گفتار با HMM

                نوشته اصلی توسط هـادی
                در این فایل درباره نحوه استفاده از تولباکس Kevin Murphy توضیح دادم.
                دوست عزیز پسوردش رو هم لطف بفرمایید ممنون میشم
                آنقدر شکست میآ‌خورم تا راه شکست دادن را بیاموزم

                دیدگاه


                  #9
                  پاسخ : پروژه پردازش گفتار با HMM

                  نوشته اصلی توسط Reza8888
                  دوست عزیز پسوردش رو هم لطف بفرمایید ممنون میشم
                  اگه پسورد داشته باشه:
                  www.eca.ir
                  لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
                  لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
                  با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
                  اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
                  يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

                  دیدگاه


                    #10
                    پاسخ : پروژه پردازش گفتار با HMM

                    با سلام مجدد
                    اقا من هر کاری میکنم نمیتونم جواب بگیرم :angry:
                    ازدوستان خواهش میکنم بهم کمک کنن :sad:
                    آنقدر شکست میآ‌خورم تا راه شکست دادن را بیاموزم

                    دیدگاه


                      #11
                      پاسخ : پروژه پردازش گفتار با HMM

                      کسی نیست کمک کنه؟
                      آنقدر شکست میآ‌خورم تا راه شکست دادن را بیاموزم

                      دیدگاه


                        #12
                        پاسخ : پروژه پردازش گفتار با HMM

                        اگه برنامه و دیتا رو بذاری شاید بتونم کمک کنم. یا حداقل درباره اش توضیح بده.
                        لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
                        لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
                        با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
                        اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
                        يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

                        دیدگاه


                          #13
                          پاسخ : پروژه پردازش گفتار با HMM

                          1. پیش تاکید: سیگنال گفتار S(n) به یک فیلتر بالاگذر فرستاده میشود
                          s2(n) = s(n) - a*s(n-1)
                          که در آن S2 (N) سیگنال خروجی و مقدار آن معمولا بین 0.9 و 1.0 است. فیلتر تبدیل Z
                          H(z)=1-a*z-1
                          هدف از پیش تاکید جبران بخش فرکانس بالای صدای انسان است که در مکانیسم تولید ازبین رفته است. علاوه بر این، می تواند فرکانس بالای سیگنال را تقویت کند. مثال بعدی اثر پیش تاکید نشان می دهد.
                          1. waveFile='whatFood.wav';
                          2. [y, fs, nbits]=wavread(waveFile);
                          3. a=0.95;
                          4. y2 = filter([1, -a], 1, y);
                          5. time=(1:length(y))/fs;
                          6. wavwrite(y2, fs, nbits, 'whatFood_preEmphasis.wav'
                          7.
                          8. subplot(2,1,1);
                          9. plot(time, y);
                          10. title('Original wave: s(n)'
                          11. subplot(2,1,2);
                          12. plot(time, y2);
                          13. title(sprintf('After pre-emphasis: s_2(n)=s(n)-a*s(n-1), a=%f', a));
                          14.
                          15. subplot(2,1,1);
                          16. set(gca, 'unit', 'pixel'
                          17. axisPos=get(gca, 'position'
                          18. uicontrol('string', 'Play', 'position', [axisPos(1:2), 60, 20], 'callback', 'sound(y, fs)'
                          19. subplot(2,1,2);
                          20. set(gca, 'unit', 'pixel'
                          21. axisPos=get(gca, 'position'
                          22. uicontrol('string', 'Play', 'position', [axisPos(1:2), 60, 20], 'callback', 'sound(y2, fs)'
                          در مثال بالا، گفتار پس از پیش تاکید واضح تر و با حجم کوچکتر به نظر میرسد.
                          2. مسدود کردن قاب: سیگنال گفتار ورودی به فریم از 20 ~ 30 میلی ثانیه با همپوشانی اختیاری از 1/3 تا 1/2 اندازه قاب تقسیم شده است. به منظور تسهیل در استفاده از FFT معمولا اندازه قاب (از نقطه نظر نمونه) با توان 2 سیگنال برابر است. اگر این چنین نشد ، ما باید در نزدیکترین طول قدرت دو، عبور از صفر را پیدا کنیم. اگر نرخ نمونه برداری KHz16 و اندازه فریم 320 باشد بنابراین مدت زمان فریم برابر است با:
                          320/16000 = 0.02 sec = 20 ms
                          علاوه بر این اگر همپوشانی 160 نقطه باشد بنابراین نرخ فریم 16000/(320-160) = 100 فریم در ثانیه میشود.

                          3. پنجره همینگ: هر فریم باید با یک پنجره همینگ به منظور حفظ تداوم اولین و آخرین نقطه در فریم ضرب شود (در گام بعدی به تفصیل شرح داده میشود). اگر سیگنال در یک فریم مشخص شده است s(n), n = 0,…N-1, سپس سیگنال پس از پنجره همینگ به صورت s(n)*w(n), جاییکه w(n) توسط پنجره همینگ تعریف شده:
                          w(n, ) = (1 - ) -  cos(2n/(N-1)),0≦n≦N-1
                          مقادیر مختلف مربوط به منحنی های مختلف برای پنجره همینگ در شکل بعدی نشان داده شده است:
                          1. % Plot of generalized Hamming windows
                          2. N=100;
                          3. n=(0:N-1)';
                          4. alpha=linspace(0,0.5,11)';
                          5. h=[];
                          6. for i=1:length(alpha),
                          7. h = [h, (1-alpha(i))-alpha(i)*cos(2*pi*n/(N-1))];
                          8. end
                          9. plot(h);
                          10. title('Generalized Hamming Window: (1-\alpha)-\alpha*cos(2\pin/(N-1)), 0\leqn\leqN-1'
                          11.
                          12. legendStr={};
                          13. for i=1:length(alpha),
                          14. legendStr={legendStr{:}, ['\alpha=', num2str(alpha(i))]};
                          15. end
                          16. legend(legendStr);

                          در عمل، مقدار آن به 0.46 تنظیم شده است. نرم افزار MATLAB نیز دستور همینگ برای تولید منحنی پنجره همینگ را فراهم می کند.

                          4. تبدیل فوریه سریع (FFT): تجزیه و تحلیل طیفی ،توزیع انرژی های مختلف مربوط به تن های مختلف در سیگنال گفتار بر روی فرکانس را نشان می دهد. بنابراین ما معمولا FFT را برای به دست آوردن پاسخ فرکانسی مقدار هر فریم اعمال میکنیم.
                          هنگامی که ما FFT بر روی یک فریم اعمال میکنیم ، ما فرض می کنیم که سیگنال در داخل یک فریم تناوبی شده است ، و پیوسته در هنگام پیچیدن در اطراف میباشد. اگر اینطور نبود ،ما هنوز هم قادر به اعمال FFT هستیم ولی در نقاط ابتدایی و انتهایی در پاسخ دفرکانسی نقاط نامطلوب خواهیم داشت. دو استراتژی پیش روی ماست:
                          A. ضرب هر فریم توسط یک پنجره همینگ برای افزایش تداوم آن در اولین و آخرین نقاط.
                          B. نگاهی به فریم یک اندازه متغیر به طوری که همیشه شامل یک عدد صحیح از دوره های اساسی از سیگنال گفتارباشد.
                          استراتژی دوم برخورد با مشکل در عمل یک مشکل ساده و ناچیز نیست. علاوه بر این، سیگنال صدا unvoiced یک دوره اساسی در کل تناوب ندارد. در نتیجه، ما معمولا با استراتژی اول قبل از انجام FFT به انجام ضرب فریم یک پنجره همینگ میپردازیم.
                          مثال زیر اثر ضرب یک پنجره همینگ را نشان می دهد.
                          1. fs=8000;
                          2. t=(1:512)'/fs;
                          3. f=306.396;
                          4.
                          5. original=sin(2*pi*f*t)+0.2*randn(length(t),1);
                          6. windowed=original.*hamming(length(t));
                          7. [mag1, phase1, freq1]=fftOneSide(original, fs);
                          8. [mag2, phase2, freq2]=fftOneSide(windowed, fs);
                          9.
                          10. subplot(3,2,1); plot(t, original); grid on; axis([-inf inf -1.5 1.5]); title('Original signal'
                          11. subplot(3,2,2); plot(t, windowed); grid on; axis([-inf inf -1.5 1.5]); title('Windowed signal'
                          12. subplot(3,2,3); plot(freq1, mag1); grid on; title('Energy spectrum (linear scale)'
                          13. subplot(3,2,4); plot(freq2, mag2); grid on; title('Energy spectrum (linear scale)'
                          14. subplot(3,2,5); plot(freq1, 20*log10(mag1)); grid on; axis([-inf inf -20 60]); title('Energy spectrum (db)'
                          15. subplot(3,2,6); plot(freq2, 20*log10(mag2)); grid on; axis([-inf inf -20 60]); title('Energy spectrum (db)'


                          در مثال بالا سیگنال تابعی با شکل موج سینوسی بعلاوه نویز بود. بدون استفاده از پنجره همینگ ناپیوستگی در فریم های اولیه و نقاط انتهایی قله ها را در پاسخ فرکانسی عریض و کمتر نمایان میساخت. با استفاده از همینگ در پاسخ فرکانسی قله ها تیزتر ونمایان تر خواهند شد.
                          به عنوان نمونه مثال زیر از این استفاده میکند:
                          1. waveFile='littleStar.wav';
                          2. [y, fs]=wavread(waveFile);
                          3.
                          4. n=512;
                          5. t=(1:n)'/fs;
                          6. startIndex=30418;
                          7. endIndex=startIndex+n-1;
                          8.
                          9. original=y(startIndex:endIndex);
                          10. windowed=original.*hamming(n);
                          11. [mag1, phase1, freq1]=fftOneSide(original, fs);
                          12. [mag2, phase2, freq2]=fftOneSide(windowed, fs);
                          13.
                          14. subplot(3,2,1); plot(original); grid on; axis([-inf inf -1 1]); title('Original signal'
                          15. subplot(3,2,2); plot(windowed); grid on; axis([-inf inf -1 1]); title('Windowed signal'
                          16. subplot(3,2,3); plot(freq1, mag1); grid on; title('Energy spectrum (linear scale)'
                          17. subplot(3,2,4); plot(freq2, mag2); grid on; title('Energy spectrum (linear scale)'
                          18. subplot(3,2,5); plot(freq1, 20*log(mag1)); grid on; axis([-inf inf -80 120]); title('Energy spectrum (db)'
                          19. subplot(3,2,6); plot(freq2, 20*log(mag2)); grid on; axis([-inf inf -80 120]); title('Energy spectrum (db)'

                          در مثال بالا ما از یک فریم از یک کلیپ صوتی بود استفاده کردیم. با استفاده از پنجره همینگ ،هارمونیها در پاسخ فرکانسی بسیار تیزتر شده اند.
                          یادآوری میشود که اگر در سیگنال ورودی فریمی با 3 پریود همانند باشد دردامنه پاسخ فرکانسی شامل 2 صفر بین هر دو نقطه از همسایگی پاسخ فرکانسی سیگنال پایه پریود وارد خواهد شد. به عبارت دیگر هارمونیک ها در پاسخ فرکانسی بوسیله تکرار پریود در فریم باعث این خواهند شد. اگرچه ما بیشتر علاقه مند به پنهان کردن خود پاسخ فرکانسی هستیم. برای توسعه ازفیلتر میان گذر مثلثی استفاده میکنیم که در قسمت بعدی توضیح داده شده است.
                          5. ما دامنه های پاسخ فرکانسی را بصورت دسته های از 20 فیلتر میان گذر برای رسیدن به لگاریتم انرژی از هر فیتر میان گذر مثلثی ضرب میکنیم. جایگاه این فیلترها برابر فضای فرکانس مل که مربوط به فرکانس عمومی خطی است بصورت زیر خواهد بود:
                          mel(f)=1125*ln(1+f/700)
                          فرکانس مل نسبیتی از لگاریتم از یک فرکانس خطی است، بازتاب شبیه این اثر در شنیداری انسان وجود دارد. مثال زیر رسم نمودار و رابطه بین مل و فرکانس خطی میباشد.
                          1. linFreq=0:8000;
                          2. melFreq=lin2melFreq(linFreq);
                          3. plot(linFreq, melFreq);
                          4. xlabel('Frequency'
                          5. ylabel('Mel-frequency'
                          6. title('Frequency to mel-frequency curve'
                          7. axis equal tight

                          در عمل ما دو انتخاب در فیلتر میان گذر مثلثی داریم ، همانطور که در قسمت بعد نشان داده شده:
                          1. fs=16000;
                          2. filterNum=20;
                          3. plotOpt=1;
                          4. getTriFilterBankPrm(fs, filterNum, plotOpt);
                          ددلایل استفاده از فیلتر میان گذر باند میانی بشرح زیر است:
                          • صاف کردن دامنه طیف همانند هارمونی های که پهن شده اند، برای باقی ماندن در طیف با هارمونی ها. این نشان میدهد که زیر و بمی صدا عموما در MFCC ارایه نخواهد شد. در نتیجه سیستم تشخیص گفتار بیشتر یا کمتر شبیه سیگنال گفتار ورودی سیگنال خروجی را بیان میکند فقط با کمی زیری یا بمی.
                          • کاهش درگیری با خصوصیات و ویژگی ها
                          6. تبدیل کسینوسی گسسته (Discrete cosine transform):در این مرحله ،ما با تبدیل فوریه کسینوسی ،20 لگاریتم انرژی Ek را از فیلتر میان گذر مثلثی بدست می آوریم.
                          فرمول تبدیل فوریه کسینوسی به صورت زیر میباشد:
                          Cm=k=1Ncos[m*(k-0.5)*/N]*Ek, m=1,2, ..., L
                          که در آن N تعداد از فیلتر میان گذر مثلثی و L تعداد ضرایب مقیاس مل است. معمولا N=20 و L=20 در نظر گرفته میشود. زمانیکه FFT و DCT محاسبه میشود دامنه فرکانس به شبه زمانی بنام دامنه کوفرنس تبدیل میشود. این ویژگی های به دست آمده شبیه به سپسترام (cepstrum)هستند، در نتیجه آن را به عنوان مل در مقیاس ضرایب شریک، یا MFCC (mel-scale frequency cepstral coefficients)
                          7. انرژی لگاریتم: انرژی در داخل یک فریم است همچنین از ویژگی های مهم که می تواند به آسانی به دست آید. از این رو ما معمولا انرژی ورود به سیستم را به عنوان ویژگی های سیزدهم MFCC اضافه میکنیم. اگر لازم باشد، ما می توانیم برخی از ویژگی های دیگر در این مرحله، از جمله بمی، نرخ صفر متقابل، به منظور حرکت طیفبالا، و به همین ترتیب اضافه خواهد شد.
                          8. سپسترام دلتا: که آن را نیز مزیتی نسبت به مشتقات زمان (انرژی +MFCC ) به عنوان ویژگی جدید، که نشان دهنده سرعت و شتاب (انرژی +MFCC ) میباشد.
                          معادلات برای محاسبه این ویژگی ها عبارتند از:
                          △Cm(t) = [St=-MMCm(t+t)t] / [St=-MMt2]
                          مقدار M معمولا 2 تنظیم میشود. اگر ما سرعت را اضافه کنیم ، مقدار ویژگی بعد(dimension)26 است. اگر ما هر دو مقدار سرعت و شتاب را اضافه کنیم ،مقدار ویژگی بعد39 است. بسیاری از سیستم های تشخیص گفتار بر روی کامپیوتر از این ویژگی های 39 بعدی برای تشخیص استفاده میکنند.
                          آنقدر شکست میآ‌خورم تا راه شکست دادن را بیاموزم

                          دیدگاه


                            #14
                            پاسخ : پروژه پردازش گفتار با HMM

                            الان اینجا یه نمونه صدا داده میشه و پردازش شده در خروجی مشاهده میشه
                            حالا چطور باید اونو با مدل مارکوف اموزش دیده :eek: کنیم؟
                            آنقدر شکست میآ‌خورم تا راه شکست دادن را بیاموزم

                            دیدگاه


                              #15
                              پاسخ : پروژه پردازش گفتار با HMM

                              درباره نحوه استفاده از تولباکس مورفی توی فایل چند پست قبل توضیح دادم و یک نمونه برنامه تست شده (بدون دیتا) هم گذاشتم فکر می کنم توضیحاتش واضح باشه خودم که این کارو شروع کردم اوایل خیلی باهاش ور رفتم و از روی همین فایل مثال نحوه استفاده رو فهمیدم.
                              درباره کاربرد مدل مخفی مارکوف در پردازش صوت هم منبع رابینر رو توی یک تاپیک دیگه معرفی کردم که منبع خیلی خوبیه.
                              شما الان ویژگی ها رو استخراج کردی، کافیه اونها رو برنامه بدی و نتیجه بگیری. کد قسمتی که از HMM استفاده کردی بذار، کدی که گذاشتی مربوطه به استخراج ویژگی هست.
                              لطفاً برای انجام پروژه های دانشجویی پیام خصوصی نفرستید.
                              لطفاً سؤالاتی که در انجمن قابل طرح شدن هستند پیام خصوصی نکنید.
                              با تمام وجود گناه کرديم اما نه نعمتش را از ما گرفت نه گناهان ما را فاش کرد اطاعتش کنيم چه مي کند؟"دکتر شريعتي"
                              اگر جايي که ايستاده ايد را نمي پسنديد، عوضش کنيد شما درخت نيستيد!! "پاسكال"
                              يا به اندازه ي آرزوهايت تلاش کن يا به اندازه تلاشت آرزو کن. "شکسپير"

                              دیدگاه

                              لطفا صبر کنید...
                              X