מסנן ספרתי

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

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

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

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

<math>y[n]=\sum_{m=-\infty}^\infty{b[m]x[n-m]}-\sum_{m=-\infty,m\neq0}^\infty{a[m]y[n-m]}</math>

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

<math>y[n]*a[n]=x[n]*b[n]</math>

כאשר <math>a[0]=1</math>.

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

<math>\delta[n] = \begin{cases} 1, & \text{if }n\text{=0} \\ 0, & \text{otherwise} \end{cases}</math>

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

<math>h[n]=b[n], 0\leq n\leq N-1</math>

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

<math>h[n]=b[n], n\geq0 </math>

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

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

<math>Y(z)=\frac{B(z)}{A(z)}X(z)</math>

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

<math>A(z)=\sum_{k=-\infty}^\infty{a[k]z^{-k}}</math>

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

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

<math>DTFT(x[n])=\sum_{n=-\infty}^\infty{x[n]e^{-j\omega n}}=X(e^{j\omega})</math>

הסיבה לכך שכותבים <math>X</math> בתלות ב-<math>e^{j\omega}</math> היא כדי להדגיש את מחזוריות ה-<math>2\pi</math> שלו.

== דוגמה ==
נניח כי מקדמי המסנן הם <math>b[0]=1, b[1]=-0.5, a[1]=-0.25</math> אז משוואת ההפרשים היא:

<math>y[n]=x[n]-0.5x[n-1]+0.25y[n-1]</math>

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

<math>y[n-1]=x[n-1]-0.5x[n-2]+0.25y[n-2]</math>

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

<math>y[n]=x[n]-0.5x[n-1]+0.25(x[n-1]-0.5x[n-2]+0.25y[n-2])
</math>

<math>y[n]=x[n]-0.25x[n-1]-0.125x[n-2]+0.0675y[n-2]
</math>

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

<math>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}</math>

<math>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})</math>

ואם נחזור לתחום הזמן נקבל:

<math>y[n]=x[n]-\sum_{k=1}^{\infty}x[n-k]0.25^{k}</math>

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

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

===Direct Form 1 ===
מימוש direct form 1 של מסנן IIR מסדר שני

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

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

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

<math>y(t)=\textstyle \int\limits_{-\infty}^{\infty} \displaystyle h(\tau)x(t-\tau)d\tau</math>

<math>y_s[n]=y(nT)</math>

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

<math>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})</math>

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

ֿאזי:

<math>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})</math>

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

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

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

<math>y_s[n]=T\sum_{k=-\infty}^{\infty}x_s[n-k]h_s[k]</math>

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

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

<math>\mathrm{Lowpass}_{ideal} = \begin{cases} 1, & \text{if }{|\omega|<\omega_c} \\ 0, & \text{otherwise} \end{cases}</math>

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

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

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

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

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

<math>e^{(0)}=y(nT)-h^{(0)}_{estimated}[n]*x(nT)</math>

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

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

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

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

== ראו גם ==
* מסנן מתואם
* מסנן קלמן
* אקולייזר
* תורת הדגימה
* מסנן 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
קטגוריה:עיבוד אותות ספרתי