Oddiy variantlardan biri ts va fs ni yarim birlikka siljitishdir. Ushbu versiya deyiladi
-0,707]
1.
[-0. 1. 2. 1.]
DCT ning sakkizta versiyasi.
ts = (0,5 + np.arange(N)) / N
ys = sintez qilish2 (amper, fs, ts)
Men ts va fs ga 0,5 qo'shdim.
Ikkinchidan, men fs uchun ifodani soddalashtiradigan
time_units ni bekor qildim.
0.707]]
0.
Va bu identifikatsiya matritsasi emas.
def test2():
-0,707 -0.
Ammo ts va fs ni diqqat bilan tanlasak, M ni ortogonal qilishimiz mumkin. Lar bor
N = 4,0
Siz 0,707 ni ÿ 2/2 ga yaqinlik
deb bilishingiz mumkin , bu cos p/4.
Kosinus o'zgarishi (DCT).
fs = (0,5 + np.arange(N)) / 2
69
(j, k) da element har doim (k, j) da elementga teng. Bu M ekanligini anglatadi
Afsuski, M ortogonal emas. Agar biz MTM ni hisoblasak, biz quyidagilarni olamiz:
]
1.
[ 1. 2. 1. -0.]
DCT-IV, bu erda "IV" rim raqami bo'lib, bu raqamning to'rtinchisi ekanligini ko'rsatadi
Agar buni oldingi versiya bilan solishtirsangiz, ikkita o'zgarishni sezasiz.
Birinchidan,
-0. ]
[ 1. -0. 1. 2.]]
0,707 0.
Mana test1 ning yangilangan versiyasi:
Ushbu qiymatlar bilan M
6.5. DCT-IV
[[ 1.
[ 1.
[ 1.
[ 1.
-1.
Shuningdek, siz ushbu matritsaning
nosimmetrik ekanligini ko'rishingiz mumkin, ya'ni
amper = np.array([0,6, 0,25, 0,1, 0,05])
Ushbu ts va fs qiymatlari bilan M matritsasi:
[[ 4. 1. -0. 1.]
o'zining ko'chirilishi; ya'ni MT = M.
1.
buni qilishning bir necha usullari, shuning uchun Diskretning bir
nechta versiyalari mavjud
6.5 DCT-IV
Machine Translated by Google
def analizi2(ys, fs, ts):
Agar biz buni to'g'ri tushungan bo'lsak, bu funksiya tahlil muammosini hal qilishi kerak; ya'ni ys ni
hisobga olsak, u kuchaytirgichlarni tiklash imkoniyatiga ega bo'lishi kerak.
Biz buni shunday sinab
ko'rishimiz mumkin. amper = np.array([0,6, 0,25, 0,1, 0,05])
Shunga qaramay, ys - to'lqinlar massivi. ts va fs ni parametr sifatida o'tkazishimiz shart
emas; dct_iv ularni N, ys uzunligi asosida aniqlay oladi.
M simmetrik va (deyarli) ortogonal bo'lgani uchun M ning teskarisi faqat M/2 dir. Endi biz
tahlilning yanada samarali versiyasini yozishimiz mumkin:
Diagonaldan tashqari ba'zi elementlar -0 sifatida ko'rsatiladi, ya'ni
suzuvchi nuqta tasviri
kichik manfiy sondir. Bu matritsa 2I ga juda yaqin, ya'ni M deyarli ortogonal; Bu 2 baravar
kamaygan. Va bizning maqsadlarimiz uchun bu etarli.
M = np.cos(PI2 * args)
amper
= np.dot(M, ys) / 2 qaytaruvchi
amper
def dct_iv(ys): N =
len(ys) ts =
(0,5 + np.arange(N)) / N fs = (0,5 +
np.arange(N)) / 2 args = np.outer(ts, fs)
[[ 2. 0. 0. 0.] [ 0. 2. -0.
0.] [ 0. -0. 2. -0.] [ 0. 0.
-0. 2.]]
IV:
Va MTM _
[[ 0,981 0,831 0,556 0,195] [ 0,831
-0,195 -0,981 -0,556] [ 0,556 -0,981
0,195 0,831] [ 0,195 -0,556 0,81] -0,831]
Test2 va tahlil2ni birlashtirib, biz DCT dasturini yozishimiz mumkin
Np.linalg.solve dan foydalanish o'rniga, biz faqat M/2 ga ko'paytiramiz.
Do'stlaringiz bilan baham: