מסנן ספרתי

מסנן ספרתי הוא מונח בעיבוד אותות ספרתי, המתאר מערכת המבצעת פעולה ליניארית על דגימות של אות. במוצא המסנן מתקבלות דגימות חדשות כאשר כל דגימה היא סכום משוקלל של הדגימות שלפניה או אחריה. באמצעות המסנן ניתן להדגיש או להפחית תכונות של אות דגום. ישנו קשר הדוק בין המסננים הספרתיים לבין המסננים האנלוגיים, ובתנאים מסוימים ניתן לבצע סינון ספרתי על אות דגום במקום דגימה של אות אנלוגי שעבר סינון אנלוגי. מימושים של מסנן ספרתי יכולים להיעשות בתוכנה על גבי מעבד כללי או על גבי מעבד אותות ספרתי (DSP), אשר מתוכנן בין השאר על מנת לתמוך בפעולות של סינון באמצעות מקבול של פעולות והוראות ייעודיות לביצוע של מכפלה וסכימה בפקודה אחת. מקובל גם לממש מסננים ספרתיים ב-FPGA או לבנות חומרה ייעודית על מנת לעמוד בדרישות של מערכת זמן אמת. החשיבות של מסננים ספרתיים היא בתחומים רבים, למשל תקשורת ספרתית, עיבוד תמונה, עיבוד אותות קול, איכון, שערוך ועוד. ניתן לייצג מסנן ספרתי באופן מתמטי בכמה דרכים. ראשית באמצעות משוואת הפרשים, הנתונה לפי: y [ n ] = ∑ m = − ∞ ∞ b [ m ] x [ n − m ] − ∑ m = − ∞ , m ≠ 0 ∞ a [ m ] y [ n − m ] {\displaystyle y[n]=\sum _{m=-\infty }^{\infty }{b[m]x[n-m]}-\sum _{m=-\infty ,m\neq 0}^{\infty }{a[m]y[n-m]}} כאשר x [ n ] {\displaystyle x[n]} הוא אות הכניסה ו- y [ n ] {\displaystyle y[n]} הוא אות המוצא, והמקדמים a [ n ] {\displaystyle a[n]} ו- b [ n ] {\displaystyle b[n]} הם מקדמי המסנן. במערכת פרקטית הסכימה אינה מתבצעת על גבי אינסוף מקדמים אלא על מספר סופי, והאינדקס הראשון של הסכימה הוא אפס, במקרה זה המסנן נקרא סיבתי. הסכום השני נקרא משוב (Feedback). שימו לב שצורה שקולה לרישום המשוואה היא באמצעות קונבולוציה: y [ n ] ∗ a [ n ] = x [ n ] ∗ b [ n ] {\displaystyle y[n]*a[n]=x[n]*b[n]} כאשר a [ 0 ] = 1 {\displaystyle a[0]=1} . כאשר a [ n ] {\displaystyle a[n]} שווה לאפס לכל n {\displaystyle n} ו- b [ n ] {\displaystyle b[n]} הוא בעל מספר סופי של מקדמים המסנן נקרא מסנן תגובה סופית להלם (Finite impulse response) – מסנן FIR, אחרת הוא נקרא מסנן תגובה אינסופית להלם (Infinite impulse response) – מסנן IIR. הכוונה להלם של קרונקר המוגדר כ־ δ [ n ] = { 1 , if  n =0 0 , otherwise {\displaystyle \delta [n]={\begin{cases}1,&{\text{if }}n{\text{=0}}\\0,&{\text{otherwise}}\end{cases}}} נהוג לסמן את התגובה להלם כ- h [ n ] {\displaystyle h[n]} . אם מדובר בתגובה סופית להלם, כלומר a [ n ] = 0 , ∀ n {\displaystyle a[n]=0,\forall {n}} אזי: h [ n ] = b [ n ] , 0 ≤ n ≤ N − 1 {\displaystyle h[n]=b[n],0\leq n\leq N-1} במקרה ש- a [ n ] {\displaystyle a[n]} אינו אפס, ניתן להציג את תגובת המערכת להלם כסדרה אינסופית של מקדמים הפועלים על אות הכניסה, ללא משוב. h [ n ] = b [ n ] , n ≥ 0 {\displaystyle h[n]=b[n],n\geq 0} ראו למטה דוגמה כיצד מוצאים תגובה אינסופית למערכת עם משוב. את משוואת ההפרשים ניתן להמיר לייצוג באמצעות התמרת Z: Y ( z ) = B ( z ) A ( z ) X ( z ) {\displaystyle Y(z)={\frac {B(z)}{A(z)}}X(z)} כאשר A ( z ) {\displaystyle A(z)} נתון לפי: A ( z ) = ∑ k = − ∞ ∞ a [ k ] z − k {\displaystyle A(z)=\sum _{k=-\infty }^{\infty }{a[k]z^{-k}}} ן- B ( z ) , X ( z ) , Y ( z ) {\displaystyle B(z),X(z),Y(z)} מוגדרים באופן דומה. באופן דומה להתמרת ה-Z, ניתן להתייחס למקדמי המסנן כמקדמים של טור פורייה. בהקשר של מסננים ואותות דגומים הסיגנל בתדר ידוע כהתמרת פורייה לאותות בזמן בדיד (DTFT - Discrete Time Fourier Transform). עבור האות x [ n ] {\displaystyle x[n]} , למשל, נקבל: D T F T ( x [ n ] ) = ∑ n = − ∞ ∞ x [ n ] e − j ω n = X ( e j ω ) {\displaystyle DTFT(x[n])=\sum _{n=-\infty }^{\infty }{x[n]e^{-j\omega n}}=X(e^{j\omega })} הסיבה לכך שכותבים X {\displaystyle X} בתלות ב- e j ω {\displaystyle e^{j\omega }} היא כדי להדגיש את מחזוריות ה- 2 π {\displaystyle 2\pi } שלו. נניח כי מקדמי המסנן הם b [ 0 ] = 1 , b [ 1 ] = − 0.5 , a [ 1 ] = − 0.25 {\displaystyle b[0]=1,b[1]=-0.5,a[1]=-0.25} אז משוואת ההפרשים היא: y [ n ] = x [ n ] − 0.5 x [ n − 1 ] + 0.25 y [ n − 1 ] {\displaystyle y[n]=x[n]-0.5x[n-1]+0.25y[n-1]} אם נסתכל על האיבר הקודם במוצא נקבל: y [ n − 1 ] = x [ n − 1 ] − 0.5 x [ n − 2 ] + 0.25 y [ n − 2 ] {\displaystyle y[n-1]=x[n-1]-0.5x[n-2]+0.25y[n-2]} אם נציב את המשוואה השנייה בראשונה נקבל: y [ n ] = x [ n ] − 0.5 x [ n − 1 ] + 0.25 ( x [ n − 1 ] − 0.5 x [ n − 2 ] + 0.25 y [ n − 2 ] ) {\displaystyle 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.25 x [ n − 1 ] − 0.125 x [ n − 2 ] + 0.0675 y [ n − 2 ] {\displaystyle y[n]=x[n]-0.25x[n-1]-0.125x[n-2]+0.0675y[n-2]} וכך ניתן להמשיך הלאה, כאשר נשים לב כי המקדם של y [ n − k ] {\displaystyle y[n-k]} יתקרב לאפס ככל שנמשיך. על מנת לקבל נוסחה סגורה, נסתכל על התמרת Z של המערכת: Y ( z ) = 1 − 0.5 z − 1 1 − 0.25 z − 1 X ( z ) = X ( z ) ( 1 − 0.5 z − 1 ) ∑ k = 0 ∞ 0.25 k z − k {\displaystyle 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 ) ( ∑ k = 0 ∞ 0.25 k z − k − 2 ∑ k = 1 ∞ 0.25 k z − k ) = X ( z ) ( 1 − ∑ k = 1 ∞ 0.25 k z − k ) {\displaystyle 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 ] − ∑ k = 1 ∞ x [ n − k ] 0.25 k {\displaystyle y[n]=x[n]-\sum _{k=1}^{\infty }x[n-k]0.25^{k}} את המסנן הספרתי ניתן להפעיל בתחום הזמן (קונבולוציה) ו/או בתחום התדר (הכפלה) בהינתן התנאים המתאימים (כדוגמת קצב דגימה מספק על-פי [תנאי נייקוויסט]). במערכות זמן אמת מקובל לדגום את האות ולהעבירו לתחום התדר בשיטת STFT (Short Time Fourier Transform ). ואז ניתן לבצע את הסינון הספרתי בהכפלה. עבור מסנני FIR מדובר בסכימה פשוטה למדי, למשל על מימוש של המסנן h [ n ] = 1 3 δ [ n ] + 1 3 δ [ n − 1 ] + 1 3 δ [ n − 2 ] {\displaystyle h[n]={\frac {1}{3}}\delta [n]+{\frac {1}{3}}\delta [n-1]+{\frac {1}{3}}\delta [n-2]} . ישנם שני סוגים נפוצים למימוש של מסנן IIR: זהו מימוש המבוסס על חישוב מפורש של משוואת ההפרשים של המסנן. עבור סכימה זו נדרשים 2N השהיות ו-2N סכימות, כאשר N הוא סדר הפולינום של התמרת ה-Z של המערכת (בהנחה שסדר המונה וסדר המכנה זהה). מימוש זה מבוסס על הפעלת המכנה של התמרת ה-Z של המסנן ולאחר מכן הפעלת המונה על התוצאה. עבור סכימה זו נדרשים N השהיות ו-2N סכימות. נניח שאות רציף עובר מסנן אנלוגי ולאחר מכן דגימה: y ( t ) = ∫ − ∞ ∞ h ( τ ) x ( t − τ ) d τ {\displaystyle y(t)=\textstyle \int \limits _{-\infty }^{\infty }\displaystyle h(\tau )x(t-\tau )d\tau } y s [ n ] = y ( n T ) {\displaystyle y_{s}[n]=y(nT)} לפי משפט הדגימה מתקיים הקשר הבא: Y s ( e j ω ) = 1 T ∑ k = − ∞ ∞ Y ( ω − 2 π k T ) = 1 T ∑ k = − ∞ ∞ X ( ω − 2 π k T ) H ( ω − 2 π k T ) {\displaystyle 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 {\displaystyle H} ו- X {\displaystyle X} חסומי סרט ובנוסף הדגימה היא בקצב נייקוויסט אזי אין חפיפות בתדר (Aliasing) בין האיברים שבסכימה. במקרה כזה אם נגדיר x s [ n ] = x ( n T ) , h s [ n ] = h ( n T ) {\displaystyle x_{s}[n]=x(nT),h_{s}[n]=h(nT)} , ֿאזי: Y s ( e j ω ) = 1 T ∑ k = − ∞ ∞ X ( ω − 2 π k T ) H ( ω − 2 π k T ) = 1 T ∑ k = − ∞ ∞ X ( ω − 2 π k T ) ∑ k = − ∞ ∞ H ( ω − 2 π k T ) = T H s ( e j ω ) X s ( e j ω ) {\displaystyle 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 ( ω − 2 π k T ) H ( ω − 2 π m T ) = 0 , ∀ ω , k ≠ m {\displaystyle X({\frac {\omega -2\pi k}{T}})H({\frac {\omega -2\pi m}{T}})=0,\forall \omega ,k\neq m} מכיוון שמכפלה בתדר שקולה לקונבולוציה בזמן אז בתחום הזמן מקבלים: y s [ n ] = T ∑ k = − ∞ ∞ x s [ n − k ] h s [ k ] {\displaystyle y_{s}[n]=T\sum _{k=-\infty }^{\infty }x_{s}[n-k]h_{s}[k]} המשמעות היא שניתן להחליף סינון אנלוגי ולאחריו דגימה של אות המוצא בדגימה ולאחריה סינון ספרתי כאשר המסנן הספרתי הוא דגימות של המסנן האנלוגי. מסנן מעביר נמוכים (Lowpass Filter) הוא מסנן המעביר תדרים נמוכים מ- ω c {\displaystyle \omega _{c}} ומאפס את כל התדרים שמעליו, כאשר ω c {\displaystyle \omega _{c}} ידוע כתדר הקיטעון. מסנן מעביר נמוכים אידיאלי נתון לפי: L o w p a s s i d e a l = { 1 , if  | ω | < ω c 0 , otherwise {\displaystyle \mathrm {Lowpass} _{ideal}={\begin{cases}1,&{\text{if }}{|\omega |<\omega _{c}}\\0,&{\text{otherwise}}\end{cases}}} התגובה בזמן של המסנן האידיאלי היא אינסופית, ולכן במימוש מעשי מגדירים "קטע מעבר" (transition band) בו המסנן עובר מ-1 ל-0 בצורה מתונה יותר. באופן דומה למסנן מעביר הנמוכים, מסנן המעביר גבוהים (Highpass Filter) מעביר רק תדרים גבוהים מ- ω c {\displaystyle \omega _{c}} , בעוד מסנן מעביר פס (Bandpass Filter) מעביר תדרים בין ω 1 {\displaystyle \omega _{1}} ל- ω 2 {\displaystyle \omega _{2}} . כפי שהראינו קודם ניתן להשתמש בדגימות של מסנן אנלוגי לתכנון מסנן ספרתי, ולכן למסננים אנלוגיים רבים יש גרסה ספרתית. למשל מסנן צ'בישב או מסנן באטרווארת'. מסנן מסתגל הוא מסנן אשר מקדמיו משתנים בזמן בהתאם לקריטריון אופטימיזציה כלשהו. לדוגמה, נניח שאות ידוע, x ( t ) {\displaystyle x(t)} , עובר סינון אנלוגי ואנו מעוניינים לשערך את המסנן באופן ספרתי מתוך דגימות של אות המוצא y ( n T ) {\displaystyle y(nT)} , למשל בשיטת Least Mean Squares. ניתן להתחיל מניחוש התחלתי h e s t i m a t e d ( 0 ) [ n ] = δ [ n ] {\displaystyle h_{estimated}^{(0)}[n]=\delta [n]} , ולחשב את השגיאה הרגעית: e ( 0 ) = y ( n T ) − h e s t i m a t e d ( 0 ) [ n ] ∗ x ( n T ) {\displaystyle e^{(0)}=y(nT)-h_{estimated}^{(0)}[n]*x(nT)} כאשר ∗ {\displaystyle *} מסמן קונבולוציה בזמן בדיד. כעת ניתן לעדכן את מקדמי המסנן, למשל באופן הבא: h e s t i m a t e d ( 1 ) [ n ] = h e s t i m a t e d ( 0 ) [ n ] + μ e ( 0 ) x ( n T ) {\displaystyle h_{estimated}^{(1)}[n]=h_{estimated}^{(0)}[n]+\mu e^{(0)}x(nT)} כך ניתן להמשיך ולעדכן את השערוך באופן איטרטיבי. מסנן מתואם מסנן קלמן אקולייזר תורת הדגימה מסנן Root-raised-cosine ADC DAC Oppenheim, Alan V., and Ronald W. Schafer. Digital Signal Processing. Prentice Hall, 1975. ISBN 9780132146357. Simon Haykin: Adaptive Filter Theory, Prentice Hall, 2002 https://ccrma.stanford.edu/~jos/st/Discrete_Time_Fourier_Transform.html Direct-Form I, ccrma.stanford.edu Direct Form II, ccrma.stanford.edu Convolution Theorem, ccrma.stanford.edu