[an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено ВН 20 февраля 2003 г. 16:45
В ответ на: Спасибо за ответ отправлено Newka 20 февраля 2003 г. 14:36

Да не что-то пропустили, а многое. Написали бы сразу, что матлаб Вам выдал.
numerator - это такая хрень, которая по русски называется числителем.
denominator - соответственно знаменатель.
Т.е. числитель и знаменатель передаточной функции, H(Z). К-ты из числителя с теми же самыми знаками переходят и в разностное уравнение. Это коэфф-ты при x. К-ты из знаменателя, кроме первого, переходят в разностное уравнение с обратными знаками. Я Вам это и написал.
Но это не все, как выяснилось. В таблице к-тов приведены и насчитанные к-ты (reference) и квантованные. Посмотрите на второй к-т в denominator'е, его рассчитанное и квантованное значение. Они же и рядом не лежали. Видимо при квантовании какое-то ограничение.
Так вот, Вам нужно:
1. Взять расчетное значение, т.е. -1.63...., поделить его на 2, привести к виду q15, это будет y_c1. y-c2 - квантованное значение 3-го к-та. Смените у обоих знак.
2. x-часть оставьте как она у Вас написана.
С y-частью небольшое изменение.
stm #y_c1,T
mac y_1,A
stm #y_c1,T
mac y_1,A
stm #y_c2,T
mac y_2,A
Т.е. двойное использование y_c1 - компенсация деления на 2.
y_c0 не участвует.
Если у y_c1, y_c2 знаки не менять, то вместо mac нужен mas.
3. При вычислениях могут быть переполнения. Т.е. насчитанный y не лезет в 32-х разрядную сетку.
Один из распространенных способов борьбы с этим - введение искуственного ограничения результата. Т.е. если результат положителен, но не лезет в 32 разряда, его приравнивают к максимальному положит. 32-х разрядному числу, т.е. к 1-2^(-31).
Если отрицательный и не лезет, то к максимальному по модулю отрицательному 32-х разрядному числу, т.е. к -1.
Это ограничение можно сделать и вручную, используя бит OVA(OVB), и автоматически, установив бит OVM.
Второй способ - уменьшить в одно и то же число раз все коэффициенты ТОЛЬКО ПРИ X. Например в 2 раза. При этом просто упадет коэффициент передачи фильтра. Например вместо 1 будет 0.5. Поскольку умножитель имеет 2 режима работы - integer и fractional, можно, при уменьшении x коэффициентов в 2 раза, на самом деле сами к-ты не трогать, а уменьшение сделать установкой целочисленного режима умножения. Для y к-тов оставить fractional.
Т.е. так:
rsbx frct
stm #x_c0,T
mpy x_0,A

stm #x_c1,T
mac x_1,A

stm #x_c2,T
mac x_2,A

ssbx frct

stm #y_c1,T
mac y_1,A
stm #y_c1,T
mac y_1,A
stm #y_c2,T
mac y_2,A

sth a,y_0

Но к-т передачи фильтра будет около 0.5.

И напоследок. Чтобы не возникало желания вставлять что-то типа
stm #y_c0,T
mac y_0,A.

Пример фильтра. Разностное уравнение.
у(n)=a0*x(n)+a1*x(n-1)+a2*x(n-2)+b1*y(n-1)+b2*y(n-2).
Необходимо найти передаточную ф-ию. H(Z).
Для этого нужно взять Z- преобразование от обоих частей уранения.
А дальше голая арифметика. У Z-преобразования есть одно св-во, похожее на свойство преобразования Фурье. А именно - Z-преобразование задержанного сигнала равно Z-преобразованию исходного сигнала, умноженному на фазовый множитель, т.е. Z в степени=-число тактов задержки.
Другое св-во также аналогично Фурье - Z-преобразование сигнала, умноженного на константу равно Z-преобразованию исходного сигнала, умноженному на эту же константу. Т.е. константа "выносится за скобки".

Пользуясь этими свойствами получим:
Y(Z)=a0*X(Z)+a1*X(Z)*Z^(-1)+a2*X(Z)*Z^(-2)+b1*Y(Z)*Z^(-1)+b2*Y(Z)*Z^(-2).
Или:
Y(Z)*(1-b1*Z^(-1)-b2*Z^(-2))=X(Z)*(a0+a1*Z^(-1)+a2*Z^(-2))
H(Z)=Y(Z)/X(Z).
H(Z)=(a0+a1*Z^(-1)+a2*Z^(-2))/*(1-b1*Z^(-1)-b2*Z^(-2))
Точно также можно из H(Z) получить разностное уравнение.
Отсюда видна, во-первых, смена знаков для y-коэффицентов, о чем я уже писал.
Во-вторых, 1 в знаменателе. Это действительно к-т при y(n). И знак он не меняет. Но y(n) - это же выход фильтра. Вместо 1 можно записать b0, например.
Синтезируется H(Z). Пусть в результате синтеза вдруг оказалось, что b0 равен 1. Тогда просто b0 выносится за скобки, т.е. на него делятся все остальные к-ты и числителя и знаменателя. И вместо b0 единица.
Передаточная ф-ия никак от этого не изменится, соответственно и частотная характеристика. Хотя и к-ты в передаточной ф-ии и, соответственно, в разностном уравнении другие.
Так что умножать на b0 не имеет никакого смысла. Это к-т при y(n) - выходе фильтра. И b0 всегда можно сделать равным 1.
А Ваше -
stm #y_c0,T
mac y_0,A
-это участие выходного отсчета в вычислении самого же себя.
Решения знаменателя H(Z) дадут полюса. Решения числителя - нули.
И те и другие в виде r*exp(j*W). Для устойчивости фильтра r у полюсов должно быть меньше 1. Для нулей это не обязательно.
Подставив в H(Z) вместо Z exp(j*2*pi*f/fdiskr) получите частотную характеристику. Т.е. H(Z) на единичной окружности в Z плоскости.



Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru