اطلاعیه

Collapse
No announcement yet.

طراحی فیلتر با متلب

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

    طراحی فیلتر با متلب

    سلام من می خوام طراحی فیلتر با متلب رو شروع کنم .کسی میتونه به من کمک کنه؟

    #2
    پاسخ : طراحی فیلتر با متلب

    چه فیلتری می خواهید ؟ آنالوگ یا دیجیتال؟

    اگر دیجیتال هست FIR یا IIR ؟
    دلا یاران سه قسمند ار بدانی
    زبانی اند و نانی اند و جانی
    به نانی نان بده از در برانش
    محبت کن به یاران زبانی
    و لیکن یار جانی را به دست آر
    به جانش جان بده تا می توانی

    دیدگاه


      #3
      پاسخ : طراحی فیلتر با متلب

      http://www.4shared.com/file/32965914/c6dc0e32/_ebook__Practical_FIR_Filter_Design_in_MATLAB.html ?s=1
      دلا یاران سه قسمند ار بدانی
      زبانی اند و نانی اند و جانی
      به نانی نان بده از در برانش
      محبت کن به یاران زبانی
      و لیکن یار جانی را به دست آر
      به جانش جان بده تا می توانی

      دیدگاه


        #4
        پاسخ : طراحی فیلتر با متلب

        می خواهم با انالوگ شروع کنم.

        دیدگاه


          #5
          پاسخ : طراحی فیلتر با متلب

          سلام
          من با مطلب به صورت آنالوگ فیلتر طراحی نکردم. اما چون یک دوره طراحی فیلتر دیجیتال رو گذروندم سعی می کنم اون چیزهایی رو که ممکنه به دردتون بخوره رو بهتون بگم.

          در مطلب یک سری توابع آماده وجود دارن که براتون این کار رو می کنن. در حال حاضر مطلب روی سیستم من نصب نیست و فقط از توی جزوه مطالبی رو برای شما می نویسم.

          اول از همه بگم که در آنالوگ هم فیلترها یا FIR هستند یا IIR .
          FIR این معنی رو میده که پاسخ ضربه محدود هست اما در فیلترهای IIR پاسخ ضربه نامحدود هست.

          برای شروع بهتره دستور کانولوشن دو تابع رو یاد بگیری. این دستور به صورت زیر است : (conv(f1,f2
          شما میتونید دو تابع یا سیگنال را خودتون تعریف کنید. مثلا :
          a=[0.2,0.3,0.5,-1]
          b=sin[0:0.1:100]

          سپس نتیجه را رسم کنید.
          c=conv(a,b)
          Plot(c,’r&rsquo
          plot(abs(conv(a,b)

          در پاسخ ضربه هایی که IIR باشند نحلیل آنها از طریق conv امکان پذیر نیست به همین جهت شرکت WORKMATH تابع freqz را جهت نشان دادن فرکانسهای طبیعی ارائه کرده است که در آرگومان آن به ترتیب ضرایب صورت و ضرایب مخرج و دقت نوشته می شود.
          plot(abs(freqz([1,2,3],[2,3],512)))


          تابع abs نیز تابع قدر مطلق می باشد. فعلا کمی روی این توابع تمرین کنید تا قسمت بعدی رو خدمتتون عرض کنم.
          دلا یاران سه قسمند ار بدانی
          زبانی اند و نانی اند و جانی
          به نانی نان بده از در برانش
          محبت کن به یاران زبانی
          و لیکن یار جانی را به دست آر
          به جانش جان بده تا می توانی

          دیدگاه


            #6
            پاسخ : طراحی فیلتر با متلب

            سلام

            در دستور freqz منظور از دقت تعداد فرکانس هایی است که در ان پاسخ محاسبه و رسم می شود؟

            دیدگاه


              #7
              پاسخ : طراحی فیلتر با متلب

              به نوعی میشه اینطوری تفسیر کرد. واقعیت اینه که در تبدیل فوریه سریع یا FFT که در مطلب صورت می گیره بازه به 512 قسمت تقسیم میشه و تبدیل فوریه 512 نقطه ای گرفته میشه. توجه کنید که این دقت خیلی بالا هست و ممکنه در عمل با سیگنالهای واقعی پردازش زیادی بخواد.
              دلا یاران سه قسمند ار بدانی
              زبانی اند و نانی اند و جانی
              به نانی نان بده از در برانش
              محبت کن به یاران زبانی
              و لیکن یار جانی را به دست آر
              به جانش جان بده تا می توانی

              دیدگاه


                #8
                پاسخ : طراحی فیلتر با متلب

                لطفا در مورد دستور freqz به help مطلب مراجعه کنید تا متوجه بشید که منظور من از ضرایب چی بوده. می خوام بگم که اولین ضریب برای عدد ثابت هست و دومیش برای z به توان منفی 1 و سومی برای z به توان منفی 2 و ... می باشد.

                پس با دستور freqz می توان حوزه فرکانس توابع دیگری را نیز رسم کرد. به شرطی که بجای ضرایب مخرج یک قرار دهیم.

                برای مثال تابع سینک :
                a=sinc([-pi:pi/32:pi])
                1
                plot(abs(freqz(a,1,1024)))
                1

                همانطور که می بینید این شکل رسم شده شبیه یک فیلتر پایین گذر می باشد. اما وجود ریپل ها ایده آل ما نیست و وجود آن به دلیل این است که ورودی ما نیز واقعا سینک نیست. حال اگر ابتدا و انتهای بازه را بزرگتر کنید (4pi,4pi-) آنگاه شکل ما به سینک شبیه تر می شود و در نتیجه به شکل فیلتر ایده آل نزدیکتر می شود.

                اما اگر بخواهیم بازه را بزرگتر کنیم دو مشکل خواهیم داشت :
                1- همواره overshout وجود دارد.
                2 تعداد نقاط محاسباتی و بار محاسباتی زیاد می شود.

                به همین منظور ما سینک را در یک پنجره (سیگنال پنجره ای شکل) به شکل منحنی ای که در اطراف دامنه اش به تدریج کمی می شود ضرب می کنیم. گوشه های سینک که هر بار در حوزه تکرار می شوند شکستگیهایی بوجود می آورند که به صورت ضربه عمل می کنند.و در حوژه فرکانس باعث ایجاد ریپل می گردد. فیلتر فوق شکستگیها و لبه های فوق را تضعیف می کند. برای دیدن شکل سینک پس از تعریف سینک در a از دستور plot(a) 1 استفاده کنید.

                برای ساختن پنجره فوق نیاز به دانستن طول سینک داریم که از دستور زیر محاسبه می شود.
                b= lenght(a) 1

                برای ساختن و ضرب پنجره :
                c=a.*hanning(b)' 1

                به علامت بعد از پرانتز b توجه کنید. چرا ؟

                شکل تابع هنینگ به صورت یک منحنی هست که مقدار آن در مبدا یک بوده و به تدریج در اطراف تضعیف شده تا به 0.05 برسد.

                (لطفا عددهای 1 که بعد از فرمولها و توابع نوشته شده را نادیده بگیرید چون تنها برای به هم نریختن ترکیب آنها استفاده شده است.)
                دلا یاران سه قسمند ار بدانی
                زبانی اند و نانی اند و جانی
                به نانی نان بده از در برانش
                محبت کن به یاران زبانی
                و لیکن یار جانی را به دست آر
                به جانش جان بده تا می توانی

                دیدگاه


                  #9
                  پاسخ : طراحی فیلتر با متلب

                  bebakhshid farsi neveshtan baraye man sakhte,
                  age eshtebah nakonam shekle sinc ye filtere payiin gozare?
                  va inke alamete ' baraye ine ke matrise b ro inverse ****m vali dalilesho nemidoonam.chon too rasm hich fargi nemikone!

                  دیدگاه


                    #10
                    پاسخ : طراحی فیلتر با متلب

                    بله. گویا من اشتباه کردم. من دید دیگه ای داشتم که باعث این اشتباه شد. پایین گذره. اصلاحش کردم. این علامت ' برای این هست که در این نوع ضرب بایستی ماتریس اول سطری و ماتریس دوم ستونی باشد.
                    دلا یاران سه قسمند ار بدانی
                    زبانی اند و نانی اند و جانی
                    به نانی نان بده از در برانش
                    محبت کن به یاران زبانی
                    و لیکن یار جانی را به دست آر
                    به جانش جان بده تا می توانی

                    دیدگاه


                      #11
                      پاسخ : طراحی فیلتر با متلب

                      حال برای رسیدن به فیلتر میان گذر یا بالاگذر بایستی فیلتر فوق را شیفت داد. شیفت دادن در حوزه فرکانس معادل است با:
                      ضرب کردن حوزه زمان در e به توان jw +

                      \پس از شیفت دادن متوجه می شویم که شکل ما نامتقارن است. زیرا ضرایب تبدیل z آن مختلط است. پس بایستی آن را یک بار هم در e به توان jw - ضرب کنیم و سپس نتایج را به هم جمع کنیم.

                      پس مطابق رابطه: cos w = (e^-jw+e^+jw)/2

                      می توانیم فیلتر مزبور را در یک تابع cos ضرب کنیم تا به نتیجه مطلوب برسیم.

                      d=c.*cos([0:0.1:(b-1)*0.1])
                      1
                      با دستور فوق فیلتر ما چقدر شیفت پیدا می کند ؟

                      این بستگی به سیگنال ما دارد. می دانیم که هر سیگنال دیجیتال دارای فرکانس نمونه برداری است که با Fs نمایش داده می شود. همچنین می دانیم که در مطلب همه فرکانسها بین صفر و یک می باشند. در اینجا Fs/2 معادل عدد 1 در مطلب می باشد.
                      در مثال بالا اگر فرض کنیم سیگنال ورودی ما voice با فرکانس نمونه برداری 8kHz باشد با دستور بالا فیلتر ما به اندازه 400Hz شیفت پیدا کرده است.


                      دلا یاران سه قسمند ار بدانی
                      زبانی اند و نانی اند و جانی
                      به نانی نان بده از در برانش
                      محبت کن به یاران زبانی
                      و لیکن یار جانی را به دست آر
                      به جانش جان بده تا می توانی

                      دیدگاه


                        #12
                        پاسخ : طراحی فیلتر با متلب

                        pas be tore kholase ,az yek sinc be onvane filter estefade kardim,va ba zarb kardan dar yek win an ra behine kardim,hal baraye residan be yek filtere high/low pass bayad anra shift dahim.ba estefade az rabeteye X(e^j(w-w0)) [FT] e^jw0n x[n] mikhahim filter ra shift dahim.
                        dar nahayat zarb dar cos w mi****m.in zarb bayad dar hozeye zaman bashad ,vali tebge mohasebate gabliye man c dar hozeye frekans ast va hasel d (d=c.*cos([0:0.1:(b-1)*0.1)] fagat shamele shifte faze 180deg. ast.mishe begin eshkale karam az kojast.


                        دیدگاه


                          #13
                          پاسخ : طراحی فیلتر با متلب

                          bebakhshid man eshtebah kardam.c too hozeye frekans nist. :smile:

                          دیدگاه

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