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

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

Отправлено homekvn 06 июля 2006 г. 13:10
В ответ на: это и и спрашиваю, не могу сообразить как правильно этот ФВЧ реализовать отправлено sergant1 06 июля 2006 г. 12:50

ФНЧ в НЧКаскаде у Вас должен осуществлять фильтрацию половины диапазона: т.е. от 0 до fs/4. Причем это независимо от номера понижающего каскада. ФВЧ, соответственно, должен брать вторую половину: от fs/4 до fs/2. Как его реализовать, да еще и бесплатно?

- Очень просто. Будем считать, что ФНЧ с указанными свойствами Вы реализовали в виде КИХ-фильтра. Обозначим отсчеты его импульсной характеристики h(0), h(1), h(2), ... h(N). Тогда, если мы состряпаем фильтр с импульсной характеристикой -h(0), h(1), -h(2), h(3), ...,
то она будет соответствовать фильтру ВЧ, частота среза которого в точности совпадет с частотой среза ФНЧ. Приведу комментарий, который я писал для одной своей сишной функции, имеющей отношение к этому (см. в конце поста).

Про амплитудный детектор я уже достаточно подробно написал. Нужен по сути дела детектор пиков, который детектирует превышение порога модулем сигнала. Детектор имеет два состояния (и два значения выхода): 0 - "нет превышения порога" и 1 - "есть превышение порога". Будучи перешедшим в состояние 1 детектор остается в нем как минимум в течение L отсчетов сигнала (число L надо выбрать так, чтобы оно было не меньше длины фильтра в ИНЧКаскадах). Если же в продолжение этих L отсчетов вновь было зафиксировано превышение, то мы по новой начинаем отсчитывать L отсчетов. Если же по истечении L отсчетов превышения порога не было зарегистрировано, то переходим в состояние 0.

Если был переход в состояние 0, то это означает, что можно понижать частоту в два раза. Теперь мы начинаем анализировать работу детектора следующего каскада. Если и он на протяжении L отсчетов перейдет в состояние 0, то можем опять понизить частоту вдвое. Но вот если хотя бы один из верхних каскадов перешел в состояние 1, то надо немедленно начать повышать частоту дискретизации. Причем с учетом способа кодирования сигналов перехода на повышенную/пониженную частоту делать это надо последовательно.

* SOME DETAILS OF THE ALGORITHM IMPLEMENTATION *
* *
* Odd-length HPF and LPF FIRs are complementary, i.e. their coefficients are in the *
* following relation: *
* *
* aH(0) = -aL(0), aH(1) = aL(1), aH(2) = -aL(2), aH(3) = aL(3), ... , (1) *
* *
* where aH(i) and aL(i) are the coefficients of HPF and LPF respectively. In other words, *
* *
* yHPF[n] = -aL(0)*x[n]+aL(1)*x[n-1]-aL(2)*x[n-2]+aL(3)*x[n-3]-...-aL(N-1)*x[n-N+1], (2) *
* *
* yLPF[n] = aL(0)*x[n]+aL(1)*x[n-1]+aL(2)*x[n-2]+aL(3)*x[n-3]+...+aL(N-1)*x[n-N+1], (3) *
* *
* where yHPF[n] and yLPF[n] are the n-th samples of the output of HPF and LPF respectively; *
* N is the filter length; N is odd; x[i] the samples of the input signal. *
* *
* Because of (1) one can rewrite the formulae (2) and (3) in the following form: *
* *
* yHPF[n] = -R0[n] + R1[n], (4) *
* *
* yLPF[n] = R0[n] + R1[n], (5) *
* *
* where *
* *
* R0[n] = aL(0)*x[n] + aL(2)*x[n-2] + ... + aL(2*K)*x[n-2*K], (6) *
* *
* R1[n] = aL(1)*x[n-1] + aL(3)*x[n-3] + ... + aL(2*K-1)*x[n-2*K+1], (7) *
* *
* 2*K = N-1. (8) *
* *
* Being symmetrical the filters' coefficients satisfy the following condition: *
* *
* aL(0) = aL(2*K), aL(1) = aL(2*K-1), aL(2) = aL(2*K-2), ... (9) *
* *
* Using (9), rewrite (4) and (5): *
* *
* R0[n] = aL(0)*(x[n]+x[n-2*K]) + aL(2)*(x[n-2]+x[n-2*K+2]) + ... (10) *
* *
* R1[n] = aL(1)*(x[n-1]+x[n-2*K+1]) + aL(3)*(x[n-3]+x[n-2*K+3]) + ... (11) *
* *
* R e m a r k. *
* Formulae (10) and (11) require less calculations than the formulae (6) and (7). However, *
* using (10) and (11) gives us one small difficulty. The problem is in the middle member *
* aL(M)*x[n-M], where M=(N-1)/2 is the middle of the vector of filters coefficients. The *
* final appearance of (10) and (11) is different depending on M. If M is even, then the *
* middle member will belong to (10); the number of the rest components of (10) (except the *
* middle member) will be equal to the number of components of (11). If M is odd, then the *
* middle component will belong to (11) and total number of components of (10) and (11) will *
* be the same. But (!) the problem is in appearance of the last components: in (10) it will *
* be aL(M-1)*(x[n-(M-1)] + x[n-(M+1)]); in (11) it will be aL(M)*x[n-M]. From the *
* mathematical viewpoint there is no problem. But the problem is in programming. We must *
* consider the above two cases by analysing the eveness of M and have to do branching. *
* *
* Because of downsampling we don't need to compute all samples of R0[n] and R1[n] but only *
* R0[2*k] and R1[2*k]. This and also using the formulae (4)-(11) will help us to save the *
* processing time. *
* *
* The items for the processing time saving are concluded below: *
* - Both, HPF and LPF can be calculated simultaneously for the price of one filter. This is *
* possible because of formulae (4) and (5). *
* - Because of the filters being symmetrical formulae (10) and (11) may be applied. *
* - Because of downsampling only each second sample is to be computed. *
* Additional possible feature that may save the processing power is *
* - using SIMD operations. *
* This feature is available, for example, in SHARC processor and allows us to process two *
* audiochannels simultaneously. To be able to exploit this feature one has arrange the *
* audiobuffers in a special way: the audiobuffers must be interleaved (see figure). *

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

Ответы


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

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

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

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

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


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru