amper = np.massiv([0,6, 0,25, 0,1, 0,05]) fs =
np.arange(N) ts = np.arange(N) / N ys = sintez2(amper,
fs, ts) amper3 = tahlil2(ys, fs, ts)
def analizi3(ys): N =
len(ys)
Keyin ys ni oladigan va kuchaytirgichlarni qaytaradigan funktsiyani yozaman:
N = 4
M = np.exp(1j * PI2 * args) M ni
qaytaradi
Va uni fs va ts ning tegishli qiymatlari bilan sinab ko'ring:
def synthesis_matrix(N): ts =
np.arange(N) / N fs =
np.arange(N) args =
np.outer(ts, fs)
M = np.exp(1j * PI2 * args) amper =
M.conj().transpose().dot(ys) / N qaytish kuchaytirgichlari
Birinchidan, sintez matritsasini hisoblash uchun funktsiyani yarataman, M:
args = np.outer(ts, fs)
def analizi2(ys, fs, ts):
Funktsiya sifatida analiz2 dan foydalanish qiyin bo'ladi, chunki u faqat fs va ts to'g'ri
tanlanganda ishlaydi. Buning o'rniga, men uni faqat ys olish va
chastota va ts ni hisoblash
uchun qayta yozaman.
N:
84
Biz deyarli tugatdik; analiz3 bir farq bilan DFT ga juda yaqin narsani hisoblaydi. DFTning
an'anaviy ta'rifi bo'linmaydi
7-bob. Diskret Furye transformatsiyasi
[ 0,60+0,j 0,25+0,j 0,10-0,j 0,05-0,j]
M = sintez_matritsasi(N) amper
= M.konj().transpose().nuqta(ys) / N qaytish amperi
Shunga qaramay, natija suzuvchi nuqta arifmetikasining tolerantligi doirasida to'g'ri.
7.7 DFT
Machine Translated by Google
Ular bir xil, suzuvchi nuqta xatosi ichida.
Ushbu bobda men DFT ni matritsalarni ko'paytirish shaklida taqdim etdim.
Sintez
matritsasi M va tahlil matritsasi Mÿ ni hisoblaymiz . Biz qachon
>>> np.fft.fft(ys)
[ 2.4+0.j 1.0+0.j 0.4-0.j 0.2-0.j]
Natija amper * N ga yaqin. Mana np.fft versiyasi:
Lekin men o'tmishga (hali!) qaytolmayman, shuning uchun biz biroz g'alati konventsiyaga
yopishib oldik. Amaliy maqsadlar uchun bu juda muhim emas.
Endi mening versiyam np.fft.fft bilan bir xil natija berishini tasdiqlashimiz mumkin:
>>> dft(ys) [ 2.4+0.j 1.0+0.j 0.4-0.j 0.2-0.j]
Yoki ikkala amal ham ÿ N ga bo'linadigan tarzda ta'rifni o'zgartirishim mumkin.
Shunda DFT va teskari DFT simmetrikroq bo'ladi.
M = sintez_matritsasi(N)
amper = M.konj().transpose().nuqta(ys)
qaytaruvchi amper
def dft(ys): N
= len(ys)
Agar
vaqtni orqaga qaytara olsam, DFT ta'rifini o'zgartirishim mumkin, shunda u N
ga bo'linadi va teskari DFT bo'lmaydi. Bu mening sintez va tahlil muammolarini
taqdim etishimga ko'proq mos keladi.
Nihoyat, biz dft(idft(amper)) amperni
berishini tasdiqlashimiz
mumkin. >>> ys = idft(amper) >>> dft(ys) [ 0,60+0,j 0,25+0,j
0,10-0,j 0,05-0,j]
Do'stlaringiz bilan baham: