СПОСОБ ОБНОВЛЕНИЯ КОДЕРА ПОСРЕДСТВОМ ИНТЕРПОЛЯЦИИ ФИЛЬТРА
METHOD OF UPDATING ENCODER BY FILTER INTERPOLATION

Настоящее изобретение касается обработки сигнала, в частности аудиосигнала (такого как речевой сигнал) и/или видеосигнала, представляющего собой последовательность отсчетов. В частности, оно касается обработки сигнала по трансформанте и относится к области модулированных трансформант.
Модулированные трансформанты находят свое применение в анализе и передаче оцифрованных сигналов (то есть в виде последовательности отсчетов, разделенных во времени периодом дискретизации). Они находят также свое применение в синтезе сигналов. Например, кодирование сигнала может потребовать применения набора фильтров разложения, квантования и применения набора фильтров синтеза.
Для модулированных трансформант обычно применяют фильтры, называемые «прототипами», которые модулируют по разным значениям частоты. Таким образом, получают набор каналов, позволяющих характеризовать сигнал в разных положениях, называемых «частотными положениями».
Модуляции можно осуществлять посредством операции типа:
k
h(n)=h(n)×W(k, n), где:
- n - временной индекс, соответствующий кратному периода дискретизации,
- k - индекс, характеризующий рассматриваемый частотный канал, а
- L - длина фильтра (и модуляции).
Кроме того, в вышеуказанном выражении:
- h(n) (при 0≤n<L) определяет фильтр-прототип, который может иметь комплексное значение,
- W(k, n) (при 0≤n<L) определяет модулирующую функцию для канала k, которая тоже может быть с комплексными значениями,
k
- h(n) (при 0≤n<L) определяет модулированный фильтр для канала k. Для осуществления разложения сигнала, например, предназначенного для кодирования, разлагаемый сигнал х(n) проецируют на модулированный фильтр при помощи операции скалярного произведения:
<mrow><msub><mi>y</mi><mi>k</mi></msub><mo>=</mo><mrow><mo>〈</mo><mrow><mi>x</mi><mo>,</mo><mtext> </mtext><msub><mi>n</mi><mi>k</mi></msub></mrow><mo>〉</mo></mrow><mo>=</mo><mstyle displaystyle="true"><munderover><mo>∑</mo><mrow><mi>n</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>L</mi><mo>−</mo><mn>1</mn></mrow></munderover><mrow><mi>x</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>⋅</mo><msub><mi>n</mi><mi>k</mi></msub><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow></mstyle></mrow>
.
k
k
j
j
k
Разлагаемые сигналы могут быть результатом множества проекций, например, в виде y=〈x, h〉+λ〈x, h'〉, где λ, h' и j соответственно представляют коэффициент усиления, модуляцию и частотный индекс, которые могут отличаться от h и k.
k
Эти операции разложения могут следовать друг за другом, что дает ряд сигналов y, изменяющихся во времени.
Таким образом, можно записать:
<mrow><msub><mi>y</mi><mrow><mi>k</mi><mo>,</mo><mtext> </mtext><mi>m</mi></mrow></msub><mo>=</mo><mrow><mo>〈</mo><mrow><msub><mi>x</mi><mi>m</mi></msub><mo>,</mo><mtext> </mtext><msub><mi>n</mi><mi>k</mi></msub></mrow><mo>〉</mo></mrow><mo>=</mo><mstyle displaystyle="true"><munderover><mo>∑</mo><mrow><mi>n</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>L</mi><mo>−</mo><mn>1</mn></mrow></munderover><mrow><mi>x</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mi>m</mi><mi>T</mi><mo stretchy="false">)</mo><mo>⋅</mo><msub><mi>n</mi><mi>k</mi></msub><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow></mstyle></mrow>
, при этом m обозначает индекс блоков последовательных отсчетов (или «кадров»), и T обозначает продолжительность кадра (по числу отсчетов).
Модулированные трансформанты находят свое применение также в синтезе сигналов. Для этого типа обработки содержимое формируют в определенном числе частотных каналов, и эти каналы объединяют для восстановления цифрового сигнала.
<mrow><mover accent="true"><mi>x</mi><mo>^</mo></mover><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow>
<mrow><mover accent="true"><mi>x</mi><mo>˜</mo></mover><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow>
Так, сигнал
синтезируют путем проецирования трансформированных сигналов на M векторов синтеза. Сначала определяют выражение
, при котором:
<mrow><mover accent="true"><mi>x</mi><mo>˜</mo></mover><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mrow><mo>〈</mo><mrow><mi>y</mi><mo>,</mo><mtext> </mtext><msub><mi>h</mi><mi>k</mi></msub></mrow><mo>〉</mo></mrow><mo>=</mo><mstyle displaystyle="true"><munderover><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>M</mi><mo>−</mo><mn>1</mn></mrow></munderover><mrow><msub><mi>y</mi><mi>k</mi></msub><mo>⋅</mo><msub><mi>h</mi><mi>k</mi></msub><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow></mstyle></mrow>
при 0≤n<L.
k
Сигналы y могут меняться во времени, поэтому синтез позволит генерировать сигнал случайной длины:
<mrow><mover accent="true"><mi>x</mi><mo>˜</mo></mover><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mi>m</mi><mi>T</mi><mo stretchy="false">)</mo><mo>=</mo><mrow><mo>〈</mo><mrow><mi>y</mi><mo>,</mo><mtext> </mtext><msub><mi>h</mi><mi>k</mi></msub></mrow><mo>〉</mo></mrow><mo>=</mo><mstyle displaystyle="true"><munderover><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>M</mi><mo>−</mo><mn>1</mn></mrow></munderover><mrow><msub><mi>y</mi><mrow><mi>k</mi><mo>,</mo><mtext> </mtext><mi>m</mi></mrow></msub><mo>⋅</mo><msub><mi>h</mi><mi>k</mi></msub><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow></mstyle></mrow>
при 0≤n<L.
<mover accent="true"><mi>x</mi><mo>˜</mo></mover>
<mover accent="true"><mi>x</mi><mo>^</mo></mover>
Векторы, определяемые выражениями
при 0≤n<L, смещают на M отсчетов, затем складывают, чтобы получить синтезированный сигнал
. В этом случае говорят об операции, называемой «сложением с перекрыванием».
Предпочтительно модулированные трансформанты находят свое применение при кодировании сигналов.
k
В системах частотного кодирования осуществляют трансформанту разложения при помощи модулируемых фильтров разложения h по формуле:
<mrow><msub><mi>y</mi><mrow><mi>k</mi><mo>,</mo><mtext> </mtext><mi>m</mi></mrow></msub><mo>=</mo><mrow><mo>〈</mo><mrow><msub><mi>x</mi><mi>m</mi></msub><mo>,</mo><mtext> </mtext><msub><mi>n</mi><mi>k</mi></msub></mrow><mo>〉</mo></mrow><mo>=</mo><mstyle displaystyle="true"><munderover><mo>∑</mo><mrow><mi>n</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>L</mi><mo>−</mo><mn>1</mn></mrow></munderover><mrow><mi>x</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mi>m</mi><mi>T</mi><mo stretchy="false">)</mo><mo>⋅</mo><msub><mi>n</mi><mi>k</mi></msub><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow></mstyle></mrow>
.
k, m
При этом сигналы y, являющиеся носителями полезной информации (о полезности можно судить, например, по воспринимаемому искажению), подвергают аппроксимации и передают в закодированном виде.
k, m
На уровне декодера принимаемые аппроксимированные компоненты y синтезируют обратным преобразованием для восстановления аппроксимации оригинальных отсчетов.
k
Синтез осуществляют при помощи набора модулированных фильтров синтеза f:
<mrow><mover accent="true"><mi>x</mi><mo>˜</mo></mover><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mi>m</mi><mi>T</mi><mo stretchy="false">)</mo><mo>=</mo><mrow><mo>〈</mo><mrow><msub><mi>y</mi><mi>m</mi></msub><mo>,</mo><mtext> </mtext><msub><mi>f</mi><mi>k</mi></msub></mrow><mo>〉</mo></mrow><mo>=</mo><mstyle displaystyle="true"><munderover><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>M</mi><mo>−</mo><mn>1</mn></mrow></munderover><mrow><msub><mi>y</mi><mrow><mi>k</mi><mo>,</mo><mtext> </mtext><mi>m</mi></mrow></msub><mo>⋅</mo><msub><mi>f</mi><mi>k</mi></msub><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow></mstyle></mrow>
<mover accent="true"><mi>x</mi><mo>^</mo></mover>
Затем производят операцию сложения с перекрыванием для получения восстановленного и декодированного сигнала
.
Один класс интересующих модулированных преобразований представлен преобразованиями с идеальным восстановлением.
k
<mrow><mover accent="true"><mi>x</mi><mo>^</mo></mover><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>x</mi><mo stretchy="false">(</mo><mi>n</mi><mo>-</mo><mi>R</mi><mo stretchy="false">)</mo></mrow>
При декодировании эти преобразования позволяют получить декодированный сигнал, соответствующий практически, и даже идеально в случае идеального восстановления, исходному сигналу, если преобразованные компоненты y не были изменены, причем при задержке R, то есть
.
<mover accent="true"><mi>x</mi><mo>^</mo></mover>
Восстановление может также быть «почти идеальным» восстановлением, если разницу между восстановленными сигналами x и
можно считать ничтожно малой. Например, при кодировании аудиосигналов разницу в мощности меньше на 50 дБ, чем мощность обработанного сигнала x, можно считать ничтожно малой.
Наиболее часто применяемыми преобразованиями являются преобразования типа "ELT" (от "Extended Lapped Transforms"), которые обеспечивают идеальное восстановление и используют фильтр длиной L=2·K·M. Их частным случаем при K=1 являются модифицированные дискретные косинусные преобразования или "MDCT" (от "Modified Discrete Cosine Transform") типа "MLT" (от "Modulated Lapped Transform").
Квадратурные зеркальные фильтры (или "QMF") или фильтры PQMF (от "Pseudo Quadrature Mirror Filter") являются решением для почти идеального восстановления, использующим разные члены модуляции.
Эти различные трансформанты могут иметь реальные или комплексные коэффициенты. Они могут использовать симметричные или не симметричные фильтры-прототипы.
Для соблюдения условия идеального или почти идеального восстановления при любой форме обрабатываемого сигнала модулированные фильтры разложения и синтеза должны быть связаны друг с другом. Так, отношения связывают члены модуляции и фильтры-прототипы, используемые для разложения и для синтеза. Например, в модулированных косинусных системах (MDCT, ELT, PQMF или других) члены модуляции при разложении и при синтезе связаны, например, следующим образом: W(k, n)=W'(k, n+φ), где W и W' обозначают соответственно модуляции, используемые при разложении и при синтезе, а φ обозначает член фазового смещения.
Широко применяемый частный случай соответствует условию φ=0. В этом случае модуляции являются одинаковыми при разложении и при синтезе.
Фильтры-прототипы разложения и синтеза тоже могут быть связаны между собой, чтобы обеспечивать (почти) идеальное восстановление при часто применяемом следующем условии: h(L-1-n)=f(n), где h и f являются фильтрами-прототипами, используемыми при разложении и при синтезе.
Модуляции W должны отвечать условию идеального восстановления. Например, для трансформант ELT можно совокупно выбрать:
<mrow><mi>W</mi><mo stretchy="false">(</mo><mi>k</mi><mo>,</mo><mtext> </mtext><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>c</mi><mi>o</mi><mi>s</mi><mrow><mo>[</mo><mrow><mfrac><mi>π</mi><mi>M</mi></mfrac><mrow><mo>(</mo><mrow><mi>n</mi><mo>+</mo><mrow><mo>(</mo><mrow><mfrac><mrow><mn>1</mn><mo>+</mo><mi>M</mi></mrow><mn>2</mn></mfrac></mrow><mo>)</mo></mrow></mrow><mo>)</mo></mrow><mrow><mo>(</mo><mrow><mi>k</mi><mo>+</mo><mfrac><mn>1</mn><mn>2</mn></mfrac></mrow><mo>)</mo></mrow></mrow><mo>]</mo></mrow></mrow>
, где 0≤n<L и 0≤k<M, при L=2·K·M.
Точно также для обеспечения идеального восстановления фильтры-прототипы должны отвечать, например, условию типа:
<mrow><mstyle displaystyle="true"><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mrow><mn>2</mn><mi>K</mi><mo>−</mo><mn>2</mn><mi>s</mi><mo>−</mo><mn>1</mn></mrow></munderover><mi>f</mi></mstyle><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mi>i</mi><mi>M</mi><mo stretchy="false">)</mo><mi>h</mi><mo stretchy="false">(</mo><mi>h</mi><mo>+</mo><mi>i</mi><mi>M</mi><mo>+</mo><mn>2</mn><mi>s</mi><mi>M</mi><mo stretchy="false">)</mo><mo>=</mo><mi>δ</mi><mo stretchy="false">(</mo><mi>s</mi><mo stretchy="false">)</mo></mrow>
, при s=0, 1, …, K-1.
Можно, в частности, выбирать фильтры-прототипы среди:
- фильтров, определяемых аналитически в виде уравнения, и в этом классе фильтр, широко используемый для трансформанты MDCT (при K=1), имеет вид:
<mrow><mi>h</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>s</mi><mi>i</mi><mi>n</mi><mrow><mo>[</mo><mrow><mfrac><mi>π</mi><mrow><mn>2</mn><mi>M</mi></mrow></mfrac><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mn>0.5</mn><mo stretchy="false">)</mo></mrow><mo>]</mo></mrow></mrow>
, при 0≤n<L, где L=2·M.
- фильтров, получаемых в результате численной оптимизации по критерию, который не позволяет вывести аналитическую функцию, например, таких как фильтр, который можно получить путем минимизации некоторой величины при обеспечении идеального восстановления (этой величиной может быть затухание в вырезанной полосе, начиная от граничной частоты, или выигрыше при кодировании или, в целом, любая другая величина, считающаяся относящейся к качеству кодирования).
Как было указано выше, фильтры-прототипы могут быть симметричными или не симметричными, при этом отношение симметрии записывают, как:
h(L-1-n)=h(n).
Описанное выше моделирование применения модулированных преобразований представлено в качестве примера. В вариантах практического применения этих трансформант не все описанные выше вычисления производят в этом виде. Из соображений эффективности вычисления, времени вычисления и использования вычислительных ресурсов предусматривают так называемые «быстрые» варианты реализации. Эти варианты не воспроизводят точно вышеупомянутые вычисления, хотя эти и вычисления являются приемлемыми.
Представленные ниже модулированные преобразования определены быстрыми алгоритмами, обеспечивающими эффективное применение вычислительных средств. Эти алгоритмы основаны на быстрых преобразованиях Фурье или их производных, таких как быстрые косинусные преобразования или синусные преобразования (например, трансформанты DCT, называемые «трансформантами 4-го типа»).
2
Порядок преобразования для быстрого алгоритма, меньший или равный числу M частотных компонент, является достаточным для применения этих преобразований. Кроме того, эти преобразования являются эффективными, так как их сложность пропорциональна log(M) числа M компонент.
Перед быстрым преобразованием применяют операцию сокращения L отсчетов до числа, меньшего или равного M компонент.
Полный алгоритм преобразования при разложении может сочетать в себе:
- умножение отсчетов размера L при помощи фильтра-прототипа,
- комбинацию результата этого умножения, то есть линейную комбинацию, основанную на умножениях коэффициентов и на сложениях, что позволяет вывести из L взвешенных значений число, меньшее или равное M компонент,
- быстрое преобразование порядка, меньшего или равного М.
Для осуществления преобразования синтеза эти операции осуществляют в обратном порядке.
На фиг.1 показаны описанные выше разложение и синтез. Сигнал х поступает в кодер COD, содержащий фильтр-прототип φ. Затем набор отсчетов сигнала размера L умножают на фильтр прототипа в модуле MULT1. При этом в модуле CL1 реализуют линейную комбинацию отсчетов, умноженных при помощи фильтра прототипа, чтобы перейти от L отсчетов к M компонентам. При этом перед передачей отсчетов в декодер DECOD осуществляют быстрое преобразование TR1.
<mover accent="true"><mi>x</mi><mo>^</mo></mover>
Сразу после получения отсчетов декодер применяет быстрое преобразование TR2. Затем, противоположно тому, что происходило в кодере, сначала реализуют линейную комбинацию CL2 для перехода к первоначальному числу L отсчетов. Затем эти отсчеты умножают при помощи фильтра-прототипа декодера DECOD с целью воспроизведения сигнала х, на основании которого при помощи операции сложения-перекрывания получают сигнал
.
Для реализации трансформанты разложения или синтеза коэффициенты фильтра-прототипа кодера или декодера должны быть записаны в памяти. Разумеется, в отдельной системе, использующей модулированные трансформанты разного размера, в памяти должен храниться фильтр-прототип для каждого из используемых размеров.
В благоприятном случае, когда фильтры являются симметричными, в памяти можно хранить только L/2 коэффициентов, а другие L/2 коэффициентов определяют без арифметической операции из этих записанных в память коэффициентов. Так, для MDCT (К=1), если требуется трансформанта размером M и 2.M, в памяти необходимо иметь (М+2М)=3M коэффициентов, если прототипы являются симметричными, и если нет - (2М+4M)=6M коэффициентов. Типичным примером для кодирования аудио являются M=320 или M=1024. Таким образом, для ассиметричного случая необходимо наличие в памяти 1920 и 6144 коэффициентов соответственно.
В соответствии с требуемой точностью для отображения коэффициентов необходимо 16 бит и даже 24 бит для каждого коэффициента. Это требует существенного объема памяти для самих по себе недорогих вычислительных устройств.
При наличии фильтра-прототипа для трансформанты размером UM можно получать коэффициенты для трансформанты размером M путем прореживания. Классически в данном конкретном примере это предполагает удаление коэффициента фильтра на U.
Если же имеется только фильтр для преобразования размером M, то гораздо проще распространить этот фильтр для использования с MU коэффициентами. Прямой метод полиномиальной интерполяции не позволяет сохранить точность восстановления на уровне восстановления, получаемого для базового преобразования размером М. Следовательно, метод этого типа не является оптимальным.
Когда в кодере установлена базовая система кодирования, предпочтительно ее расширяют, например, в случае обновления стандартной версии системы кодирования. Например, стандартные кодеры ITU G.718 и ITU G.179.1 используют модулированные трансформанты MDCT соответственно размером M=320 и M=160. При расширении этих стандартов, чтобы эти кодеры могли работать при более высокой частоте дискретизации, говорят о расширении super wide band, и для этого необходимы трансформанты MDCT большего размера. В этом расширении необходимо применять трансформанту VDCT размером М'=640.
При известном расширении потребовалось бы увеличить объем памяти для выражения коэффициентов нового фильтра-прототипа. Кроме того, потребовалось бы изменение в кодере для обеспечения записи коэффициентов.
Настоящее изобретение призвано улучшить ситуацию и предложить средство, позволяющее экономить память одновременно в постоянной памяти ROM для хранения коэффициентов и/или в оперативной памяти RAM для вычисления преобразования.
В связи с этим предлагается способ обновления производительности обработки кодера или декодера для применения модулированной трансформанты размером, превышающим заданный размер, причем такой кодер или декодер выполнен с возможностью хранения в памяти первоначального фильтра-прототипа, образованного упорядоченной совокупностью коэффициентов первоначального размера. Предусматривают этап построения фильтра-прототипа размером больше первоначального размера для применения модулированной трансформанты размером, превышающим заданный размер, путем введения по меньшей мере одного коэффициента между двумя последовательными коэффициентами первоначального фильтра-прототипа.
Таким образом, вместо сохранения дополнительных коэффициентов для преобразования предлагается использовать коэффициенты, уже имеющиеся в кодере.
Таким образом, можно определить преобразование размером UM, сохраняя в памяти только один фильтр-прототип, предусмотренный для преобразования размером M.
Разумеется, можно также использовать дополнительные коэффициенты для разложения или для синтеза или на двух концах вычислительной цепочки.
Предпочтительно изобретение находит свое применение в бортовых системах, в которых стоимость памяти составляет значительную часть стоимости системы. Например, в мобильной телефонии, где необходимо оптимизировать потребление энергии, миниатюризацию и стоимость устанавливаемых кодеров/декодеров. Такая оптимизация становится возможной за счет уменьшения объема памяти благодаря настоящему изобретению.
Под «обновлением» следует понимать переход во время работы кодера/декодера из первоначального состояния в другое следующее состояние. Вместе с тем изобретение можно применять также для инициализации кодера/декодера, который еще не использовали для кодирования/декодирования.
Предпочтительно вводимые коэффициенты вычисляют на основании коэффициентов первоначального фильтра.
Например, можно предусмотреть вычисление коэффициента, вводимого между двумя последовательными коэффициентами, посредством взвешивания по меньшей мере одного из двух последовательных коэффициентов.
Кроме того, можно предусмотреть способ, в котором первоначальный фильтр-прототип проверяет заданное отношение восстановления, например отношение идеального восстановления. В этом случае взвешивание осуществляют при помощи, по меньшей мере, одной функции взвешивания, вычисляемой на основании отношения восстановления.
Действительно, необходимо следить за тем, чтобы добавляемые коэффициенты позволяли сохранить хорошую работу кодера. Так, предусматривают определение дополнительных коэффициентов, основанное на взвешивании коэффициентов первоначального прототипа и позволяющее осуществлять преобразование с идеальным или почти идеальным восстановлением.
В частных вариантах выполнения функцию взвешивания вычисляют для каждого положения вводимого коэффициента между двумя последовательными коэффициентами.
Согласно варианту осуществления способа размер построенного фильтра h' в U раз больше, чем размер М первоначального фильтра h, где U и M являются целыми натуральными числами, строго превышающими единицу. В этом случае определяют значение смещения S такое, что 0≤S<U, где S является натуральным целым числом, и построенный и первоначальный фильтры проверяют отношение h'(U×n+S)=h(n) для любого натурального целого числа n, 0≤n<M.
δ
δ
δ
δ
Кроме того, для любого натурального целого числа δ, для которого 0<δ<U, можно определить две функции взвешивания P и Q. Таким образом, вводимые коэффициенты определяют при помощи отношения: h'(U×n+S+δ)=P(n)×h(n)+Q(n)×h(n+1), где целое число n n<M.
Можно также предусмотреть, чтобы обе функции взвешивания были равны. Наконец, можно предусмотреть расширение первоначального фильтра-прототипа при помощи симметрии, антисимметрии или путем добавления нулевых коэффициентов. Эти признаки можно использовать для определения коэффициентов, не достающих в первоначальном фильтре, для построения фильтра-прототипа.
Понятно, что предлагаемое изобретением построение фильтра-прототипа позволяет дополнительно уменьшить число коэффициентов, если первоначальный фильтр содержит нули. В этом случае интерполируемое окно будет иметь нули в своем импульсном отклике и интервалы, содержащие равные коэффициенты. Следовательно, можно еще больше уменьшить необходимый объем памяти.
В зависимости от используемой схемы интерполяции взвешивания описанный способ позволяет получать фильтры-прототипы с предпочтительными частотными ответными сигналами в полосе пропускания.
Кроме того, объектом изобретения является компьютерная программа, содержащая команды для применения описанного выше способа, когда эту программу исполняет процессор. Его объектом является также машиночитаемый носитель, в котором записана такая компьютерная программа.
Объектом изобретения являются также кодер и декодер, выполненные с возможностью применения заявленного способа.
Кодер/декодер в соответствии с настоящим изобретением содержит по меньшей мере две области памяти: первую область памяти для хранения первого набора коэффициентов, определяющих первоначальный фильтр-прототип заданного размера, и вторую область памяти для хранения компьютерной программы, содержащей команды для формирования второго набора коэффициентов, определяемых на основе первого набора коэффициентов. Набор, образованный путем введения коэффициентов второго набора между двумя последовательными коэффициентами первого набора, образует фильтр-прототип размером, превышающим размер первоначального фильтра-прототипа.
Кроме того, можно предусмотреть, чтобы этот кодер/декодер содержал средства для применения описанного выше способа обновления для построения фильтра-прототипа размером, превышающим размер первоначального фильтра-прототипа.
Кроме того, можно также предусмотреть способ кодирования/декодирования с использованием модулированной трансформанты, применяемый кодером/декодером и содержащий следующие этапы:
- получают размер модулированной трансформанты, используемой при кодировании/декодировании;
- если размер трансформанты больше размера первоначального фильтра-прототипа кодера/декодера, обновляют блок обработки кодера/декодера согласно описанному выше способу обновления;
- кодируют/декодируют сигнал при помощи модулированной трансформанты путем применения фильтра-прототипа, построенного во время обновления.
Предпочтительно способ кодирования/декодирования применяет описанный выше кодер/декодер.
Кодирование/декодирование с использованием модулированной трансформанты является кодированием/декодированием с применением такой трансформанты.
Этап «получения размера трансформанты» может, например, соответствовать приему сигнала, содержащего информацию с указанием этого размера. Такой сигнал может, например, указывать режим кодирования. В этом случае предусматривают режим низкого разрешения с кадрами данных уменьшенного размера, то есть требующий трансформанту меньшего размера, и режим высокого разрешения с кадрами данных большего размера, требующийся трансформанту большего размера. Вместе с тем можно также предусмотреть считывание этой информации в компьютерном файле. Можно также предусмотреть, чтобы это определение соответствовало входу кодера/декодера.
Разумеется, обновление кодера/декодера можно также рассматривать как инициализацию кодера/декодера.
Выбор размера модулированной трансформанты может также зависеть от числа отсчетов, например, обусловленного размером кадров или подкадров, предназначенных для обработки кодером/декодером. Действительно, чем больше число отсчетов на кадр, тем больше должен быть размер трансформанты.
Таким образом, можно применять трансформанты размером, меняющимся в течение времени, при этом в течение времени фильтры-прототипы обновляют на основе первоначального прототипа в зависимости от потребностей.
Другие отличительные признаки и преимущества настоящего изобретения будут более очевидны из нижеследующего подробного описания со ссылками на прилагаемые чертежи, на которых (кроме фиг.1):
фиг.2 - введение коэффициентов между двумя последовательными коэффициентами первоначального фильтра для построения фильтра-прототипа;
фиг.3 - первоначальный фильтр и фильтр, построенный на основе первоначального фильтра;
фиг.4-5 - фильтры, построенные согласно различным вариантам выполнения изобретения;
фиг.6 - подмножество фильтра, содержащее постоянные коэффициенты;
фиг.7 - кодер согласно варианту выполнения изобретения;
фиг.8 - этапы способа кодирования/декодирования согласно варианту выполнения изобретения.
z
Далее следует описание варианта выполнения изобретения, позволяющего строить окно-прототип на основании окна-прототипа, соответствующего преобразованию меньшего размера. Этот вариант входит в общие рамки модулированных трансформант типа ELT с симметричными или несимметричными окнами. В рамках ELT фильтр-прототип имеет длину L=2KM, которая может включать некоторое число M нулей на своем конце, при этом M определяет число преобразованных коэффициентов.
Преобразование анализа записывают следующим образом:
<mrow><msub><mi>y</mi><mrow><mi>k</mi><mo>,</mo><mtext> </mtext><mi>m</mi></mrow></msub><mo>=</mo><mrow><mo>〈</mo><mrow><msub><mi>x</mi><mi>m</mi></msub><mo>,</mo><mtext> </mtext><msub><mi>n</mi><mi>k</mi></msub></mrow><mo>〉</mo></mrow><mo>=</mo><mstyle displaystyle="true"><munderover><mo>∑</mo><mrow><mi>n</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>L</mi><mo>−</mo><mn>1</mn></mrow></munderover><mrow><mi>x</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mi>m</mi><mi>M</mi><mo stretchy="false">)</mo><mo>⋅</mo><msub><mi>n</mi><mi>k</mi></msub><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow></mstyle><mo>⋅</mo><mi>W</mi><mo stretchy="false">(</mo><mi>k</mi><mo>,</mo><mtext> </mtext><mi>n</mi><mo stretchy="false">)</mo></mrow>
, при 0≤k<M, где:
n - временной индекс, соответствующий кратному периода дискретизации,
k - индекс, представляющий рассматриваемый частотный канал,
h(n), 0≤n<L, определяет фильтр-прототип разложения,
W(k, n), 0≤n<L, определяет модулирующую функцию для частоты k.
Преобразование синтеза записывают, как:
<mrow><mover accent="true"><mi>x</mi><mo>˜</mo></mover><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mi>m</mi><mi>M</mi><mo stretchy="false">)</mo><mo>=</mo><mstyle displaystyle="true"><munderover><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>M</mi><mo>−</mo><mn>1</mn></mrow></munderover><mrow><msub><mi>y</mi><mrow><mi>k</mi><mo>,</mo><mtext> </mtext><mi>m</mi></mrow></msub><mo>⋅</mo><mi>f</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>⋅</mo><mi>W</mi><mo stretchy="false">(</mo><mi>k</mi><mo>,</mo><mtext> </mtext><mi>n</mi><mo stretchy="false">)</mo></mrow></mstyle></mrow>
, при 0≤n<L, где:
f(n), 0≤n<L, определяет фильтр-прототип синтеза,
<mrow><mover accent="true"><mi>x</mi><mo>˜</mo></mover><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow>
<mrow><mover accent="true"><mi>x</mi><mo>˜</mo></mover><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow>
является сигналом длиной L, содержащим паразитные члены, которые будут устранены операцией сложения-перекрывания для получения сигнала
продолжительностью, эквивалентной x(n).
Для ELT модуляцию W(k, n) определяют отношением:
<mrow><mi>W</mi><mo stretchy="false">(</mo><mi>k</mi><mo>,</mo><mtext> </mtext><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>c</mi><mi>o</mi><mi>s</mi><mrow><mo>[</mo><mrow><mfrac><mi>π</mi><mi>M</mi></mfrac><mrow><mo>(</mo><mrow><mi>n</mi><mo>+</mo><mrow><mo>(</mo><mrow><mi>n</mi><mo>+</mo><mfrac><mrow><mo>±</mo><mi>M</mi><mo>+</mo><mn>1</mn></mrow><mn>2</mn></mfrac></mrow><mo>)</mo></mrow></mrow><mo>)</mo></mrow><mrow><mo>(</mo><mrow><mi>k</mi><mo>+</mo><mfrac><mn>1</mn><mn>2</mn></mfrac></mrow><mo>)</mo></mrow></mrow><mo>]</mo></mrow></mrow>
при 0≤k<M и 0≤n<L.
<mrow><mover accent="true"><mi>x</mi><mo>˜</mo></mover><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo></mrow>
Эти преобразования обеспечивают идеальное воспроизведение, то есть
идентичен х(n) с учетом задержки.
Для обеспечения идеального восстановления фильтры f и n должны удовлетворять следующему условию:
<mrow><mstyle displaystyle="true"><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mrow><mn>2</mn><mi>K</mi><mo>−</mo><mn>2</mn><mi>s</mi><mo>−</mo><mn>1</mn></mrow></munderover><mi>f</mi></mstyle><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mi>i</mi><mi>M</mi><mo stretchy="false">)</mo><mi>h</mi><mo stretchy="false">(</mo><mi>h</mi><mo>+</mo><mi>i</mi><mi>M</mi><mo>+</mo><mn>2</mn><mi>s</mi><mi>M</mi><mo stretchy="false">)</mo><mo>=</mo><mi>δ</mi><mo stretchy="false">(</mo><mi>s</mi><mo stretchy="false">)</mo></mrow>
, при s=0, 1, …, K-1,
где функция δ определена как δ(s=0)=1 и δ(s≠0)=0.
Предусмотрен вариант выполнения, касающийся трансформант MDCT, то есть подмножества ELT с фильтрами длиной L=2M, то есть с К=1. Условие идеального восстановления записывают как:
f(n)h(n)+f(n+M)h(n+M)=1, при 0<n<M.
Согласно одному решению:
f(n)=h(2M-1-n), при 0≤n<2M.
Это позволяет использовать одни и те же коэффициенты фильтра-прототипа для разложения и для синтеза. В алгоритме синтеза надо будет учитывать только обратный ход во времени, соответствующий члену 2М-1-n.
В этом случае отношение идеального восстановления записывают:
d(n)=h(n)h(2M-1-n)+h(n+M)h(M-1-n)=1, при 0≤n<M
На основе этого преобразования размером M строят преобразование большего размера для M'=U·M. Таким образом, определяют фильтр h', некоторое число коэффициентов которого взяли из фильтра h.
Таким образом, как показано на фиг.2, фильтр h' строят следующим образом:
h'(U·n+S)=h(n), 0≤n<L. При значении смещения S, 0≤S<U.
Для обеспечения идеального воспроизведения фильтр-прототип длиной L'=2·M'=2·U·M должен проверять отношение восстановления, аналогичное приведенному выше:
d'(n)-h'(n)h'(2M'-1-n)+h'(n+M')h'(M'-1-n)
=h'(n)h'(2UM'-1-n)+h'(n+UM')h'(UM'-1-n)=1, при этом известно, что выборки с индексом, кратным U, в положении S, взяты из h(n).
Далее следует описание вариантов определения недостающих значений h'.
Общий вариант
1
1
2
На фиг.3 показан принцип определения построенного фильтра. Исходят из фильтра φ размером M. Затем коэффициенты этого фильтра φ перераспределяют на больший интервал размером 2М. Наконец, вычисляют промежуточные коэффициенты для дополнения конечного фильтра φ. Как и на фиг.2, промежуточные отсчеты строят по формуле, которая определяет общий вариант выполнения:
δ
δ
h'(U·n+S+δ)=P(n)h(n)+Q(n)h(n+1).
δ
δ
Р(n) и Q(n), где n<M и δ является целым числом 0<δ<U, являются функциями взвешивания.
Если S=0, первоначальная дельта=0 и первоначальное n n0=0.
Если S!=0, первоначальная дельта=U-S и первоначальное n n0=-1.
δ
δ
Таким образом, определяют Р(-1) и Q(-l), чтобы иметь возможность вычислить необходимое h'(0)=h'(U·(-1)+S+δ), когда S отличается от нуля. Первое значение дельты будет δ=U·S.
Следует отметить, что выражение h' может потребовать обращения к неопределенным пунктам. Например, h'(U·(2M-1)+S+δ) требует запроса к h(2M), которое не определено.
Для определения недостающих коэффициентов можно расширить фильтр h во всех формулах по следующим методикам:
- h(2М+n)=-h(2М-1-n) по антисимметрии,
- h(2M+n)=+h(2M-l-n), для n>0 по симметрии,
- h(2M+n)=0, путем добавления нулевых коэффициентов.
Точно так же, можно расширить h для отрицательных индексов. Например, чтобы определить h'(0), необходимо определить h(-1). Таким образом, этот коэффициент можно определить путем расширения h на отрицательные индексы согласно одному из следующих положений:
- h(-1-n)=-h(n), по антисимметрии,
- h(-l-n)=+h(n), при n≥0 по симметрии,
- h(-1-n)=0, путем добавления нулевых коэффициентов.
В других случаях расширения на отрицательные отсчеты и превышающие L производят по модулю путем кратного копирования носителя 0…L-1.
Для обеспечения идеального воспроизведения h'(n) перезаписывают d'(n) в отдельной точке:
d'(Un+S)=h'(Un+S)h'(2UM-1-Un-S)+h'(UM+Un+S)h'(UM-1-Un-S)=1,
где
d'(Un+S)=
h'(Un+S)h'(U(2M-1-n)+U-1-S)+h'(U(M+n)+Sh'(U(M-n-1)+U-1-S)
откуда:
U-1-2S
U-1-2S
h(n)[P(M-1-n)h(2M-1-n)h(2М-1-n)+O(M-1-n)h(2M-n)]
U-1-2S
U-1-2S
+h(М+n)[P(M-1-n)h(M-1-n)+Q(М-1-n)h(M-n)]=1
<mtable columnalign="left"><mtr><mtd><msub><mi>P</mi><mrow><mi>U</mi><mo>−</mo><mn>1</mn><mo>−</mo><mn>2</mn><mi>S</mi></mrow></msub><mo stretchy="false">(</mo><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><munder><munder><mrow><mrow><mo>[</mo><mrow><mi>h</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mi>h</mi><mo stretchy="false">(</mo><mn>2</mn><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>+</mo><mi>n</mi><mo stretchy="false">)</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><mo>]</mo></mrow><mo>+</mo></mrow><mo stretchy="true">︸</mo></munder><mn>1</mn></munder></mtd></mtr><mtr><mtd><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><msub><mi>Q</mi><mrow><mi>U</mi><mo>−</mo><mo>`</mo><mn>1</mn><mo>−</mo><mn>2</mn><mi>S</mi></mrow></msub><mo stretchy="false">(</mo><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mrow><mo>[</mo><mrow><mi>h</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mi>h</mi><mo stretchy="false">(</mo><mn>2</mn><mi>M</mi><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>+</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><mo>]</mo></mrow><mo>=</mo><mn>1</mn></mtd></mtr></mtable>
U-1-2S
U-1-2S
P(M-1-n)=1-Q(М-1-n)[h(n)h(2M-n)+h(M-n)h(M+n)]
что эквивалентно
U-1-2S
U-1-2S
P(n)=1-Q(n)[h(n)h(2M-n)+h(M-n)h(M+n)]
В заключение с учетом выбора Q можно установить взвешивание Р, позволяющее получить идеальное воспроизведение.
Вариант выполнения с одним взвешиванием
Частный вариант выполнения состоит в соблюдении условия P=Q. В этом случае для функции взвешивания можно получить прямое выражение:
U-1-2S
P(n)=[1+h(n+1)h(2M-1-n)+h(M-1-n)h(M+1+n)]=1
<maths num="26"><math display="block"><mrow><msub><mi>P</mi><mrow><mi>U</mi><mo>−</mo><mn>1</mn><mo>−</mo><mn>2</mn><mi>S</mi></mrow></msub><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mfrac><mn>1</mn><mrow><mn>1</mn><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo><mi>h</mi><mo stretchy="false">(</mo><mn>2</mn><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>+</mo><mn>1</mn><mo>+</mo><mi>n</mi><mo stretchy="false">)</mo></mrow></mfrac></mrow></math><img file="00000022.tif" he="10" wi="136" img-content="undefined" img-format="tif" /></maths>
Можно записать d' в другой точке
d'(Un+S+1)=
h'(Un+S+1)h'(2UM-1-Un-S-1)+U-1-S)+h'(UM+Un+S+1)h'(UM-1-In-S-1)=1
d'(Un+S+1)=
h'(Un+S+1)h'(U(2M-1-n)+U-S-2)+h'(U(M+n)+S+1)h'(U(M-1-n)+U-S-2)=1
1
P(n)[h(n)+h(n+1)]h'(U(2M-n-1)+U-S-2)+
-1
P(n)[h(M+n)+h(M+n+1)]h'(U(M-1-n)+U-S-2)=1
1
U-2S-2
P(n)P(M-1-n)[h(n)+h(n+1)][h(2N-1-n)+h(2M-n)]
1
U-2S-2
+P(n)P(M-1-n)[h(M+n)+h(M+n+1)][h(M-1-n)+h(M-n)]=1
<mtable columnalign="left"><mtr><mtd><msub><mi>P</mi><mn>1</mn></msub><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><msub><mi>P</mi><mrow><mi>U</mi><mo>−</mo><mn>2</mn><mi>S</mi><mo>-</mo><mn>2</mn></mrow></msub><mo stretchy="false">(</mo><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo></mtd></mtr><mtr><mtd><mfrac><mn>1</mn><mrow><mrow><mo>[</mo><mrow><mi>h</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><mo>]</mo></mrow><mrow><mo>[</mo><mrow><mi>h</mi><mo stretchy="false">(</mo><mn>2</mn><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mn>2</mn><mi>M</mi><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><mo>]</mo></mrow><mo>+</mo><mrow><mo>[</mo><mrow><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>+</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>+</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><mo>]</mo></mrow><mrow><mo>[</mo><mrow><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><mo>]</mo></mrow></mrow></mfrac></mtd></mtr></mtable>
<mtable columnalign="left"><mtr><mtd><msub><mi>P</mi><mn>1</mn></msub><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><msub><mi>P</mi><mrow><mi>U</mi><mo>−</mo><mn>2</mn><mi>S</mi><mo>-</mo><mn>2</mn></mrow></msub><mo stretchy="false">(</mo><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo></mtd></mtr><mtr><mtd><mfrac><mn>1</mn><mrow><mn>1</mn><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mi>h</mi><mo stretchy="false">(</mo><mn>2</mn><mi>M</mi><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo><mrow><mo>[</mo><mrow><mi>h</mi><mo stretchy="false">(</mo><mn>2</mn><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mn>2</mn><mi>M</mi><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><mo>]</mo></mrow><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>+</mo><mi>n</mi><mo stretchy="false">)</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>+</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo><mrow><mo>[</mo><mrow><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>-</mo><mn>1</mn><mo>-</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>-</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><mo>]</mo></mrow></mrow></mfrac></mtd></mtr></mtable>
1
1-2S-2
При этом получают отношение, позволяющее построить ряд взвешивания P(n) на основании данного Р(М-1-n), обеспечивающий идеальное восстановление.
На основе этого выражения можно обобщить определение функций взвешивания. Они будут опираться парами в виде (δ≠0):
<mtable columnalign="left"><mtr><mtd><msub><mi>P</mi><mi>δ</mi></msub><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><msub><mi>P</mi><mrow><mi>U</mi><mo>−</mo><mn>2</mn><mi>S</mi><mo>-</mo><mn>1</mn><mo>-</mo><mi>δ</mi></mrow></msub><mo stretchy="false">(</mo><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo></mtd></mtr><mtr><mtd><mfrac><mn>1</mn><mrow><mn>1</mn><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mi>h</mi><mo stretchy="false">(</mo><mn>2</mn><mi>M</mi><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo><mrow><mo>[</mo><mrow><mi>h</mi><mo stretchy="false">(</mo><mn>2</mn><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mn>2</mn><mi>M</mi><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><mo>]</mo></mrow><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>+</mo><mi>n</mi><mo stretchy="false">)</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>+</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo><mrow><mo>[</mo><mrow><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>-</mo><mn>1</mn><mo>-</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>-</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><mo>]</mo></mrow></mrow></mfrac></mtd></mtr></mtable>
Это выражение позволяет генерировать взвешивания, которые и образуют фильтр, интерполированный согласно определенному критерию.
Например, выбирают частотный ответный сигнал h', минимизируя его энергию по полосе задерживания на основании данной частоты и максимизируя его непрерывность или его выигрыш кодирования на конкретном сигнале.
Случай интерполяции 2-го порядка
Частный вариант выполнения U=2, S=0
Фильтр интерполируют при помощи:
h'(2·n+0)=h(n)
1
h'(2·n+1)=R(n)h(n)+P(n)h(n+1)
<mrow><msub><mi>P</mi><mn>1</mn></msub><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mfrac><mn>1</mn><mrow><mn>1</mn><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo><mi>h</mi><mo stretchy="false">(</mo><mn>2</mn><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>+</mo><mn>1</mn><mo>+</mo><mi>n</mi><mo stretchy="false">)</mo></mrow></mfrac></mrow>
<mrow><mi>h</mi><mo>'</mo><mo stretchy="false">(</mo><mn>2</mn><mo>⋅</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo><mo>=</mo><mfrac><mrow><mi>h</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><mrow><mn>1</mn><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo><mi>h</mi><mo stretchy="false">(</mo><mn>2</mn><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>+</mo><mn>1</mn><mo>+</mo><mi>n</mi><mo stretchy="false">)</mo></mrow></mfrac></mrow>
.
На фиг.4 представлены фильтр-прототип S1 синусоидального типа размером 640 при MCDT размером 320, и фильтр-прототип S2 размером 1280 при MCDT размером 640, полученный на основании S1 согласно настоящему частному варианту выполнения (S1 произвольно центровали вокруг 640 для сравнения S1 и S2).
Случай интерполяции 2-го порядка с нулем на конце
В частном варианте реализации h(n), имеющего нули на своем конце (то есть в последовательных индексах, начинающихся с п=0 или с n=L-1), без потери обобщенности будем иметь h(n)=0 при 2M-Mz≤n<2M. За счет предлагаемой интерполяции h' в этом случае будут нулевыми в соответствующем носителе. Предлагаемая интерполяция имеет следующее свойство:
<mrow><mi>d</mi><mo>'</mo><mo stretchy="false">(</mo><mn>2</mn><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>h</mi><mo>'</mo><mo stretchy="false">(</mo><mn>2</mn><mi>n</mi><mo stretchy="false">)</mo><munder><munder><mrow><mi>h</mi><mo>'</mo><mo stretchy="false">(</mo><mn>4</mn><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mn>2</mn><mi>n</mi><mo stretchy="false">)</mo></mrow><mo stretchy="true">︸</mo></munder><mn>0</mn></munder><mo>+</mo><mi>h</mi><mo>'</mo><mo stretchy="false">(</mo><mn>2</mn><mi>M</mi><mo>+</mo><mn>2</mn><mi>n</mi><mo stretchy="false">)</mo><mi>h</mi><mo>'</mo><mo stretchy="false">(</mo><mn>2</mn><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mn>2</mn><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mn>1</mn></mrow>
<mrow><mi>h</mi><mo>'</mo><mo stretchy="false">(</mo><mn>2</mn><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mn>2</mn><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mfrac><mn>1</mn><mrow><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>+</mo><mi>n</mi><mo stretchy="false">)</mo></mrow></mfrac></mrow>
<mrow><mi>d</mi><mo>'</mo><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>h</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><munder><munder><mrow><mi>h</mi><mo stretchy="false">(</mo><mn>2</mn><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo></mrow><mo stretchy="true">︸</mo></munder><mn>0</mn></munder><mo>+</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>+</mo><mi>n</mi><mo stretchy="false">)</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mn>1</mn></mrow>
Однако
, следовательно
<mrow><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mfrac><mn>1</mn><mrow><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>+</mo><mi>n</mi><mo stretchy="false">)</mo></mrow></mfrac></mrow>
.
Таким образом, получаем:
<mrow><mi>h</mi><mo>'</mo><mo stretchy="false">(</mo><mn>2</mn><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mn>2</mn><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mfrac><mn>1</mn><mrow><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>+</mo><mi>n</mi><mo stretchy="false">)</mo></mrow></mfrac><mo>=</mo><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>−</mo><mn>1</mn><mo>−</mo><mi>n</mi><mo stretchy="false">)</mo><mo>=</mo><mi>h</mi><mo>'</mo><mo stretchy="false">(</mo><mn>2</mn><mi>M</mi><mo>−</mo><mn>2</mn><mo>−</mo><mn>2</mn><mi>n</mi><mo stretchy="false">)</mo></mrow>
.
Этот конкретный выбор интерполяции позволяет получить интервалы постоянных коэффициентов при введении нулей в фильтр h. Эти интервалы имеют, например, длину 2. Путем обобщения можно показать, что при интерполяции порядка U интервалы имеют длину U в области, сосредоточенной вокруг индекса n=UM.
На фиг.5 показаны фильтр-прототип A1 типа "aid" размером 640 для трансформанты MDCT размером 320 и фильтр-прототип А2 размером 1280 для трансформанты MDCT размером 640, построенный в данном случае на основании А1. Как и на фиг.4, A1 был центрован. Фильтр А1 содержит 80 нулей на своем конце Z. Таким образом, А2 содержит интервалы постоянных отсчетов размером 2 за счет того, что А1 содержит на своем конце нули.
Фиг.6 представляет собой увеличение зоны фильтра А2, содержащей постоянные выборки C.
Применение
Фильтры-прототипы, построенные согласно описанному выше способу, обеспечивают быстрое применение.
В известных решениях первый этап во время анализа состоит во взвешивании отсчетов при помощи окна рассматриваемой трансформанты перед быстрым преобразованием, как было показано выше.
В данном случае, за счет интерполяции коэффициенты фильтра-прототипа могут быть расположены таким образом, чтобы дополнять коэффициенты, получаемые из нижнего порядка трансформанты.
Например, при интерполяции порядка U со смещением S можно записать:
<mrow><mi>y</mi><msub><mo>'</mo><mrow><mi>k</mi><mo>,</mo><mtext> </mtext><mi>m</mi></mrow></msub><mo>=</mo><mrow><mo>〈</mo><mrow><msub><mi>x</mi><mi>m</mi></msub><mo>,</mo><mtext> </mtext><msubsup><mi>h</mi><mi>k</mi><mo>'</mo></msubsup></mrow><mo>〉</mo></mrow><mo>=</mo><mstyle displaystyle="true"><munderover><mo>∑</mo><mrow><mi>n</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>U</mi><mi>L</mi><mo>−</mo><mn>1</mn></mrow></munderover><mrow><mi>x</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mi>m</mi><mi>T</mi><mo stretchy="false">)</mo><mo>⋅</mo><mi>h</mi><mo>'</mo><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>⋅</mo><mi>W</mi><mo>'</mo><mo stretchy="false">(</mo><mi>k</mi><mo>,</mo><mtext> </mtext><mi>n</mi><mo stretchy="false">)</mo></mrow></mstyle></mrow>
h'(U·n+S)=h(n)
δ
δ
h'(U·n+S+δ)=P(n)h(n)+Q(n)h(n+1)
<mtable columnalign="left"><mtr><mtd><mi>y</mi><msub><mo>'</mo><mrow><mi>k</mi><mo>,</mo><mtext> </mtext><mi>m</mi></mrow></msub><mo>=</mo><mrow><mo>〈</mo><mrow><msub><mi>x</mi><mi>m</mi></msub><mo>,</mo><mtext> </mtext><msubsup><mi>h</mi><mi>k</mi><mo>'</mo></msubsup></mrow><mo>〉</mo></mrow><mo>=</mo><mstyle displaystyle="true"><munderover><mo>∑</mo><mrow><mi>n</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>L</mi><mo>−</mo><mn>1</mn></mrow></munderover><mrow><mi>x</mi><mo stretchy="false">(</mo><mi>U</mi><mi>n</mi><mo>+</mo><mi>S</mi><mo>+</mo><mi>m</mi><mi>T</mi><mo stretchy="false">)</mo><mo>⋅</mo><mi>h</mi><mo>'</mo><mo stretchy="false">(</mo><mi>U</mi><mi>n</mi><mo>+</mo><mi>S</mi><mo stretchy="false">)</mo><mo>⋅</mo><mi>W</mi><mo>'</mo><mo stretchy="false">(</mo><mi>k</mi><mo>,</mo><mtext> </mtext><mi>U</mi><mi>n</mi><mo>+</mo><mi>S</mi><mo stretchy="false">)</mo><mo>+</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mstyle displaystyle="true"><munderover><mo>∑</mo><mtable columnalign="left"><mtr><mtd><mrow><mi>δ</mi><mo>=</mo><mn>0</mn></mrow></mtd></mtr><mtr><mtd><mrow><mi>δ</mi><mo>≠</mo><mi>S</mi></mrow></mtd></mtr></mtable><mrow><mi>U</mi><mo>−</mo><mn>1</mn></mrow></munderover><mrow><mstyle displaystyle="true"><munderover><mo>∑</mo><mrow><mi>n</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>L</mi><mo>−</mo><mn>1</mn></mrow></munderover><mrow><mi>x</mi><mo stretchy="false">(</mo><mi>U</mi><mi>n</mi><mo>+</mo><mi>S</mi><mo>+</mo><mi>δ</mi><mo>+</mo><mi>m</mi><mi>T</mi><mo stretchy="false">)</mo><mo>⋅</mo><mi>h</mi><mo>'</mo><mo stretchy="false">(</mo><mi>U</mi><mi>n</mi><mo>+</mo><mi>S</mi><mo>+</mo><mi>δ</mi><mo stretchy="false">)</mo><mo>⋅</mo><mi>W</mi><mo>'</mo><mo stretchy="false">(</mo><mi>k</mi><mo>,</mo><mtext> </mtext><mi>U</mi><mi>n</mi><mo>+</mo><mi>S</mi><mo>+</mo><mi>δ</mi><mo stretchy="false">)</mo></mrow></mstyle></mrow></mstyle></mtd></mtr></mtable>
<mtable columnalign="left"><mtr><mtd><mi>y</mi><msub><mo>'</mo><mrow><mi>k</mi><mo>,</mo><mtext> </mtext><mi>m</mi></mrow></msub><mo>=</mo><mrow><mo>〈</mo><mrow><msub><mi>x</mi><mi>m</mi></msub><mo>,</mo><mtext> </mtext><msubsup><mi>h</mi><mi>k</mi><mo>'</mo></msubsup></mrow><mo>〉</mo></mrow><mo>=</mo><mstyle displaystyle="true"><munderover><mo>∑</mo><mrow><mi>n</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>L</mi><mo>−</mo><mn>1</mn></mrow></munderover><mrow><mi>x</mi><mo stretchy="false">(</mo><mi>U</mi><mi>n</mi><mo>+</mo><mi>S</mi><mo>+</mo><mi>m</mi><mi>T</mi><mo stretchy="false">)</mo><mo>⋅</mo><mi>h</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>⋅</mo><mi>W</mi><mo>'</mo><mo stretchy="false">(</mo><mi>k</mi><mo>,</mo><mtext> </mtext><mi>U</mi><mi>n</mi><mo>+</mo><mi>S</mi><mo stretchy="false">)</mo><mo>+</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mtext> </mtext><mstyle displaystyle="true"><munderover><mo>∑</mo><mtable columnalign="left"><mtr><mtd><mrow><mi>δ</mi><mo>=</mo><mn>0</mn></mrow></mtd></mtr><mtr><mtd><mrow><mi>δ</mi><mo>≠</mo><mi>S</mi></mrow></mtd></mtr></mtable><mrow><mi>U</mi><mo>−</mo><mn>1</mn></mrow></munderover><mrow><mstyle displaystyle="true"><munderover><mo>∑</mo><mrow><mi>n</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>L</mi><mo>−</mo><mn>1</mn></mrow></munderover><mrow><mi>x</mi><mo stretchy="false">(</mo><mi>U</mi><mi>n</mi><mo>+</mo><mi>S</mi><mo>+</mo><mi>δ</mi><mo>+</mo><mi>m</mi><mi>T</mi><mo stretchy="false">)</mo><mo>⋅</mo><mrow><mo>[</mo><mrow><msub><mi>P</mi><mi>δ</mi></msub><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mi>h</mi><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mo>+</mo><msub><mi>Q</mi><mi>δ</mi></msub><mo stretchy="false">(</mo><mi>n</mi><mo stretchy="false">)</mo><mi>h</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><mo>]</mo></mrow><mo>⋅</mo><mi>W</mi><mo>'</mo><mo stretchy="false">(</mo><mi>k</mi><mo>,</mo><mtext> </mtext><mi>U</mi><mi>n</mi><mo>+</mo><mi>S</mi><mo>+</mo><mi>δ</mi><mo stretchy="false">)</mo></mrow></mstyle></mrow></mstyle></mtd></mtr></mtable>
Таким образом, память кодера/декодера для фильтра-прототипа можно сгруппировать в два сегмента: первый сегмент, содержащий коэффициенты первоначального фильтра-прототипа, на который будет возложено первое взвешивание x(Un+S+Mt)·h(n), и второй сегмент, содержащий интерполированные коэффициенты. Таким образом, можно избежать дублирования области памяти, сохраняя при этом алгоритм быстрого вычисления. Это свойство сохраняется и при синтезе поддиапазонов во время обратного преобразования.
В случае интерполяции, основанной на первоначальном фильтре с нулями на конце, операция взвешивания при помощи фильтра большего размера может привести к упрощению операций. Действительно, в центральной зоне вокруг n=UM коэффициенты полученного фильтра-прототипа имеют постоянные отсчеты. Таким образом, можно наглядно показать разложение на множители в следующем виде:
<mrow><mi>h</mi><mo stretchy="false">(</mo><mi>M</mi><mo>+</mo><mi>n</mi><mo stretchy="false">)</mo><mstyle displaystyle="true"><munderover><mo>∑</mo><mrow><mi>δ</mi><mo>=</mo><mn>0</mn></mrow><mrow><mi>U</mi><mo>−</mo><mn>1</mn></mrow></munderover><mrow><mrow><mo>[</mo><mrow><mi>W</mi><mo stretchy="false">(</mo><mi>k</mi><mo>,</mo><mtext> </mtext><mi>U</mi><mi>M</mi><mo>+</mo><mi>U</mi><mi>h</mi><mo>+</mo><mi>S</mi><mo>+</mo><mi>δ</mi><mo stretchy="false">)</mo><mi>x</mi><mo stretchy="false">(</mo><mi>U</mi><mi>M</mi><mo>+</mo><mi>U</mi><mi>h</mi><mo>+</mo><mi>S</mi><mo>+</mo><mi>δ</mi><mo stretchy="false">)</mo></mrow><mo>]</mo></mrow></mrow></mstyle></mrow>
Это позволяет избежать, с одной стороны, сохранения в памяти интерполированных отсчетов, идентичных первоначальному фильтру-прототипу, и, с другой стороны, сэкономить операции взвешивания благодаря разложению на множители. В рассматриваемом диапазоне отсчетов, то есть в зоне с центром вокруг UM, можно, таким образом, сэкономить (U-1) умножений на каждый взвешенный отсчет.
i
Далее со ссылками на фиг.7 следует описание кодера, выполненного с возможностью применения описанного выше способа. Декодер может иметь такую же структуру. Кодер COD содержит процессор обработки PROC, выполненный с возможностью осуществления разложения или синтеза, как было уже описано выше. Для выполнения этих операций кодер COD опирается на фильтр-прототип. Кодер содержит первую зону памяти MEM1 для записи первоначального фильтра-прототипа φ. Например, этот первоначальный фильтр позволяет реализовать модулированные преобразования максимального размера M.
e
i
Для реализации трансформант большего размера кодер содержит область памяти MOD_EXT для хранения компьютерной программы, содержащей команды для построения фильтра-прототипа φ размером, превышающим размер φ. Для этого вычисляют дополнительные коэффициенты, как было описано выше. Затем эти дополнительные коэффициенты сохраняют в области памяти MEM2.
На фиг.8 показан способ кодирования/декодирования, который адаптирует используемый фильтр-прототип в зависимости от требуемого размера модулированной трансформанты.
i
На этапе S80 сначала получают размер трансформанты, используемой для разложения или синтеза соответственно кодируемого или декодируемого сигнала. Во время теста Т82 определяют, является ли размер модулированной трансформанты больше размера фильтра-прототипа φ, записанного в память для реализации модулированной трансформанты.
e
Если размер модулированной трансформанты превышает размер фильтра-прототипа, переходят к этапу S84 построения фильтра-прототипа φ большего размера, как уже было описано выше. После этапе на этапе S86 производят соответственно кодирование или декодирование сигнала.
Если размер трансформанты равен размеру фильтра, можно пропустить этап S82 построения и перейти непосредственно к этапу S86.
Предпочтительно, если трансформанта имеет размер меньше, чем фильтр, осуществляют этап уменьшения размера фильтра, например, путем прореживания и только после этого переходят к этапу S86.
Разумеется, настоящее изобретение не ограничивается описанными вариантами выполнения и может включать в себя другие варианты. Например, было описано вычисление дополнительных коэффициентов путем взвешивания двух последовательных коэффициентов, однако можно предусмотреть и другие варианты выполнения, в которых взвешивание производят для большего числа коэффициентов.