Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Демодуляция QAM
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Страницы: 1, 2, 3, 4
petrov
Цитата(vadimuzzz @ Jul 27 2008, 11:32) *
ну, более-менее ясно. вот еще вопросик, на будущее. если делать 64-QAM, что менять потребуется?
делать TCM? где-то читал, что без TCM модуляции высокого порядка непрактичны.


Да не только для 64QAM, для любых созвездий используют TCM, окло 6 дБ неплохая прибавка к бюджету, ещё эквалайзер необходим обычно.
vadimuzzz
Цитата(petrov @ Jul 27 2008, 16:01) *
Да не только для 64QAM, для любых созвездий используют TCM, окло 6 дБ неплохая прибавка к бюджету, ещё эквалайзер необходим обычно.

почитал теорию про TCM, там вроде пишут, что эти децибелы достигаются асимптотически, при больших
отношениях С/Ш. а как на малых? а с эквалайзером вы не делали модельку в матлабе? посмотреть в действии охота wink.gif
_Anatoliy
Цитата(petrov @ Jul 27 2008, 12:01) *

Кстати,а как в демодуляторе QAM собирают символы в байты?При QAM64 нужно из 4-х 6-ти битных слов собрать 3 восьмибитных.Как это сделать правильно?
_4afc_
Цитата(_Anatoliy @ Jul 29 2008, 08:40) *
Кстати,а как в демодуляторе QAM собирают символы в байты?При QAM64 нужно из 4-х 6-ти битных слов собрать 3 восьмибитных.Как это сделать правильно?


Я использую перемежение. Т.е. Загоняем исходные данные в матрицу 6х8, транспонируем, считываем из матрицы 8х6. На передатчике обратная операция. Заодно и ошибок поменьше будет (при большой матрице и риде соломоне).
_Anatoliy
Цитата(_4afc_ @ Jul 29 2008, 09:26) *
Я использую перемежение. Т.е. Загоняем исходные данные в матрицу 6х8, транспонируем, считываем из матрицы 8х6. На передатчике обратная операция. Заодно и ошибок поменьше будет (при большой матрице и риде соломоне).


Спасибо!А можно немного подробнее,не понял каким образом происходит синхронизация данных.
des00
Цитата(vadimuzzz @ Jul 25 2008, 04:40) *
про ворота АЦП ясно, у меня так и работает. а как на малом сигнале быть? когда АРУ уже не тянет? как я выше написал?
ведь если нормализовать амплитуду на входе АЦП, то его динамический диапазон не используется, а у меня вся
схема на этом основана и усиление в тракте относительно небольшое.
а про восстановление фазы: а где посмотреть на схемы без управления решениями?


у меня в модеме стоит 3 ару: аналого-цифровая (с использованием усилителя в смесителе) и 2 в цифре + дополнительно адаптивный эквалайзер с обратной связью по решению перед блоком принятия решений.

Думаю что одним ару вы не обойдетесь %))
petrov
Цитата(vadimuzzz @ Jul 29 2008, 03:57) *
почитал теорию про TCM, там вроде пишут, что эти децибелы достигаются асимптотически, при больших
отношениях С/Ш. а как на малых? а с эквалайзером вы не делали модельку в матлабе? посмотреть в действии охота wink.gif


Всякие коды TCM есть и больше 6 дБ усиление достигается, например multidimensional TCM.

Здесь есть простые модели с эквалайзером:
http://electronix.ru/forum/index.php?showtopic=23652

Цитата(_Anatoliy @ Jul 29 2008, 10:34) *
А можно немного подробнее,не понял каким образом происходит синхронизация данных.


Практически всегда есть блочная синхронизация, например с помощью периодически передаваемой известной последовательности.
_Anatoliy
Цитата(petrov @ Jul 29 2008, 11:51) *
Практически всегда есть блочная синхронизация, например с помощью периодически передаваемой известной последовательности.

Спасибо!Это я знаю,но в DVB-C,например,нет такой периодически передаваемой известной последовательности,а демодулятор прекрасно склеивает символы...Как он это делает?Может по BER принимает решение,та фаза или нет?
petrov
Цитата(_Anatoliy @ Jul 29 2008, 13:05) *
Спасибо!Это я знаю,но в DVB-C,например,нет такой периодически передаваемой известной последовательности,а демодулятор прекрасно склеивает символы...Как он это делает?Может по BER принимает решение,та фаза или нет?


Не знаю как в DVB-C, в стандарте не оговорено?
_Anatoliy
Цитата(petrov @ Jul 29 2008, 12:23) *
Не знаю как в DVB-C, в стандарте не оговорено?


Не,там в основном о модуляторе рассказывается,видимо считают что как сделать демодулятор и так все знают smile.gif
А как Вам моя мысль о BER?
petrov
Цитата(_Anatoliy @ Jul 29 2008, 13:47) *
А как Вам моя мысль о BER?


Можно и так.
_Anatoliy
Цитата(petrov @ Jul 29 2008, 12:51) *
Можно и так.


Ясно,но всё ж думаю,что должно быть более элегантное решение,без внешней ОС.
alex_os
Цитата(_Anatoliy @ Jul 29 2008, 13:05) *
..но в DVB-C,например,нет такой периодически передаваемой известной последовательности,а демодулятор прекрасно склеивает символы...Как он это делает?Может по BER принимает решение,та фаза или нет?

Да в DVB-C все не просто а очень просто. Там есть синхробайт 0x47 в начале каждого кодового RS слова его и ищете, если нету - значит на правильно биты в байты сложили.
_Anatoliy
Цитата(alex_os @ Jul 29 2008, 13:21) *
Да в DVB-C все не просто а очень просто. Там есть синхробайт 0x47 в начале каждого кодового RS слова его и ищете, если нету - значит на правильно биты в байты сложили.

Мне казалось что одного байта маловато будет,но видимо Вы правы.
vadimuzzz
у меня в модеме синхропоследовательность передается через известные интервалы времени,
она используется для байтовой синхронизации и при фреймовой(для Рида-Соломона). по ней же
устраняется неоднозначность поворота фазы на n*90град.
_Anatoliy
Цитата(petrov @ Jul 29 2008, 12:51) *

Александр,уменьшая ошибку гетеродина(примерно до 1/3000) я обнаружил что на выходе scatter полезный сигнал сверху промодулирован частотой ошибки(при больших ошибках это не так явно видно).Амплитуда пульсации составляет примерно 1/50 от амплитуды максимального сигнала.Происходит ошибка компенсации,её можно как-то уменьшить?От чего зависит качество подавления?
petrov
Цитата(_Anatoliy @ Jul 30 2008, 18:54) *
Александр,уменьшая ошибку гетеродина(примерно до 1/3000) я обнаружил что на выходе scatter полезный сигнал сверху промодулирован частотой ошибки(при больших ошибках это не так явно видно).Амплитуда пульсации составляет примерно 1/50 от амплитуды максимального сигнала.Происходит ошибка компенсации,её можно как-то уменьшить?От чего зависит качество подавления?


Не понял о чём речь.
_Anatoliy
Цитата(petrov @ Jul 30 2008, 19:41) *
Не понял о чём речь.


На картинке сигнал на выходе scatter при ошибке частоты гетеродина 1/5000.Явно видна паразитная амплитудная модуляция разностной частотой гетеродинов.Об этом был мой вопрос.От чего зависит качество подавления?
Нажмите для просмотра прикрепленного файла
petrov
Цитата(_Anatoliy @ Jul 31 2008, 12:01) *
На картинке сигнал на выходе scatter при ошибке частоты гетеродина 1/5000.Явно видна паразитная амплитудная модуляция разностной частотой гетеродинов.Об этом был мой вопрос.От чего зависит качество подавления?


Что-то не вижу такого на своей модели.
_Anatoliy
Цитата(petrov @ Jul 31 2008, 11:52) *
Что-то не вижу такого на своей модели.

Картинка с Вашей оригинальной модели(Eb/No = 60dB,z-0,параметр farrow = -0,7),просто в вашей модели относительная амплитуда примерно в 8 раз меньше,сложнее заметить.Меня сбивает то, что этот узел я практически не изменял.Фильтры остались те же.Изменилась только схема выработки решения и гетеродин у меня выдаёт синус в диапазоне -255...+255(целочисленные).Увеличение разрядности гетеродина не помогает.
Нажмите для просмотра прикрепленного файла
petrov
Цитата(_Anatoliy @ Jul 31 2008, 13:33) *
Картинка с Вашей оригинальной модели(Eb/No = 60dB,z-0,параметр farrow = -0,7),просто в вашей модели относительная амплитуда примерно в 8 раз меньше,сложнее заметить.Меня сбивает то, что этот узел я практически не изменял.Фильтры остались те же.Изменилась только схема выработки решения и гетеродин у меня выдаёт синус в диапазоне -255...+255(целочисленные).Увеличение разрядности гетеродина не помогает.



Какая модель? Что за относительная амплитуда? Не вижу ничего подобного свзянного с разностной частотой. Поглядите на созвездие в моей модели, мизерные флуктуации есть из-за конечного времени усреднения в синхронизациях, но они ну ОЧЕНЬ незначительны и ни на что не влияют. Предполагаю что вы наблюдаете шум АРУ, вы внесли какие-то изменения, в результате изменился сквозной коэффициент передачи, отключите АРУ либо коэффициент уменьшайте.
_Anatoliy
Цитата(petrov @ Jul 31 2008, 13:13) *
Какая модель? Что за относительная амплитуда? Не вижу ничего подобного свзянного с разностной частотой. Поглядите на созвездие в моей модели, мизерные флуктуации есть из-за конечного времени усреднения в синхронизациях, но они ну ОЧЕНЬ незначительны и ни на что не влияют. Предполагаю что вы наблюдаете шум АРУ, вы внесли какие-то изменения, в результате изменился сквозной коэффициент передачи, отключите АРУ либо коэффициент уменьшайте.

qam_fb_gardner_symbol_farrow_sync_fb_phase_sync_agc_2007_06_18.mdl
Под относительной амплитудой я подразумевал отношение амплитуды паразитной модуляции к максимальной амплитуде полезного сигнала.
Вот сигнал при отключенном АРУ,синус стал ещё красивее.Синус имеет частоту равную разности частот гетеродинов модулятора и демодулятора.Может где то набежала фазовая ошибка?От фильтров может зависеть?
Нажмите для просмотра прикрепленного файла
petrov
Цитата(_Anatoliy @ Jul 31 2008, 14:43) *
qam_fb_gardner_symbol_farrow_sync_fb_phase_sync_agc_2007_06_18.mdl
Под относительной амплитудой я подразумевал отношение амплитуды паразитной модуляции к максимальной амплитуде полезного сигнала.
Вот сигнал при отключенном АРУ,синус стал ещё красивее.Синус имеет частоту равную разности частот гетеродинов модулятора и демодулятора.Может где то набежала фазовая ошибка?От фильтров может зависеть?


График не из моей модели. Я уже 10 раз запускал и не могу повторить такого в qam_fb_gardner_symbol_farrow_sync_fb_phase_sync_agc_2007_06_18.mdl. А созвездие как выглядит? Если точки по дугам колбасит значит фазовой синхронизации проблемы, опять же изменили где-то коэффициент передачи в ФАПЧ.
_Anatoliy
Цитата(petrov @ Jul 31 2008, 13:51) *
График не из моей модели. Я уже 10 раз запускал и не могу повторить такого в qam_fb_gardner_symbol_farrow_sync_fb_phase_sync_agc_2007_06_18.mdl. А созвездие как выглядит? Если точки по дугам колбасит значит фазовой синхронизации проблемы, опять же изменили где-то коэффициент передачи в ФАПЧ.

Конечно этот рисунок не из Вашей,это у меня что-то разбежалось...Странно,очень слабо,но этот эффект я вижу и в Вашей оригинальной программе.Может дело в разных версиях симулинка?
Созвездие целиком по дугам не бегает,если посмотреть траекторию отдельной звезды то она имеет форму круга вокруг некой точки(идеального центра).И так все звёзды как единое целое,поворотов созвездия нет.
Пробовал изменять коэффициенты в PHASE OFFSET LOOP FILTER,абсолютно никакого эффекта.Вернул назад.Завтра смогу выложить ролик с видом созвездия.А какая у Вас версия симулинка?
petrov
Цитата(_Anatoliy @ Jul 31 2008, 15:14) *
Конечно этот рисунок не из Вашей,это у меня что-то разбежалось...Странно,очень слабо,но этот эффект я вижу и в Вашей оригинальной программе.Может дело в разных версиях симулинка?
Созвездие целиком по дугам не бегает,если посмотреть траекторию отдельной звезды то она имеет форму круга вокруг некой точки(идеального центра).И так все звёзды как единое целое,поворотов созвездия нет.
Пробовал изменять коэффициенты в PHASE OFFSET LOOP FILTER,абсолютно никакого эффекта.Вернул назад.Завтра смогу выложить ролик с видом созвездия.А какая у Вас версия симулинка?

7 матлаб R14, думаю версия не при чём, посмотрел одну точку увеличенную многократно, просто шумком остаточным от синхронизаций размазана и всё никаких движений по окружности нету, ищите разницу в моделях.
_Anatoliy
Цитата(petrov @ Jul 31 2008, 14:25) *
7 матлаб R14, думаю версия не при чём, посмотрел одну точку увеличенную многократно, просто шумком остаточным от синхронизаций размазана и всё никаких движений по окружности нету, ищите разницу в моделях.


Ясно,спасибо!Сейчас только этим и занимаюсь.
Похоже что узел CARRIER FREQ ERROR здесь ни при чём,тут кроме фильтра и параметров нет никаких,а фильтр не влияет.С другой стороны - я Фарроу очень сильно перелопатил,может ли этот эффект быть из-за него?Жаль что не догадался раньше уменьшить ошибку частоты...
petrov
Цитата(_Anatoliy @ Jul 31 2008, 15:35) *
С другой стороны - я Фарроу очень сильно перелопатил,может ли этот эффект быть из-за него?


Да всё что угодно может быть :)
_Anatoliy
Цитата(petrov @ Jul 31 2008, 14:37) *
Да всё что угодно может быть smile.gif

Ясно,будем рыть дальше...
_Anatoliy
Таки с фарроу была проблема,разобрался,всё чирикает smile.gif
vadimuzzz
В продолжение недавней дискусии.
В общем переделал я свой модем с QPSK на 16-QAM. Вроде все заработало: восстановление тактовой, несущей, 2-й каскад АРУ (правда забарахлил первый, но это решаемо). Так как ресурсов ПЛИС осталось еще процентов 10, решил прикрутить эквалайзер. Тут требуется некоторая помощь.
2 petrov: я поизучал Вашу модель, и у меня возникли вопросы. В эквалайзере используются 2 детектора - слепой (Годарда) и управляемый решениями (коряво написал,ну ладно). Почему так сделано? Для ускорения сходимости (заметил, что модель довольно долго сходится по сравнению с аналогом без эквалайзера)? Какой длины имеет смысл делать эквалайзер (у Вас в модели 64 - я столько ресурсов не наскребу,наверное)?
petrov
Цитата(vadimuzzz @ Aug 12 2008, 18:52) *
Тут требуется некоторая помощь. 2 petrov: я поизучал Вашу модель, и у меня возникли вопросы. В эквалайзере используются 2 детектора - слепой (Годарда) и управляемый решениями (коряво написал,ну ладно). Почему так сделано? Для ускорения сходимости (заметил, что модель довольно долго сходится по сравнению с аналогом без эквалайзера)? Какой длины имеет смысл делать эквалайзер (у Вас в модели 64 - я столько ресурсов не наскребу,наверное)?


Годард используется для первоначальной настройки когда нету ещё правильных решений, он в принципе медленно настраивается, это может быть приемлемо для непрерывной передачи, просто время включения будет чуть дольше, управляемый решениями лучше и быстрее работает, особенно если решения правильные. Для пакетной Годард конечно не подходит, надо настраиваться по известной последовательности и т. п. Длина зависит от канала, длины импульсной характеристики прямого фильтра должно хватать чтобы pre-cursor ISI удалять, обратного чтобы post-cursor ISI. Решения в обратный фильтр надо правильные подавать, иначе размножение ошибок. Вообще считайте эту модель так за начальные представления какие-то, там может много чего нету, ройте литературу на эту тему.
vadimuzzz
Означает ли это, что слепой эквалайзер работает даже тогда, когда ФАПЧи еще не захватились?
У меня передача непрерывная, через фиксированные интервалы времени идет синхропосылка. Можно это тоже как-то использовать? Еще у меня фильтры SRRC на приемнике и передатчике, т.е. есть излишек полосы. Это значит, что эквалайзер должен иметь больше 1 отсчета на символ (например 2)? Читаю сейчас Прокиса, можете еще посоветовать литературу?
petrov
Цитата(vadimuzzz @ Aug 13 2008, 03:54) *
Означает ли это, что слепой эквалайзер работает даже тогда, когда ФАПЧи еще не захватились?
У меня передача непрерывная, через фиксированные интервалы времени идет синхропосылка. Можно это тоже как-то использовать? Еще у меня фильтры SRRC на приемнике и передатчике, т.е. есть излишек полосы. Это значит, что эквалайзер должен иметь больше 1 отсчета на символ (например 2)? Читаю сейчас Прокиса, можете еще посоветовать литературу?


Годарду не нужна фазовая синхронизация, а с символьной они как-то совместно настраиваются. Синхропосылку можно использовать так как она известна в качестве обучающей последовательности во время её передачи, например это позволит быстрее адаптироваться к изменениям канала, во время первоначальной настройки наверное это трудно будет сделать т к глазок закрыт и синхронизации по этой синхропосылке нету. Да лучше дробный эквалайзер использовать.

Посмотрите:
Adaptive Filter Theory - Haykin
Adaptive Filters - Farhang-Boroujeny
http://rapidshare.de/files/39623696/Adapti..._Diniz.pdf.html

Всякие ттонкости конечно только в статьях IEEE.
vadimuzzz
есть еще пара вопросов по модели
(qam_fb_symbol_sync_fb_phase_sync_agc_var_ch_delay_eq_2007_07_21.mdl)
не совсем понял как устроен блок LMS_Adaptive_Filter, точнее его части delay_line и Frame Status Conversion.
Это Вы так свертку записали (там дальше скалярное произведение)? Т.е. это обычный FIR-фильтр (прямая часть эквалайзера)? а где тогда обратная? или я туплю smile.gif
petrov
Цитата(vadimuzzz @ Aug 13 2008, 11:36) *
есть еще пара вопросов по модели
(qam_fb_symbol_sync_fb_phase_sync_agc_var_ch_delay_eq_2007_07_21.mdl)
не совсем понял как устроен блок LMS_Adaptive_Filter, точнее его части delay_line и Frame Status Conversion.
Это Вы так свертку записали (там дальше скалярное произведение)? Т.е. это обычный FIR-фильтр (прямая часть эквалайзера)? а где тогда обратная? или я туплю smile.gif


Совершенно верно это FIR фильтр - скалярное произведение векторов с выхода слинии задержки с отводами и коэффициентов. В этой модели простой линейный эквалайзер, DFE в других моделях смотрите.
vadimuzzz
еще вопросик: как я понял, все вычисления в комплексной форме идут. т.е. коэффициенты эквалайзера в каналах I и Q будут зависимы. это так?
petrov
Цитата(vadimuzzz @ Aug 13 2008, 13:44) *
еще вопросик: как я понял, все вычисления в комплексной форме идут. т.е. коэффициенты эквалайзера в каналах I и Q будут зависимы. это так?


Да фильтр комлексный, комплексные отсчёты в линии задержки, коэффициенты комплексные числа.
vadimuzzz
а где в модели задаются начальные коэффициенты эквалайзера?
еще не понял, зачем в эквалайзер exp(j*phi) идет комплексно-сопряженная, а в блоке подстройки фазы без сопряжения?
это conj(V_k) в обозначениях Прокиса? (11.5.33)
petrov
Цитата(vadimuzzz @ Aug 14 2008, 04:37) *
а где в модели задаются начальные коэффициенты эквалайзера?
еще не понял, зачем в эквалайзер exp(j*phi) идет комплексно-сопряженная, а в блоке подстройки фазы без сопряжения?
это conj(V_k) в обозначениях Прокиса? (11.5.33)


Начальные коэффициенты задаются в блоке coeff_update в задержке интегратора.

Домножение на сопряжённую фазу решений нужно потому что эквалайзер работает с сигналом до коррекции фазы и таким образом мы убираем изменения которые внесла фазовая синхронизация. Посмотрите рисунок 11.1.8 Выравнивание полосовых сигналов КАМ или ФМ, это тоже самое.

conj(V_k)- cопряжение в самом алгоритме наименьших квадратов есть это уже другое.
vadimuzzz
понятно. как раз эти рисунки смотрю и меня очень смущает 11.1.6. Какой-то подозрительный умножитель там справа.
по логике вроде там должен сумматор, нет? схема 11.1.8 мне не подходит, много переделывать, 11.1.6 - как у меня сейчас.
только sin(omega_c*t) у меня уже охвачен обратной связью по решению.
petrov
Цитата(vadimuzzz @ Aug 14 2008, 11:11) *
понятно. как раз эти рисунки смотрю и меня очень смущает 11.1.6. Какой-то подозрительный умножитель там справа.
по логике вроде там должен сумматор, нет?


Конечно же там ошибка.

Цитата(vadimuzzz @ Aug 14 2008, 11:11) *
схема 11.1.8 мне не подходит, много переделывать, 11.1.6 - как у меня сейчас.
только sin(omega_c*t) у меня уже охвачен обратной связью по решению.


Не надо делать как на 11.1.8, просто оттуда видно зачем обратно решения доворачиваем после фазовой синхронизации. Если фазовая синхронизаци была осуществлена до эквалайзера то никаких домножений на сопряжённую фазу не нужно.
vadimuzzz
а для чего перед фильтром в обратной связи стоит линия задержки? у Прокиса вроде такого нет.
petrov
Цитата(vadimuzzz @ Aug 14 2008, 17:17) *
а для чего перед фильтром в обратной связи стоит линия задержки? у Прокиса вроде такого нет.


Есть у Прокиса, у буфера первый отвод без задержки.
vadimuzzz
Цитата(petrov @ Aug 14 2008, 20:20) *
Есть у Прокиса, у буфера первый отвод без задержки.

буфер, это который в начале блока LMS_Adaptive_Filter?
petrov
Цитата(vadimuzzz @ Aug 14 2008, 17:35) *
буфер, это который в начале блока LMS_Adaptive_Filter?


А я не ту имел ввиду. В обратной связи если убрать то симулинк ругается на алгебраик луп, вроде это ошибка в самом симулинке, а может и моя ошибка где-то, но в любом случае эта задержка ни на что сильно не влияет.
vadimuzzz
так, теперь я запутался )
я вот об этом (см. скриншот):
получается, что в пересчете используется ошибка на _текущем_ такте и предыдущий продетектированный символ. непонятно.
petrov
Цитата(vadimuzzz @ Aug 15 2008, 04:10) *
так, теперь я запутался )
я вот об этом (см. скриншот):
получается, что в пересчете используется ошибка на _текущем_ такте и предыдущий продетектированный символ. непонятно.


А ну значит в первый раз правильно понял, да на текущем символьном интервале может компенсироваться интерференция от предыдущего продетектированного символа, у буфера в последующем блоке первый отвод без задержки, и без той задержки была бы бессмыслица, алгебраик луп.
vadimuzzz
Цитата(petrov @ Aug 15 2008, 14:14) *
А ну значит в первый раз правильно понял, да на текущем символьном интервале может компенсироваться интерференция от предыдущего продетектированного символа, у буфера в последующем блоке первый отвод без задержки, и без той задержки была бы бессмыслица, алгебраик луп.

хм.. про алг. луп я понял, но мне кажется что задержка должна стоять здесь:
petrov
Цитата(vadimuzzz @ Aug 15 2008, 11:38) *
хм.. про алг. луп я понял, но мне кажется что задержка должна стоять здесь:


Это другая задержка, она и стоит внутри интегратора.
vadimuzzz
я извиняюсь за назойливость, просто хочу свести концы с концами (в смысле теорию и практику).
рассмотрим линейную часть эквалайзера (скриншот).
как я понимаю, здесь коэффициенты пересчитываются по формуле : C(k+1)=C(k) + error(k)*conj(V(k)).
а в фильтре, что стоит в обратной связи идет пересчет C(k+1)=C(k) + error(k)*conj(I(k-1)).
или я неправильно понял?
у Прокиса формула пересчета на оба фильтра одинаковая. не могли бы вы в виде формул показать пересчет коэффициентов?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.