Discrete Fast Fourier Transform / Spice Simulation

‫•‬
‫ﺗﻮﺿﻴﺤﺎت ‪:‬‬
‫ﻫﻤﻮاره ﻳﻚ ﺳﻴﮕﻨﺎل در ﺣﻮزه زﻣﺎن را ﻣﻲ ﺗﻮان در ﺣﻮزه ﻓﺮﻛﺎﻧﺲ ﻧﻴﺰ ﻧﻤﺎﻳﺶ داد‪ ) .‬در دﻳﺪﮔﺎه ﻣﻬﻨﺪﺳﻲ ﻛـﺎر‬
‫ﺑﺎ ﺣﻮزه ﻓﺮﻛﺎﻧﺲ ﺑﺮ ﺣﻮزه زﻣﺎن ارﺟﺤﻴﺖ دارد‪( .‬ﺑﺮاي ﻣﺜﺎل ﺳـﻴﮕﻨﺎل ) ‪ x(n) = sin( 2 * pi * f0* n * ts‬را در‬
‫ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ‪ .‬ﺷﻜﻞ ﻓﺮﻛﺎﻧﺴﻲ آن ﺑﻪ ﺻﻮرت زﻳﺮ ﺧﻮاﻫﺪ ﺑﻮد‪ :‬ﺑﻪ ﺗﻐﻴﻴﺮ ﻓﺮﻛﺎﻧﺲ و ﺟﻤﻊ دو ﺳﻴﮕﻨﺎل ﺗﻮﺟﻪ ﻛﻨﻴﺪ ‪:‬‬
‫ﺑﺮاي ﻳﻚ ﺳﻴﮕﻨﺎل ﭘﻴﻮﺳﺘﻪ در زﻣﺎن ﺗﺒﺪﻳﻞ ﻓﻮرﻳﻪ آن ﺑﻪ ﺻﻮرت زﻳﺮ ﺗﻌﺮﻳﻒ ﻣﻲ ﺷﻮد ‪:‬‬
‫) ﺑﻪ ﺷﺒﺎﻫﺖ ﺗﺒﺪﻳﻞ ﻓﻮق ﺑﻪ ﺗﺒﺪﻳﻞ ﻻﭘﻼس ﺗﻮﺟﻪ ﻛﻨﻴﺪ‪ .‬اﻳﻦ ﺗﺒﺪﻳﻞ دﻗﻴﻘﺎً ﻫﻤﺎن رﻓﺘﺎر ﻫﺎ را دﻧﺒﺎل ﻣﻲ ﻛﻨﺪ‪( .‬‬
‫ﻣﺪل ﮔﺴﺴﺘﻪ ﺗﺒﺪﻳﻞ ﻓﻮق ﺑﻪ ﺷﻜﻞ زﻳﺮ اﺳﺖ ‪:‬‬
‫ﻃﺒﻴﻌﺘﺎ ﺗﺒﺪﻳﻞ ﻣﻌﻜﻮس راﺑﻄﻪ ﻓﻮق ﺑﻪ ﺻﻮرت زﻳﺮ ﺧﻮاﻫﺪ ﺑﻮد‪.‬‬
‫ﻧﻮﺷﺘﻦ ﻳﻚ ﺑﺮﻧﺎﻣﻪ ﺑﺮاي ﻣﺤﺎﺳﺒﻪ ﺗﺒﺪﻳﻞ ﻓﻮرﻳﻪ از روي ﺳﺮي آﺳﺎن وﻟﻲ ﺑﺴﻴﺎر ﻛﻨﺪ اﺳﺖ‪ .‬ﺑﻪ ﻫﻤﻴﻦ دﻟﻴﻞ روش ﻫﺎي )ﺑﺴﻴﺎر(‬
‫ﺳﺮﻳﻌﺘﺮي ﺑﺮاي ﻣﺤﺎﺳﺒﻪ اﻳﻦ ﺗﺒﺪﻳﻞ وﺟﻮد دارد‪ .‬اﻳﺪه اﺻﻠﻲ اﻳﻦ روش ﺑﺮ ﻣﺠﺰاﺳﺎزي اﻧﺪﻳﺲ ﻫﺎي ﻓﺮد و زوج اﺳﺘﻮار اﺳﺖ‪ .‬ﺑﺮ اﺳﺎس‬
‫‪ DFT‬دارﻳﻢ‪:‬‬
‫در اﻳﻦ ﺻﻮرت ﺧﻮاﻫﻴﻢ داﺷﺖ ‪:‬‬
‫و در ﻧﻬﺎﻳﺖ ‪:‬‬
‫ﻳﻚ ﻓﺮم ﺑﺎزﮔﺸﺘﻲ ﺳﺎده‪ ،‬ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛﻪ دﻳﮕﺮ از ﻣﺤﺎﺳﺒﻪ ‪exp‬در اﻳﻦ ﻣﺮﺣﻠﻪ ﺧﺒﺮي ﻧﻴﺴﺖ‪.‬‬
‫ﺑﻪ ﻋﻨﻮان ﻣﺜﺎل ‪ 8 FDFT‬ﻧﻘﻄﻪ را ﻣﻲ ﺗﻮان از روي ‪ 4 DFT‬ﻧﻘﻄﻪ ﺑﻪ ﺻﻮرت زﻳﺮ ﻣﺤﺎﺳﺒﻪ ﻛﺮد‪ ) .‬ﭘﺮواﻧﻪ!(‬
‫ﺑﺎ ﺑﻠﻮك ﻫﺎي ﭘﺮواﻧﻪ اي زﻳﺮ ‪:‬‬
‫و اﮔﺮ ﺑﺎزﮔﺸﺘﻲ را اداﻣﻪ دﻫﻴﻢ ﺑﻪ ﺳﺎﺧﺘﺎر زﻳﺮ ﻣﻲ رﺳﻴﻢ‪:‬‬
‫ﺑﺮاي ﭘﻴﺎده ﺳﺎزي ﭼﻨﻴﻦ ﺳﺎﺧﺘﺎري ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺗﻜﺮار‪ w‬ﻫﺎ ﺗﻮﺻﻴﻪ ﻣﻲ ﻛﻨﻴﻢ در اﺑﺘﺪا ﻫﻤﻪ ‪ W‬ﻫﺎ را ﻣﺤﺎﺳﺒﻪ ﻛﺮده و ﺑﻌﺪ از آﻧﻬﺎ‬
‫اﺳﺘﻔﺎده ﻛﻨﻴﺪ‪.‬‬
‫اﻟﺒﺘﻪ ﭘﻴﺎده ﺳﺎزي ﻫﺎي دﻳﮕﺮي ﺑﺮاي ‪ FFT‬ﻣﺎﻧﻨﺪ ‪ Radix-4‬ﻛﻪ ﺷﻜﻞ ﻋﺮف آن اﺳﺖ و ﻳﺎ ‪) Constant-Geometry‬‬
‫ﻣﻨﺎﺳﺐ ﺑﺮاي ﭘﻴﺎده ﺳﺎزي ﻫﺎي ﺳﺨﺖ اﻓﺰاري ‪ FFT‬ﺑﺮ روي ‪ ASIC‬ﻳﺎ ‪ ( FPGA‬ﻧﻴﺰ وﺟﻮد دارد‪.‬‬
‫ﺷﺒﻴﻪ ﺳﺎزي ‪:Spice‬‬
‫در ﻳﻚ ﺳﻴﺴﺘﻢ ) ﻣﺪار ( ﭘﺎﺳﺦ ﺳﻴﺴﺘﻢ ﺑﻪ ﺳﻴﮕﻨﺎل ﺿﺮﺑﻪ ﻣﻌﺮف ﻛﻠﻴﻪ ﻣﺸﺨﺼﻪ ﻫﺎي ﺳﻴﺴﺘﻢ اﺳﺖ‪ .‬ﭼﺮا ﻛﻪ ﺑﺎ ﭘﻴﭽﺶ آن در ﺳﻴﮕﻨﺎل‬
‫ورودي ﻣﻲ ﺗﻮان ﺳﻴﮕﻨﺎل ﺧﺮوﺟﻲ را ﺑﺪﺳﺖ آورد‪ .‬ﺑﻪ ﻋﺒﺎرت دﻳﮕﺮ ﺑﺮاي ﻫﺮ ﺳﻴﺴﺘﻢ راﺑﻄﻪ زﻳﺮ در ﺣﻮزه زﻣﺎن ﺑﺮﻗﺮار اﺳﺖ‪:‬‬
‫اﮔﺮ ﺗﺒﺪﻳﻞ ﻓﻮرﻳﻪ ﻋﺒﺎرت ﺑﺎﻻ را ﺑﻨﻮﻳﺴﻴﻢ ﺧﻮاﻫﻴﻢ داﺷﺖ ‪:‬‬
‫) ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛﻪ اﻧﺘﮕﺮال ﻛﺎﻧﻮوﻟﻮﺷﻦ ﺑﻪ ﺿﺮب ﻋﺎدي ﺗﺒﺪﻳﻞ ﺷﺪه اﺳﺖ‪ H(s) .( .‬ﻛﻪ ﻫﻤﺎن ﭘﺎﺳﺦ ﻓﺮﻛﺎﻧﺴﻲ ﺿﺮﺑﻪ اﺳﺖ ﺑﺮ اﺳﺎس‬
‫اﻣﭙﺪاﻧﺲ اﻟﻤﺎن ﻫﺎي ﻣﺪار ﺑﻪ آﺳﺎﻧﻲ ﻗﺎﺑﻞ ﻣﺤﺎﺳﺒﻪ اﺳﺖ‪ .‬ﺑﻪ اﻳﻦ ﺻﻮرت ﻛﻪ ﺑﻪ ﺟﺎي ‪ R‬اﻟﻤﺎﻧﻲ ﺑﺎ اﻣﭙﺪاﻧﺲ ‪ ،R‬ﺑﻪ ﺟﺎي ﺧﺎزن اﻟﻤﺎﻧﻲ‬
‫ﺑﺎ اﻣﭙﺪاﻧﺲ ‪ 1/CS‬و ﺑﻪ ﺟﺎي ﺳﻠﻒ از اﻟﻤﺎﻧﻲ ﺑﺎ اﻣﭙﺪاﻧﺲ ‪ LS‬اﺳﺘﻔﺎده ﻣﻲ ﻛﻨﻴﻢ‪ .‬ﺳﭙﺲ ﺑﺮ اﺳﺎس ﺳﺮي ﻳﺎ ﻣﻮازي ﺑﻮدن اﻟﻤﺎن ﻫﺎ‬
‫ﺳﻴﺴﺘﻢ ﻓﺎﻧﻜﺸﻦ ﻳﺎ ﻫﻤﺎن )‪ H(S‬را ﺑﺪﺳﺖ آورده و ﺑﻪ ازاي ‪ s=jw‬در دراﻳﻪ ﻫﺎي ﺗﺒﺪﻳﻞ ﻓﻮرﻳﻪ ﺳﻴﮕﻨﺎل ورودي ﺿﺮب ﻣﻲ ﻛﻨﻴﻢ‬
‫ﺗﺎ ﭘﺎﺳﺦ )‪ Y(s‬را ﺑﺪﺳﺖ آورﻳﻢ‪ .‬ﺗﺒﺪﻳﻞ ﻣﻌﻜﻮس ﻓﻮرﻳﻪ اﻳﻦ ﺳﻴﮕﻨﺎل ﭘﺎﺳﺦ ﺳﻴﺴﺘﻢ ﺑﻪ ﺳﻴﮕﻨﺎل ورودي ﻣﻲ ﺑﺎﺷﺪ‪.‬‬
‫•‬
‫ورودي‪/‬ﺧﺮوﺟﻲ‪:‬‬
‫ورودي ﺧﻮد را از ‪ standard input‬ﺑﺨﻮاﻧﻴﺪ و ﺧﺮوﺟﻲ ﺗﺎن را ﺑـﺮ روي‬
‫ﺑﻨﻮﻳﺴﻴﺪ‪.‬‬
‫‪standard output‬‬
‫‪1‬‬
‫‪ .1‬ورودي ﺑﺮﻧﺎﻣﻪ‪:‬‬
‫ورودي ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﻋﺪد ‪ n‬ﺗﻌﺪاد داده ﻫﺎي ﻧﻤﻮﻧﻪ از ﺳﻴﺴﮕﻨﺎل‪ f ،‬ﻓﺮﻛـﺎﻧﺲ آن و ‪ n‬ﻋـﺪد ﻧﻤﻮﻧـﻪ‬
‫ﻫﺎي ﺳﻴﮕﻨﺎل ﻣﻲ ﺑﺎﺷﺪ‪.‬‬
‫در ﻫﻨﮕﺎم ﺗﺤﻮﻳﻞ ﭘﺮوژه ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﻳﻚ ﺳﻴﮕﻨﺎل ﺻﺪا ﺑﻪ ﻣﺪت ‪ 5‬ﺛﺎﻧﻴـﻪ ﻛـﻪ در ﻓﺮﻛـﺎﻧﺲ‬
‫‪ 8192 Hz‬ﻧﻤﻮﻧﻪ ﺑﺮداري ﺷﺪه داده ﺧﻮاﻫﺪ ﺷﺪ‪.‬‬
‫‪ .2‬ﺧﺮوﺟﻲ ﻫﺎي ﺑﺮﻧﺎﻣﻪ‪:‬‬
‫ƒ ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﻣﻲ ﺑﺎﻳﺴﺖ ‪ DFT‬ﺳﻴﮕﻨﺎل ورودي ﺣﻮزه زﻣﺎن را ﻣﺤﺎﺳﺒﻪ ﻛﺮده و ﺑﺮ اﺳﺎس ﻓﺮﻛﺎﻧﺲ ﺑﺮ‬
‫روي ﻧﻤﻮدار ﻧﻤﺎﻳﺶ دﻫﺪ‪.‬‬
‫ƒ ﻳﻚ ﻓﻴﻠﺘﺮ ‪ FIR‬از ﻧﻮع ‪ low pass filter‬ﻳﺎ ‪band pass filter‬را ﺗﻌﺮﻳـﻒ ﻛـﺮده و ﺑـﺮ‬
‫روي ﺳﻴﮕﻨﺎل ﻓﻮق اﻋﻤﺎل ﻧﻤﺎﻳﺪ‪.‬‬
‫ƒ از ﺳﻴﮕﻨﺎل ﺣﻮزه ﻓﺮﻛﺎﻧﺲ ﺳﺎﺧﺘﻪ ﺷﺪه ﺗﺒﺪﻳﻞ ﮔﺴﺴﺘﻪ ﻣﻌﻜﻮس ﻓﻮرﻳﻪ ﺑﮕﻴﺮد‪ .‬ﺑﺮاي اﻳﻨﻜـﺎر ﻧﻴـﺎزي‬
‫ﻧﻴﺴﺖ از اﻳﺪه ﻫﺎي اﻟﮕﻮرﻳﺘﻢ ﻫﺎي ‪ Fast Fourier Transform‬اﺳﺘﻔﺎده ﻛﻨﻴﺪ‪.‬‬
‫ƒ ﺷﺒﻴﻪ ﺳﺎزي ‪ : Spice‬ﻳﻚ ﻣﺪار ﺷﺎﻣﻞ ﻋﻨﺎﺻﺮي ﻣﺎﻧﻨﺪ ‪ R, L, C‬را ﺑﺮ روي ﺳﻴﮕﻨﺎل ﻓـﻮق‬
‫اﻋﻤﺎل ﻛﻨﻴﺪ و ﺧﺮوﺟﻲ را ﻧﺸﺎن دﻫﻴﺪ‪.‬‬
‫ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛﻪ ﺑﺮاي ﻫﻤﻪ اﻳﻦ اﻋﻤﺎل در ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﻣﻲ ﺑﺎﻳﺴﺖ در زﻣﺎن ﻣﻨﺎﺳﺒﻲ ﭘﺎﺳﺨﮕﻮ ﺑﺎﺷﺪ‪.‬‬
‫• ﺗﻮﺟﻪ ﺑﺴﻴﺎر ﻣﻬﻢ‪:‬‬
‫ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﺎﻳﺪ در زﻣﺎن ﺗﺤﻮﻳﻞ ﻛﻤﭙﺎﻳﻞ و اﺟﺮا ﺷﻮد و ﺑﺘﻮاﻧﺪ ﺑﺮاي ﺗﺴﺖ ﻫﺎي ورودي ﺧﺮوﺟﻲ ﺻﺤﻴﺢ اﻳﺠﺎد ﻛﻨﺪ‪.‬‬
‫ﻛﺪ ﻣﻨﺒﻊ ﭘﺮوژه ﺧﻮدﺗﺎن را ﺑﻪ ﻫﻤﺮاه ﻣﺴﺘﻨﺪات ﻣﺮﺑﻮط ﺑﻪ آن را در ﻏﺎﻟﺐ ﻳﻚ ﻓﺎﻳﻞ ﻓﺸﺮده ‪ 2‬ﺑﻪ ﻧﺎم ‪ DFT‬ﺗﺎ زﻣﺎن ﺗﺤﻮﻳﻞ‬
‫ﺑﻪ آدرس ‪ [email protected]‬ارﺳﺎل ﻧﻤﺎﻳﻴـﺪ‪ .‬ﻓﻴﻠـﺪ ‪ subject‬ﻧﺎﻣـﻪ ﺧـﻮد را ﺑﺮاﺑـﺮ ﺑـﺎ ‪Project2-dft-‬‬
‫)‪ (8510xxxx-8510xxxx-8510xxxx‬ﻗﺮار دﻫﻴﺪ ﻛـﻪ در آن ‪ xxxx‬ﭼﻬـﺎر رﻗـﻢ اﻧﺘﻬـﺎﻳﻲ ﺷـﻤﺎره داﻧـﺸﺠﻮﻳﻲ‬
‫اﻋﻀﺎي ﺗﻴﻢ ﺷﻤﺎ ﻣﻲ ﺑﺎﺷﺪ‪.‬‬
‫ﻟﻄﻔﺎً ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛﻪ ﺗﺤﻮﻳﻞ ﭘﺮوژه ﻫﺎ ﺑﻪ ﺻﻮرت ﺣﻀﻮري ﻣﻲ ﺑﺎﺷﺪ‪.‬‬
‫‪1‬‬
‫ﺑﺮاي اﻳﻦ ﻛﺎر از ‪ header file‬ﻫﺎي ‪)stdio.h‬ﺑﺮاي زﺑﺎن ‪ (C‬و ﻓﺎﻳﻞ ‪ ) iostream‬ﺑﺮاي زﺑﺎن ‪ (C++‬اﺳﺘﻔﺎده ﻛﻨﻴﺪ‪.‬‬
‫‪2‬‬
‫ﺑﺎ ﻓﺮﻣﺖ ‪ rar ،zip‬ﻳﺎ ‪tar‬‬
1.
2.
3.
4.
5.
6.
7.
.‫• ﻣﺮاﺟﻊ ﻣﻲ ﺗﻮاﻧﻴﺪ از ﻣﺮاﺟﻊ زﻳﺮ ﺑﺮاي ﻃﺮاﺣﻲ و ﭘﻴﺎده ﺳﺎزي ﺑﺮﻧﺎﻣﻪ ﺗﺎن ﻛﻤﻚ ﺑﮕﻴﺮﻳﺪ‬
Openheim et all, Signals & Systems .
Openheim et all, Disrete-Time signal processing.
Jorg Arndt, Algorithms for Programmers
Stergiopoulos (Editor), Advanced Signal Processing Handbook
Theory And Implementation For Radar, Sonar, And Medical Imaging
Real-Time
Poularikas , Handbook of Formulas and Tables for Signal Processing
Proakis & Manolakis , Digital Signal Processing - Principles,
Algorithms & Applications
Smith, Guide to Digital Signal Processing
.‫ ﻣﻲ ﺗﻮاﻧﻴﺪ از آن ﺑﺮاي ﺗﺴﺖ درﺳﺘﻲ ﺑﺮﻧﺎﻣﻪ ﺗﺎن اﺳﺘﻔﺎده ﻛﻨﻴﺪ‬.‫ ﺑﺮاي ﻣﺤﺎﺳﺒﻪ ﺗﺒﺪﻳﻞ ﻓﻮرﻳﻪ ﺑﻪ ﻛﺎر ﻣﻲ رود‬Matlab ‫ در‬fft ‫دﺳﺘﻮر‬
‫ ﻧﮕﻬﺪاري ﻣﻲ ﻛﻨﺪ ﻛﻪ ﺑﺎ دﺳﺘﻮر‬sample ‫ ﺗﻌﺪادي ﻓﺎﻳﻞ‬toolbox\matlab\audiovideo ‫ﺑﻪ ﻋﻼوه ﻣﻄﻠﺐ! در ﺷﺎﺧﻪ‬
‫ اﻳﻦ ﻫﺎ ﺗﻌﺪادي ﻓﺎﻳﻞ‬.‫ ﻗﺎﺑﻞ ﺑﺎرﮔﺬاري ﻣﻲ ﺑﺎﺷﻨﺪ‬sample=load(‘-mat’, ‘laughter.mat’ )
‫ ﺑﺮاي‬.‫ اﺳﺘﻔﺎده ﻛﻨﻴﺪ‬sample.y ‫ ﺑﺮاي دﺳﺘﻴﺎﺑﻲ ﺑﻪ داده ﻫﺎ از‬.‫ ﻧﻤﻮﻧﻪ ﺑﺮداري ﺷﺪه اﻧﺪ‬8192 Hz‫ﺻﻮﺗﻲ ﻫﺴﺘﻨﺪ ﻛﻪ در ﻓﺮﻛﺎﻧﺲ‬
‫ ﻣﻲ ﺗﻮاﻧﻴﺪ‬stem ‫ ﻳﺎ‬Plot ‫ را اﺟﺮا ﻛﻨﻴﺪ و در ﻧﻬﺎﻳﺖ ﺑﺎ‬conv ‫اﻧﺘﮕﺮال ﻛﺎﻧﻮوﻟﻮﺷﻦ ) ﺑﺮاي ﻓﻴﻠﺘﺮ ﻛﺮدن ( ﻣﻲ ﺗﻮاﻧﻴﺪ از‬
.‫ ﻣﻄﻠﺐ ﻫﻢ ﺑﻴﻨﺪازﻳﺪ‬DSP ‫ ﺑﺪ ﻧﻴﺴﺖ ﻧﮕﺎﻫﻲ ﺑﻪ ﺟﻌﺒﻪ اﺑﺰار‬.‫ﻧﻤﻮدار را ﺑﻜﺸﻴﺪ‬
.‫ﻣﻮﻓﻖ ﺑﺎﺷﻴﺪ‬
‫اﺣﻤﺪﻳﺎن‬