|Jf[i]|2, не изменилась. В зависимости от выбора длины фрагмента можно кодировать несколько элементов ЦВЗ, произведя изменения сразу в нескольких полосах. Это позволяет увеличить информативность каждого из фрагментов. Для извлечения ЦВ З нужно иметь оригинальный файл. Рассмотрим простейшую реализацию этой процедуры, когда ЦВЗ кодируется модулями первого и второго коэффициентов Фурье. Выберем число е > 0, а для изменения модуля Abs коэффициента заменяем его на Abs / ( l ±e ) . Для того чтобы мощность всего фрагмента не изменилась, меняем модули и всех остальных коэффициентов. Скрипт 14 содержит реализации основных шагов. Скрипт 14. Внедрение ЦВЗ в модули коэффициентов ДПФ Epsilon = 0.005 # FragLen = 10 # ms ########################## def createInterv(DatN,LenOfGrag,Ln): # Исходные данные помещены в DatN # переведенные в формат float Alllnterv = [] for X in xrange(0,len(DatN),int(LenOfFrag)): Interv = DatN[X:X+LenOfFrag] Alllnterv.append(Interv) ######################## def changeMod(Coeff,Val): return Coeff/(l. +Val) ########################### def putBits(Interv,Bits,Epsilon): Lnlnterv = len(Interv) FInterv = np.fft.fft(Interv) A1 = abs(FInterv[1]) A2 = abs(FInterv[2]) PowerOldRest = sum(FInterv * conj(FInterv)) - \ 2. * (A1 *А1 +A2 *A2) if Bits[0] == ’0’:
RkJQdWJsaXNoZXIy MTExODQxMg==