מסנן ספרתי

**מסנן ספרתי** הוא מונח בעיבוד אותות ספרתי, המתאר מערכת המבצעת פעולה ליניארית על דגימות של אות. במוצא המסנן מתקבלות דגימות חדשות כאשר כל דגימה היא סכום משוקלל של הדגימות שלפניה או אחריה. באמצעות המסנן ניתן להדגיש או להפחית תכונות של אות דגום. ישנו קשר הדוק בין המסננים הספרתיים לבין המסננים האנלוגיים, ובתנאים מסוימים ניתן לבצע סינון ספרתי על אות דגום במקום דגימה של אות אנלוגי שעבר סינון אנלוגי.

מימושים של מסנן ספרתי יכולים להיעשות בתוכנה על גבי מעבד כללי או על גבי מעבד אותות ספרתי (DSP), אשר מתוכנן בין השאר על מנת לתמוך בפעולות של סינון באמצעות מקבול של פעולות והוראות ייעודיות לביצוע של מכפלה וסכימה בפקודה אחת. מקובל גם לממש מסננים ספרתיים ב-FPGA או לבנות חומרה ייעודית על מנת לעמוד בדרישות של מערכת זמן אמת.

החשיבות של מסננים ספרתיים היא בתחומים רבים, למשל תקשורת ספרתית, עיבוד תמונה, עיבוד אותות קול, איכון, שערוך ועוד.

## ייצוג
ניתן לייצג מסנן ספרתי באופן מתמטי בכמה דרכים. ראשית באמצעות משוואת הפרשים, הנתונה לפי:

:y[n]=\sum_{m=-\infty}^\infty{b[m]x[n-m]}-\sum_{m=-\infty,m\neq0}^\infty{a[m]y[n-m]}

כאשר x[n] הוא אות הכניסה ו-y[n] הוא אות המוצא, והמקדמים a[n] ו-b[n] הם מקדמי המסנן. במערכת פרקטית הסכימה אינה מתבצעת על גבי אינסוף מקדמים אלא על מספר סופי, והאינדקס הראשון של הסכימה הוא אפס, במקרה זה המסנן נקרא סיבתי. הסכום השני נקרא משוב (Feedback). ניתן לכתוב את המשוואה באופן שקול באמצעות קונבולוציה:

:y[n]*a[n]=x[n]*b[n]

כאשר a[0]=1.

כאשר a[n] שווה לאפס לכל n ו-b[n] הוא בעל מספר סופי של מקדמים המסנן נקרא מסנן תגובה סופית להלם  – מסנן FIR, אחרת הוא נקרא מסנן תגובה אינסופית להלם  – מסנן IIR. הכוונה להלם של קרונקר המוגדרת כך:

:\delta[n] = \begin{cases} 1, & \text{if }n\text{=0} \\ 0, & \text{otherwise} \end{cases}

נהוג לסמן את התגובה להלם כ-h[n]. אם מדובר בתגובה סופית להלם, כלומר a[n]=0, \forall{n} אזי:

:h[n]=b[n], 0\leq n\leq N-1

במקרה ש-a[n] אינו אפס, ניתן להציג את תגובת המערכת להלם כסדרה אינסופית של מקדמים הפועלים על אות הכניסה, ללא משוב.

:h[n]=b[n], n\geq0 

את משוואת ההפרשים ניתן להמיר לייצוג באמצעות התמרת Z:

:Y(z)=\frac{B(z)}{A(z)}X(z)

כאשר A(z) נתון לפי:

:A(z)=\sum_{k=-\infty}^\infty{a[k]z^{-k}}

ו-B(z), X(z), Y(z) מוגדרים באופן דומה.

באופן דומה להתמרת ה-Z, ניתן להתייחס למקדמי המסנן כמקדמי טור פורייה. בהקשר של מסננים ואותות דגומים, האות בתחום התדר ידוע כהתמרת פורייה בזמן בדיד (DTFT - Discrete Time Fourier Transform). עבור האות x[n], למשל, יתקבל:

:\text{DTFT}(x[n])=\sum_{n=-\infty}^\infty{x[n]e^{-j\omega n}}=X(e^{j\omega})

X מסומן כפונקציה של e^{j\omega} על מנת להדגיש את המחזוריות שלו ב-2\pi.

## דוגמה
אם מקדמי המסנן הם a[1]=-0.25, b[1]=-0.5 ו־b[0]=1, אז משוואת ההפרשים היא:

:y[n]=x[n]-0.5x[n-1]+0.25y[n-1]

עבור האיבר הקודם במוצא יתקבל:

:y[n-1]=x[n-1]-0.5x[n-2]+0.25y[n-2]

בהצבת המשוואה השנייה בראשונה יתקבל:

:y[n]=x[n]-0.5x[n-1]+0.25(x[n-1]-0.5x[n-2]+0.25y[n-2])


:y[n]=x[n]-0.25x[n-1]-0.125x[n-2]+0.0675y[n-2]


ניתן להמשיך כל הלאה. המקדם של y[n-k] יתקרב לאפס ככל שיומשך. על מנת לקבל נוסחה סגורה, ניתן לראות את התמרת Z של המערכת:

:Y(z)=\frac{1-0.5z^{-1}}{1-0.25z^{-1}}X(z)=X(z)(1-0.5z^{-1})\sum_{k=0}^{\infty}0.25^{k}z^{-k}

:Y(z)=X(z)(\sum_{k=0}^{\infty}0.25^{k}z^{-k}-2\sum_{k=1}^{\infty}0.25^{k}z^{-k})=X(z)(1-\sum_{k=1}^{\infty}0.25^{k}z^{-k})

בתחום הזמן יתקבל:

:y[n]=x[n]-\sum_{k=1}^{\infty}x[n-k]0.25^{k}

## שימוש במסנן ספרתי בתחום הזמן והתדר
את המסנן הספרתי ניתן להפעיל בתחום הזמן (קונבולוציה) או בתחום התדר (הכפלה) בהינתן התנאים המתאימים (כדוגמת קצב דגימה מספק על-פי [תנאי נייקוויסט]). במערכות זמן אמת מקובל לדגום את האות ולהעבירו לתחום התדר בשיטת STFT (Short Time Fourier Transform). ואז ניתן לבצע את הסינון הספרתי בהכפלה.

## מימוש
עבור מסנני FIR מדובר בסכימה פשוטה למדי, למשל על מימוש של המסנן h[n]=\frac{1}{3}\delta[n]+\frac{1}{3}\delta[n-1]+\frac{1}{3}\delta[n-2].טקסט=|מסגרת|גבול|מרכז
ישנם שני סוגים נפוצים למימוש של מסנן IIR:

### Direct Form 1
מרכז|ממוזער|441x441 פיקסלים|מימוש direct form 1 של מסנן IIR מסדר שני

זהו מימוש המבוסס על חישוב מפורש של משוואת ההפרשים של המסנן. עבור סכימה זו נדרשים 2N השהיות ו-2N סכימות, כאשר N הוא סדר הפולינום של התמרת ה-Z של המערכת (בהנחה שסדר המונה וסדר המכנה זהה).

### Direct Form 2
מרכז|ממוזער|440x440 פיקסלים|מימוש direct form 2 של מסנן IIR מסדר שני
מימוש זה מבוסס על הפעלת המכנה של התמרת ה-Z של המסנן ולאחר מכן הפעלת המונה על התוצאה. עבור סכימה זו נדרשים N השהיות ו-2N סכימות.

## הקשר לסינון אנלוגי
נניח שאות רציף עובר במסנן אנלוגי ולאחר מכן נדגם:

:y(t)=\textstyle \int\limits_{-\infty}^{\infty} \displaystyle h(\tau)x(t-\tau)d\tau

:y_s[n]=y(nT)

לפי משפט הדגימה מתקיים הקשר הבא:

:Y_s(e^{j\omega})=\frac{1}{T}\sum_{k=-\infty}^\infty Y(\frac{\omega-2\pi k}{T})=\frac{1}{T}\sum_{k=-\infty}^\infty X(\frac{\omega-2\pi k}{T})H(\frac{\omega-2\pi k}{T})

אם נניח ש-H ו-X חסומי סרט ובנוסף הדגימה היא בקצב נייקוויסט אזי אין חפיפות בתדר (Aliasing) בין האיברים שבסכימה. במקרה כזה אם נגדיר x_s[n]=x(nT), h_s[n]=h(nT),

ֿאזי:

:Y_s(e^{j\omega})=\frac{1}{T}\sum_{k=-\infty}^\infty X(\frac{\omega-2\pi k}{T})H(\frac{\omega-2\pi k}{T})=\frac{1}{T}\sum_{k=-\infty}^\infty X(\frac{\omega-2\pi k}{T})\sum_{k=-\infty}^\infty H(\frac{\omega-2\pi k}{T})
=TH_s(e^{j\omega})X_s(e^{j\omega})

כאשר השוויון השני נכון מכיוון שתנאי נייקוויסט מתקיים, כלומר:

:X(\frac{\omega-2\pi k}{T})H(\frac{\omega-2\pi m}{T})=0, \forall\omega, k\neq m

מכיוון שמכפלה בתדר שקולה לקונבולוציה בזמן אז בתחום הזמן מקבלים:

:y_s[n]=T\sum_{k=-\infty}^{\infty}x_s[n-k]h_s[k]

המשמעות היא שניתן להחליף סינון אנלוגי ולאחריו דגימה של אות המוצא בדגימה ולאחריה סינון ספרתי כאשר המסנן הספרתי הוא דגימות של המסנן האנלוגי.

## מסננים נפוצים
### מסנן מעביר נמוכים
מסנן מעביר נמוכים (Lowpass Filter) הוא מסנן המעביר תדרים נמוכים מ-\omega_c ומאפס את כל התדרים שמעליו, כאשר \omega_c ידוע כתדר הקיטעון. מסנן מעביר נמוכים אידיאלי נתון לפי:

:\mathrm{Lowpass}_{ideal} = \begin{cases} 1, & \text{if }{|\omega|

התגובה בזמן של המסנן האידיאלי היא אינסופית, ולכן במימוש מעשי מגדירים "קטע מעבר" (transition band) בו המסנן עובר מ-1 ל-0 בצורה מתונה יותר.

### מסנן מעביר גבוהים ומסנן מעביר פס
באופן דומה למסנן מעביר הנמוכים, מסנן המעביר גבוהים (Highpass Filter) מעביר רק תדרים גבוהים מ-\omega_c, בעוד מסנן מעביר פס (Bandpass Filter) מעביר תדרים בין \omega_1 ל-\omega_2.

### גרסאות ספרתיות למסנן אנלוגיים
כפי שהראינו קודם ניתן להשתמש בדגימות של מסנן אנלוגי לתכנון מסנן ספרתי, ולכן למסננים אנלוגיים רבים יש גרסה ספרתית. למשל מסנן צ'בישב או מסנן באטרווארת'.

### מסננים מסתגלים
מסנן מסתגל הוא מסנן אשר מקדמיו משתנים בזמן בהתאם לקריטריון אופטימיזציה כלשהו. לדוגמה, נניח שאות ידוע, x(t), עובר סינון אנלוגי ואנו מעוניינים לשערך את המסנן באופן ספרתי מתוך דגימות של אות המוצא y(nT), למשל בשיטת Least Mean Squares.

ניתן להתחיל מניחוש התחלתי h^{(0)}_{estimated}[n]=\delta[n], ולחשב את השגיאה הרגעית:

:e^{(0)}=y(nT)-h^{(0)}_{estimated}[n]*x(nT)

כאשר * מסמן קונבולוציה בזמן בדיד.

כעת ניתן לעדכן את מקדמי המסנן, למשל באופן הבא:

:h^{(1)}_{estimated}[n]=h^{(0)}_{estimated}[n]+\mu e^{(0)}x(nT)

כך ניתן להמשיך ולעדכן את השערוך באופן איטרטיבי.

## ראו גם
* מסנן מתואם
* מסנן קלמן
* אקולייזר
* משפט הדגימה של נייקוויסט-שאנון
* מסנן Root-raised-cosine
* ממיר אנלוגי לדיגיטלי (ADC)
* ממיר דיגיטלי לאנלוגי (DAC)

## לקריאה נוספת
* Oppenheim, Alan V., and Ronald W. Schafer. *Digital Signal Processing*. Prentice Hall, 1975. .
* Simon Haykin: Adaptive Filter Theory, Prentice Hall, 2002

## הערות שוליים

2019 03
קטגוריה:עיבוד אותות ספרתי