|
|
 |
Ответов
(1 - 48)
|
Nov 30 2006, 13:42
|

Частый гость
 
Группа: Свой
Сообщений: 185
Регистрация: 4-06-05
Из: Омск
Пользователь №: 5 726

|
Цитата(RadioWave @ Nov 30 2006, 14:57)  Подскажите, пожалуйста, быстрый алгоритм преобразования сигнала, представленного в квадратурных комплексных отсчетах, в вещественный сигнал. sqrt(I^2+Q^2) ?
|
|
|
|
|
Nov 30 2006, 17:38
|
Частый гость
 
Группа: Свой
Сообщений: 79
Регистрация: 24-11-04
Пользователь №: 1 220

|
Цитата(RadioWave @ Nov 30 2006, 11:57)  Подскажите, пожалуйста, быстрый алгоритм преобразования сигнала, представленного в квадратурных комплексных отсчетах, в вещественный сигнал. Вещественный сигнал это реальная часть от комплексной пары. Но обычно комплексный сигнал децимирован уже в два раза. Так что придется сначала повысить частоту дискретизации до исходного уровня
|
|
|
|
|
Dec 1 2006, 14:14
|

Местный
  
Группа: Свой
Сообщений: 275
Регистрация: 29-06-05
Пользователь №: 6 400

|
Что значит вещественный сигнал? Если речь о полосовом сигнале, то S(t) = cos(w*t)*I(t) + sin(w*t)*Q(t) Если речь об амплитуде, то, как верно заметил subver, A(t) = sqrt(I(t)^2+Q(t)^2) Что касается Цитата реальная часть от комплексной пары Действительная часть комплексного числа, представляющего квадратурную пару - это просто I(t) - синфазная компонента. Хотя если речь шла об аналитическом сигнале, тут прав _pegas_ - действительная часть - это сам сигнал, а мнимая - сопряжение по Гильберту.
--------------------
|
|
|
|
|
Dec 2 2006, 01:48
|
Частый гость
 
Группа: Свой
Сообщений: 79
Регистрация: 24-11-04
Пользователь №: 1 220

|
Цитата(Pathfinder @ Dec 1 2006, 14:14)  Что значит вещественный сигнал? Если речь о полосовом сигнале, то S(t) = cos(w*t)*I(t) + sin(w*t)*Q(t) Если речь об амплитуде, то, как верно заметил subver, A(t) = sqrt(I(t)^2+Q(t)^2) Что касается Цитата реальная часть от комплексной пары Действительная часть комплексного числа, представляющего квадратурную пару - это просто I(t) - синфазная компонента. Хотя если речь шла об аналитическом сигнале, тут прав _pegas_ - действительная часть - это сам сигнал, а мнимая - сопряжение по Гильберту. Комплексных представлений существует несколько вариантов. И комплексный ряд фурье можно причислить к таковому. Но полагаю речь шла о врменной области, где наиболее популярна аналитическая форма представления сигнала
|
|
|
|
|
Dec 2 2006, 14:54
|
Местный
  
Группа: Участник
Сообщений: 312
Регистрация: 21-10-05
Пользователь №: 9 952

|
Цитата(RadioWave @ Nov 30 2006, 11:57)  Подскажите, пожалуйста, быстрый алгоритм преобразования сигнала, представленного в квадратурных комплексных отсчетах, в вещественный сигнал. Вы поясните, как и из чего комплексный сигнал получен, и что Вы хотите иметь на выходе в качестве вещественного сигнала. Тогда Вам смогут подсказать. Распространённый вариант получения квадратур, через Digital Down Converter (DDC), как правило, выдает комплексный сигнал со спектром, сосредоточеным вокруг нулевой частоты. В этом случае самый быстрый алгоритм получения вещественного сигнала описан в мануале на HSP50016 (Intersil). Суть алгоритма - перенос комплексного сигнала на центральную частоту Fs/4 и взятие реальной части. Если всё это расписать, то проще не бывает. Но для этого, как уже упоминали, частота дискретизации должна быть в 2 раза больше полосы комплексного сигнала. Однако, этот алгоритм в некоторых случаях, для демодуляции SSB например, практически не пригоден, если полученный сигнал нужно прослушивать. В общем, есть разные варианты. Их выбор зависит от того, что Вы квадратурили, как квадратурили, что нужно иметь на выходе.
|
|
|
|
|
Dec 5 2006, 10:07
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 12-07-06
Пользователь №: 18 761

|
Цитата(729 @ Dec 2 2006, 14:54)  Цитата(RadioWave @ Nov 30 2006, 11:57)  Подскажите, пожалуйста, быстрый алгоритм преобразования сигнала, представленного в квадратурных комплексных отсчетах, в вещественный сигнал.
Вы поясните, как и из чего комплексный сигнал получен, и что Вы хотите иметь на выходе в качестве вещественного сигнала. Тогда Вам смогут подсказать. Распространённый вариант получения квадратур, через Digital Down Converter (DDC), как правило, выдает комплексный сигнал со спектром, сосредоточеным вокруг нулевой частоты. В этом случае самый быстрый алгоритм получения вещественного сигнала описан в мануале на HSP50016 (Intersil). Суть алгоритма - перенос комплексного сигнала на центральную частоту Fs/4 и взятие реальной части. Если всё это расписать, то проще не бывает. Но для этого, как уже упоминали, частота дискретизации должна быть в 2 раза больше полосы комплексного сигнала. Однако, этот алгоритм в некоторых случаях, для демодуляции SSB например, практически не пригоден, если полученный сигнал нужно прослушивать. В общем, есть разные варианты. Их выбор зависит от того, что Вы квадратурили, как квадратурили, что нужно иметь на выходе. Спасибо. Похоже, в том мануале, что Вы подсказали, именно то, что нужно.
|
|
|
|
|
Dec 18 2006, 14:46
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 12-07-06
Пользователь №: 18 761

|
В продолжение моей темы.
Помогите, пожалуйста разобраться с соответствием между passband и baseband представлениями сигнала. Как из одного можно получить другое? Применимо к моей задаче, проблема состоит в следующем. Пропуская фазоманипулированный вещественный сигнал через преобразователь Гильберта, я получаю реальную и мнимую части этого сигнала (сдвинутые на 90 градусов) в passband представлении. Далее, перемножая на несущую, получаю низкочастотную составляющую (видеосигнал). Теперь вопрос. Как, имея на входе комплексное представление сигнала в baseband представлении (после смешивания принятого сигнала с гетеродином приемника на промежуточной частоте), далее из него получить низкочастотную составляющую? При простом перемножении на несущую промежуточной частоты получается ерунда.
|
|
|
|
|
Dec 18 2006, 20:53
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(RadioWave @ Dec 18 2006, 11:46)  В продолжение моей темы.
Помогите, пожалуйста разобраться с соответствием между passband и baseband представлениями сигнала. Как из одного можно получить другое? Применимо к моей задаче, проблема состоит в следующем. Пропуская фазоманипулированный вещественный сигнал через преобразователь Гильберта, я получаю реальную и мнимую части этого сигнала (сдвинутые на 90 градусов) в passband представлении. Далее, перемножая на несущую, получаю низкочастотную составляющую (видеосигнал). Теперь вопрос. Как, имея на входе комплексное представление сигнала в baseband представлении (после смешивания принятого сигнала с гетеродином приемника на промежуточной частоте), далее из него получить низкочастотную составляющую? При простом перемножении на несущую промежуточной частоты получается ерунда. Как-то нечётко вы мысль выражаете, если посмотреть на второй абзац, а потом на третий. Как я понял, у вас есть квадратурные составляющие сигнала на некоторой частоте. Что вы хотите получить на выходе? Какая у вас модуляция?
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Dec 19 2006, 02:52
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(RadioWave @ Dec 18 2006, 14:46)  Теперь вопрос. Как, имея на входе комплексное представление сигнала в baseband представлении (после смешивания принятого сигнала с гетеродином приемника на промежуточной частоте), далее из него получить низкочастотную составляющую? При простом перемножении на несущую промежуточной частоты получается ерунда. Если моя телепатия мне подсказывает правильно, то надо умножать не просто на несущую ПЧ, а делать умножение на комплексную экспоненту с частотой несущей, тогда эта несущая будет снесена аккуратно в ноль и не появится никаких побочных компонентов. Да, и на выходе Вы естественно получите опять комплексный сигнал, т.е. квадратуры.
|
|
|
|
|
Dec 19 2006, 10:45
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 12-07-06
Пользователь №: 18 761

|
Может, я использую неправильно термины, поэтому попытаюсь уточнить. Под passband я подразумеваю полосовой сигнал, а под baseband - сигнал снесенный в ноль на промежуточной частоте.
На гетеродин множу не я, а приемник. Если это что-то даст, то в качестве приемника используется анализатор спектра Agilent. Там есть возможность сделать небольшую запись сигнала в IQ составляющих.
|
|
|
|
|
Apr 3 2009, 14:50
|
Частый гость
 
Группа: Свой
Сообщений: 80
Регистрация: 3-08-06
Пользователь №: 19 287

|
Цитата Распространённый вариант получения квадратур, через Digital Down Converter (DDC), как правило, выдает комплексный сигнал со спектром, сосредоточеным вокруг нулевой частоты. В этом случае самый быстрый алгоритм получения вещественного сигнала описан в мануале на HSP50016 (Intersil). Суть алгоритма - перенос комплексного сигнала на центральную частоту Fs/4 и взятие реальной части. Если всё это расписать, то проще не бывает. Прошу прощения, как говорится, смотрю в книгу, а вижу... Описанный случай - один-в-один как у меня, однако не могу я понять из написанного в мануале, что конкретно мне необходимо делать для преобразования. Есть массив комплексных значений после вышеуказанной обработки из n элементов, надо получить массив вещественных значений из n*2 элементов. Частота вещественного сигнала - 200 MSamples (спектр 0..100 МГц), соответственно комплексного - 100 MSamples (-50..50 МГц). Что я должен делать? Спасибо.
|
|
|
|
|
Apr 4 2009, 07:20
|
Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992

|
Цитата(Ykidia @ Apr 3 2009, 20:50)  Есть массив комплексных значений после вышеуказанной обработки из n элементов, надо получить массив вещественных значений из n*2 элементов из n элементов не получить 2n элементов. имхо: s(t)-физический сигнал для переноса на несущую необходимо выполнить операцию: s_hi_freq(t)=[s(t)+j*HILBERT(s(t))]*exp(j*Wnes) в идеале получается только реальная составляющая без боковых полос для переноса на ноль s_lo_freq= s_hi_freq(t)*exp(-j*(Wnes+delta))= I+Q, получим т.наз. комплексную огибающую сигнала s_hi_freq(t), спектр такого колебания совпадает со спектром s(t) с точностю delta в итоге если надо получить ту же частоту с точн до 0, то исп фапч и соотв сигнал (пилот) если важна ампл., то sqrt(i^+q^2) если сдвиг на delta не принципиален - можно взять или i или q (без разницы)
|
|
|
|
|
Apr 4 2009, 11:21
|

山伏
    
Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294

|
Цитата(Ykidia @ Apr 3 2009, 17:50)  Есть массив комплексных значений после вышеуказанной обработки из n элементов какой именно обработки? Выше указали их много... Цитата(Ykidia @ Apr 3 2009, 17:50)  ...надо получить массив вещественных значений из n*2 элементов. Частота вещественного сигнала - 200 MSamples (спектр 0..100 МГц), соответственно комплексного - 100 MSamples (-50..50 МГц). Что я должен делать? я делал бы так. есть n*I, n*Q временных отсчетов. 1) cFFT //получили n*I n*Q в частотной области2) тупо сдвинули все частотные отсчеты в сторону положительных на 50 MHz. Имеем только положительные отсчеты спектра. 3) дополняем отрицательную часть спектра до 2*n элементов в соответствии с правилами спектра Фурье для действительных последовательностей. Вещественная ось четная симметрия([i]=[N-i]). Мнимая - нечетная симметрия([i]=-[N-i]), "0"-й и "N/2" отсчеты пусты т.е. "0"... 4) RealRFFT //обратное для действительных чисел.получаем действительную временнУю последовательность для 2*n действительных отсчетов. Этот блочный алгоритм вполне работоспособен для Real Time. Цитата(Ykidia @ Apr 3 2009, 17:50)  Спасибо. неее...давайте 50$... P.S.: временнОй метод с преобразованием Гильберта тоже проканает, при отвратительном результате для "0"-й частоты. Просто мне частотные методы "ближе"...
--------------------
Нас помнят пока мы мешаем другим... //-------------------------------------------------------- Хороший блатной - мертвый... //-------------------------------------------------------- Нет старик, это те дроиды которых я ищу...
|
|
|
|
|
Apr 4 2009, 13:08
|
Местный
  
Группа: Участник
Сообщений: 312
Регистрация: 21-10-05
Пользователь №: 9 952

|
Цитата(Ykidia @ Apr 3 2009, 18:50)  Прошу прощения, как говорится, смотрю в книгу, а вижу... Описанный случай - один-в-один как у меня, однако не могу я понять из написанного в мануале, что конкретно мне необходимо делать для преобразования. Есть массив комплексных значений после вышеуказанной обработки из n элементов, надо получить массив вещественных значений из n*2 элементов. Частота вещественного сигнала - 200 MSamples (спектр 0..100 МГц), соответственно комплексного - 100 MSamples (-50..50 МГц). Что я должен делать? Спасибо. Сначала надо увеличить частоту дискретизации вдвое. Самый честный способ - вставить между отсчетами сигнала ноль (было x(1), x(2), x(3), ..., стало x(1), 0, x(2), 0, x(3), 0, ...,). Затем обе квадратуры надо пропустить через ФНЧ с полосой пропускания Fs (Fs - частота дискретизации до вставления нулей). Понятен ли этот момент? Без понимания сего дальше будет трудно. Если не совсем понятен, то напишите.
Сообщение отредактировал 729 - Apr 4 2009, 13:37
|
|
|
|
|
Apr 6 2009, 01:32
|
Частый гость
 
Группа: Свой
Сообщений: 80
Регистрация: 3-08-06
Пользователь №: 19 287

|
Цитата какой именно обработки? Выше указали их много... Я имел в виде эту обработку: Цитата Распространённый вариант получения квадратур, через Digital Down Converter (DDC), как правило, выдает комплексный сигнал со спектром, сосредоточеным вокруг нулевой частоты. В этом случае самый быстрый алгоритм получения вещественного сигнала описан в мануале на HSP50016 (Intersil). Суть алгоритма - перенос комплексного сигнала на центральную частоту Fs/4 и взятие реальной части. Если всё это расписать, то проще не бывает Именно о ней шла речь с отсылом к мануалу HSP50016, в котором раздел Quadrature to real мне как следует и непонятен. DRUID3Вариант сделать это через FFT туда-сюда, к сожалению, мне не подходит из-за специфично написанного приложения, в котором я ковыряюсь, чтобы добавить в него поддержку комплексного сигнала с платы АЦП. 729Цитата Затем обе квадратуры надо пропустить через ФНЧ с полосой пропускания Fs (Fs - частота дискретизации до вставления нулей). Понятен ли этот момент? Без понимания сего дальше будет трудно. Если не совсем понятен, то напишите. Извиняюсь, но и в самом деле не совсем понятен...
|
|
|
|
|
Apr 6 2009, 15:23
|
Местный
  
Группа: Участник
Сообщений: 312
Регистрация: 21-10-05
Пользователь №: 9 952

|
Цитата(Ykidia @ Apr 6 2009, 05:32)  729
Извиняюсь, но и в самом деле не совсем понятен... После вставления нулей удваивается частота дискретизации. В частотной области получится повторение исходного спектра на частотах Fs-2Fs (Fs частота дискретизации до вставления нулей), то есть был просто спектр в полосе 0-Fs, стало два одинаковых спектра в полосах 0-Fs и Fs-2Fs (с точностью до множителя). Теперь надо то, что на интервале Fs/2-3Fs/2, отфильтровать. Если не совсем понятно, то спрашивайте.
Сообщение отредактировал 729 - Apr 6 2009, 15:25
|
|
|
|
|
Apr 6 2009, 18:58
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 20-09-08
Пользователь №: 40 352

|
Пример в помощь  (обсуждаемый алгоритм на языке матлаба):
C2R_signal_convert.rar ( 529 байт )
Кол-во скачиваний: 200Правда в моем примере фильтр взят КИХ на 512 отсчетов произвольно, и при фильтрации он фильтрует все отсчеты, в том числе и нулевые входные, так как используется стандартная функция фильтрации матлаба. Если его заменить на фильтр, который не будет использовать при фильтрации нулевые входные отсчеты, а также подобрать длину его ИХ, исходя из требований к допустимому уровню наложения спектров, то можно получить дополнительный выигрыш производительности. Почему это работает: Если есть комплексная огибающая c(t)=I(t)+jQ(t), из нее можно получить реальный сигнал следующей операцией: g(t)=real{c(t)*exp(j*2*pi*fc*t)}= =real{I(t)*cos(2*pi*fc*t)+jQ(t)*cos(2*pi*fc*t)+jI(t)*sin(2*pi*fc*t)+j*j*Q( t)*sin(2*pi*fc*t)}= =I(t)*cos(2*pi*fc*t)-Q(t)*sin(2*pi*fc*t) В нашем случае fc=fs/4, при этом cos(2*pi*fc*t) принимает значения 1 0 -1 0 и далее повторяется, а sin(2*pi*fc*t) принимает значения 0 1 0 -1. Вот и получается что выходной сигнал равен [I(0) -Q(1) -I(2) Q(3) ...] и так далее. А повышение частоты дискретизации и фильтрация нужны для того чтобы избежать наложения спектра после умножения на комплексную экспоненту и перехода к реальному сигналу. Отредактировал, "описки" поправил вроде все...
Сообщение отредактировал leksa - Apr 6 2009, 19:39
--------------------
A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away (Antoine de Saint-Exupery)
|
|
|
|
|
Apr 8 2009, 15:59
|
Частый гость
 
Группа: Свой
Сообщений: 80
Регистрация: 3-08-06
Пользователь №: 19 287

|
С комплексными числами работаю при отображении спектра и вычислении всяких параметров. А для отображения на осциллоскопе хотелось бы иметь вещественные отсчеты (т.к. программа изначально была разработана для вещественного сигнала, потому и хочется при работе с платой АЦП, выдающей комплексные отсчеты, рисовать осциллоскоп, как и раньше). Цитата Вот и получается что выходной сигнал равен [I(0) -Q(1) -I(2) Q(3) ...] и так далее. Т.е. вещественных отсчетов получается не в 2 раза больше, а столько же, сколько и комплексных? Я думал, что, если у меня 32-битные комплексные отсчеты (по 16 бит на I и Q), то итоговая вещественная последовательность по 16 бит займет столько же байт? Где я неправильно понял?
|
|
|
|
|
Apr 8 2009, 16:06
|

山伏
    
Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294

|
Цитата(=GM= @ Apr 6 2009, 20:24)  Не имеем. Отсчёты тупо вдвинутся с отрицательной стороны(:-). ???  куда если массив становится в 2-а раза больше? Цитата(Ykidia @ Apr 8 2009, 18:59)  С комплексными числами работаю при отображении спектра и вычислении всяких параметров. А для отображения на осциллоскопе хотелось бы иметь вещественные отсчеты (т.к. программа изначально была разработана для вещественного сигнала, потому и хочется при работе с платой АЦП, выдающей комплексные отсчеты, рисовать осциллоскоп, как и раньше). Раз Вы выводите спектр - то уже работаете по-блочно. Что мешает применить предложенный мной способ!? Цитата(Ykidia @ Apr 8 2009, 18:59)  Т.е. вещественных отсчетов получается не в 2 раза больше, а столько же, сколько и комплексных? Я думал, что, если у меня 32-битные комплексные отсчеты (по 16 бит на I и Q), то итоговая вещественная последовательность по 16 бит займет столько же байт? Где я неправильно понял? все верно Вы поняли...
--------------------
Нас помнят пока мы мешаем другим... //-------------------------------------------------------- Хороший блатной - мертвый... //-------------------------------------------------------- Нет старик, это те дроиды которых я ищу...
|
|
|
|
|
Apr 8 2009, 16:28
|
Частый гость
 
Группа: Свой
Сообщений: 80
Регистрация: 3-08-06
Пользователь №: 19 287

|
Цитата все верно Вы поняли... Я про вышеописанное: Цитата Вот и получается что выходной сигнал равен [I(0) -Q(1) -I(2) Q(3) ...] и так далее. Тут получается в 2 раза меньше байт? Цитата Раз Вы выводите спектр - то уже работаете по-блочно. Что мешает применить предложенный мной способ!? Если Вы про FFT туда-сюда, то дело вот в чем. В приложении сделано так, что перед тем как делается вывод спектра, ожидается вывод осциллоскопа :-D, а предложенный Вами способ предполагает наоборот, значит, мне надо копаться и дергать за веревочки, а там где я работаю едва ли понимают, что такое копание в чужом коде и сколько на это может требоваться времени. Тем более нежелательно в результате дополнительного копания что-нибудь сломать, а это иногда бывает  , тогда приходится чинить и т.д.
|
|
|
|
|
Apr 8 2009, 17:08
|

山伏
    
Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294

|
Цитата(Ykidia @ Apr 8 2009, 19:28)  Я про вышеописанное: ... Тут получается в 2 раза меньше байт? Нужно думать не про байты, а про принцип. Сдвигу в частотной области соответствует умножение на комплексную экспоненту, leksa чертовски прав!!! Это кстати принцип написания алгоритма RealFFT, может кто не знал  . Но двигать то надо на Fs/2. Потому откуда там у него "0"-ли я тоже не догнал. Мож он перепутал со случаем когда частота дискретизации в 4-е раза выше макимальной частоты сигнала? Цитата(Serg76 @ Apr 8 2009, 19:52)  С комплексным сигналом однозначно работать лучше ...когда ты мастер рукопашного боя, то тебе легко убивать и табуреткой  ...
--------------------
Нас помнят пока мы мешаем другим... //-------------------------------------------------------- Хороший блатной - мертвый... //-------------------------------------------------------- Нет старик, это те дроиды которых я ищу...
|
|
|
|
|
Apr 8 2009, 18:10
|
Частый гость
 
Группа: Свой
Сообщений: 80
Регистрация: 3-08-06
Пользователь №: 19 287

|
Цитата Нужно думать не про байты, а про принцип Про байты я говорил для внесения однозначности  Цитата Но двигать то надо на Fs/2. Потому откуда там у него "0"-ли я тоже не догнал. Мож он перепутал со случаем когда частота дискретизации в 4-е раза выше макимальной частоты сигнала? АЦП оцифровывает на частоте 200 МГц (Fs), т.е. имеем спектр от 0 до 100 МГц (Fs/2). Далее оцифрованный сигнал прогоняется через DDC, где все добро сдвигается на -50 МГц (-Fs/4), делается еще кое-какая обработка, так что имеем спектр от -50 до 50 МГц. Комплексные отсчеты выдаются уже в PC, где через драйвер приложение получает эти комплексные данные в виде I1,Q1,I2,Q2,I3,Q3..., разрядность каждого I и Q - 16 бит, вместе они составляют 32 бита (а на старой плате АЦП были вещественные отсчеты 16 бит). Приложение, кроме всего прочего, рисует осциллоскоп и спектр. Со спектром все легко - отFFTил полученные данные, вычислил power на каждую полосу и нарисовал. С осциллоскопом аналогично, в принципе сейчас одним цветом рисуется вещественная часть, а другим - мнимая. Но это временная "затычка", хочется отображать полноценный вещественный сигнал, восстановленный из комплексного. Для этого нужно сдвинуть спектр сигнала обратно на +50 МГц (Fs/4) и отфильтровать. Хорошо, положим на байты, они и в самом деле не при чем, будем считать элементами по 16 бит. Возьмем 8 отсчетов. Как я понял из объяснений выше: - имеем 16 элементов: I0, Q0, I1, Q1, I2, Q2, I3, Q3, I4, Q4, I5, Q5, I6, Q6, I7, Q7; - искусственно повышаем частоту дискретизации: I0, Q0, 0, 0, I1, Q1, 0, 0, I2, Q2, 0, 0, I3, Q3, 0, 0, I4, Q4, 0, 0, I5, Q5, 0, 0, I6, Q6, 0, 0, I7, Q7, 0, 0; - далее что-то делаем (умножаем на комплексную экспоненту) и получаем итого тоже 16 элементов: R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15; - а по описанному выше - итого лишь 8 элементов? R0=I0, R1=-Q1, R2=-I2, R3=Q3, R4=I4, R5=-Q5, R6=-I6, R7=Q7. Поясните, пожалуйста, где противоречие. Понимаю, что надоел уже своей тупизной, но подробно спросить мне вроде как не у кого - в компании либо все заняты, либо только один человек может объяснить, но не адаптированно для идиотов (т.е. для меня), а на языке, предполагающим мои некоторые знания, которых у меня нет :D
|
|
|
|
|
Apr 8 2009, 18:36
|
Местный
  
Группа: Участник
Сообщений: 312
Регистрация: 21-10-05
Пользователь №: 9 952

|
Цитата(Ykidia @ Apr 8 2009, 22:10)  ....., делается еще кое-какая обработка, так что имеем спектр от -50 до 50 МГц. Очень важный момент - что за обработка делается после сдвига на -50МГц? И еще вопрос - у Вас на выходе DDC какая частота следования отсчетов? Цитата(Ykidia @ Apr 8 2009, 22:10)  Хорошо, положим на байты, они и в самом деле не при чем, будем считать элементами по 16 бит. Возьмем 8 отсчетов. Как я понял из объяснений выше: - имеем 16 элементов: I0, Q0, I1, Q1, I2, Q2, I3, Q3, I4, Q4, I5, Q5, I6, Q6, I7, Q7; - искусственно повышаем частоту дискретизации: I0, Q0, 0, 0, I1, Q1, 0, 0, I2, Q2, 0, 0, I3, Q3, 0, 0, I4, Q4, 0, 0, I5, Q5, 0, 0, I6, Q6, 0, 0, I7, Q7, 0, 0; ... и получаем уже другую нумерацию отсчетов - их уже 16 комплексных. Вот из них-то и получаются R-итые. То есть: I0, Q0, 0, 0, I1, Q1, 0, 0, I2, Q2, 0, 0, I3, Q3, 0, 0, I4, Q4, 0, 0, I5, Q5, 0, 0, I6, Q6, 0, 0, I7, Q7, 0, 0; после фильтрации превращается в некую i0, q0, i1, q1, i2, q2, ..., i14, q14, i15, q15. После умножения на (новую) Fs/4 получим: R0=i0, R1=-q1, R2=-i2, R3=q3, R4=i4, R5=-q5, R6=-i6, R7=q7, ... Вот и ответ на вопрос про число байтов там и там - число байтов не изменится (Вы же информацию не потеряли и новой не добавили, с чего им измениться).
|
|
|
|
|
Apr 8 2009, 20:09
|

山伏
    
Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294

|
Цитата(Ykidia @ Apr 8 2009, 21:10)  АЦП оцифровывает на частоте 200 МГц (Fs), т.е. имеем спектр от 0 до 100 МГц (Fs/2). отлично... Цитата(Ykidia @ Apr 8 2009, 21:10)  Далее оцифрованный сигнал прогоняется через DDC, где все добро сдвигается на -50 МГц (-Fs/4) здесь у нас разная траковка. Я имел ввиду Fs для комплексного сигнала. 2*Fsc = Fsr; Цитата(Ykidia @ Apr 8 2009, 21:10)  ... делается еще кое-какая обработка, так что имеем спектр от -50 до 50 МГц. Ну и отлично, обратно - точно так же! DDC - это ни что иное как комплексная экспонента.  Никакого принудительного повышения частоты "0"-ми не должно быть. Просто I и Q отсчеты должны идти по 2-а одинаковых значения подряд - ведь такой сигнал продецимированный обратно в любом порядке должен остаЦЦо прежним. Мы не меняем форму его спектра(функцию) а лишь сужаем его(уменьшаем скорость изменения функции относительно частоты дискретизации). Затем умножение на экспоненту - и результат в той же(проинтерполированной частоттой дискретизации). Итого, было по 8 I и Q отсчетов(Fs по 100MHz). Проинтерполировали - стало 16(Fs по 100MHz). Домножили на экспоненту и сложили каналы так и осталось 16(Fs по 100MHz). Но это общий случай. Если учесть, что сама тригонометрия для sin(Fs/4) и cos(Fs/4) принимает ряд значений 0, 1, 0, -1 и 1, 0, -1, 0 то можно не интерполировать и не надо слаживать! Просто вставлять I и Q отсчеты друг между дружкой(но про то, что именно " -1" не забывать). Вот хороший иллюстративный материал для раздумий... Цитата(Ykidia @ Apr 8 2009, 21:10)  ...либо только один человек может объяснить, но не адаптированно для идиотов (т.е. для меня), а на языке, предполагающим мои некоторые знания, которых у меня нет :D Кто не умеет доходчиово объяснить - не владеет знанием... Ведь только объяснив кому-то что-то раз 10-12 начинаешь понимать сам  ...
--------------------
Нас помнят пока мы мешаем другим... //-------------------------------------------------------- Хороший блатной - мертвый... //-------------------------------------------------------- Нет старик, это те дроиды которых я ищу...
|
|
|
|
|
Apr 8 2009, 22:26
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 20-09-08
Пользователь №: 40 352

|
Цитата(Ykidia @ Apr 8 2009, 22:10)  Про байты я говорил для внесения однозначности  АЦП оцифровывает на частоте 200 МГц (Fs), т.е. имеем спектр от 0 до 100 МГц (Fs/2). Далее оцифрованный сигнал прогоняется через DDC, где все добро сдвигается на -50 МГц (-Fs/4), делается еще кое-какая обработка, так что имеем спектр от -50 до 50 МГц. Комплексные отсчеты выдаются уже в PC, где через драйвер приложение получает эти комплексные данные в виде I1,Q1,I2,Q2,I3,Q3..., разрядность каждого I и Q - 16 бит, вместе они составляют 32 бита (а на старой плате АЦП были вещественные отсчеты 16 бит). Приложение, кроме всего прочего, рисует осциллоскоп и спектр. Со спектром все легко - отFFTил полученные данные, вычислил power на каждую полосу и нарисовал. С осциллоскопом аналогично, в принципе сейчас одним цветом рисуется вещественная часть, а другим - мнимая. Но это временная "затычка", хочется отображать полноценный вещественный сигнал, восстановленный из комплексного. Для этого нужно сдвинуть спектр сигнала обратно на +50 МГц (Fs/4) и отфильтровать. Хорошо, положим на байты, они и в самом деле не при чем, будем считать элементами по 16 бит. Возьмем 8 отсчетов. Как я понял из объяснений выше: - имеем 16 элементов: I0, Q0, I1, Q1, I2, Q2, I3, Q3, I4, Q4, I5, Q5, I6, Q6, I7, Q7; - искусственно повышаем частоту дискретизации: I0, Q0, 0, 0, I1, Q1, 0, 0, I2, Q2, 0, 0, I3, Q3, 0, 0, I4, Q4, 0, 0, I5, Q5, 0, 0, I6, Q6, 0, 0, I7, Q7, 0, 0; - далее что-то делаем (умножаем на комплексную экспоненту) и получаем итого тоже 16 элементов: R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15; - а по описанному выше - итого лишь 8 элементов? R0=I0, R1=-Q1, R2=-I2, R3=Q3, R4=I4, R5=-Q5, R6=-I6, R7=Q7. Поясните, пожалуйста, где противоречие. Понимаю, что надоел уже своей тупизной, но подробно спросить мне вроде как не у кого - в компании либо все заняты, либо только один человек может объяснить, но не адаптированно для идиотов (т.е. для меня), а на языке, предполагающим мои некоторые знания, которых у меня нет :D Извините, наверно я в своем предыдущем посте вас запутал. Когда я писал про комплексный сигнал I+jQ, я говорил о сигнале после добавления нулей и фильтрации, как вам 729 уже пояснил. Смотрите предыдущий пост 729, лучше не объяснить: Цитата .. и получаем уже другую нумерацию отсчетов - их уже 16 комплексных. Вот из них-то и получаются R-итые. То есть: I0, Q0, 0, 0, I1, Q1, 0, 0, I2, Q2, 0, 0, I3, Q3, 0, 0, I4, Q4, 0, 0, I5, Q5, 0, 0, I6, Q6, 0, 0, I7, Q7, 0, 0; после фильтрации превращается в некую i0, q0, i1, q1, i2, q2, ..., i14, q14, i15, q15. После умножения на (новую) Fs/4 получим: R0=i0, R1=-q1, R2=-i2, R3=q3, R4=i4, R5=-q5, R6=-i6, R7=q7, ... Вот и ответ на вопрос про число байтов там и там - число байтов не изменится (Вы же информацию не потеряли и новой не добавили, с чего им измениться). Еще можете посмотреть приведенный мной выше пример, даже если на матлабе не пишете, его можно читать просто как псевдокод, чтобы понять, как это работает. Немного "веселых картинок" на тему: спектр исходного комплексного сигнала:
спектр сигнала после вставки нулей, до фильтрации
спектр сигнала после фильтрации
спектр после умножения на экспоненту и взятия реальной части
и что будет, если частоту дискретизации не повышать (нули то есть не вставлять, не фильтровать), а просто перейти к реальному сигналу (то есть умножить на экспоненту и взять реальную часть)
Цитата Никакого принудительного повышения частоты "0"-ми не должно быть. Просто I и Q отсчеты должны идти по 2-а одинаковых значения подряд - ведь такой сигнал продецимированный обратно в любом порядке должен остаЦЦо прежним. Мы не меняем форму его спектра(функцию) а лишь сужаем его(уменьшаем скорость изменения функции относительно частоты дискретизации) Если я правильно понял, то вы предлагаете из сигнала типа [i1 i2 i3 i4...] сделать сигнал [i1 i1 i2 i2 i3 i3 i4 i4...], как альтернативу вставки нулей? Но такая операция это тоже самое, что и вставить нули, а потом пропустить через КИХ ФНЧ с ИХ равной h=[1 1]. Но у такого фильтра очень плохая АЧХ. Вот как будет выглядеть спектр после фильтрации этим фильтром
потом все что видно по бокам завернется в полосу полезного сигнала при переходе к реальному сигналу. Для комплексного сигнала из двух синусов
получится реальный сигнал с еще двумя "завернувшимися" синусами
с уважением, leksa
Сообщение отредактировал leksa - Apr 8 2009, 22:30
--------------------
A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away (Antoine de Saint-Exupery)
|
|
|
|
|
Apr 9 2009, 07:05
|

Частый гость
 
Группа: Свой
Сообщений: 86
Регистрация: 22-03-07
Из: Санкт-Петербург
Пользователь №: 26 406

|
Цитата(Ykidia @ Apr 8 2009, 19:59)  С комплексными числами работаю при отображении спектра и вычислении всяких параметров. А для отображения на осциллоскопе хотелось бы иметь вещественные отсчеты (т.к. программа изначально была разработана для вещественного сигнала, потому и хочется при работе с платой АЦП, выдающей комплексные отсчеты, рисовать осциллоскоп, как и раньше). Так выводите два канала - до кучи и наглядней будет.
|
|
|
|
|
Apr 9 2009, 12:30
|
Частый гость
 
Группа: Свой
Сообщений: 80
Регистрация: 3-08-06
Пользователь №: 19 287

|
729leksaDRUID3За терпение и подробные объяснения очень благодарен. Теперь все "сошлось", да еще и с наглядными картинками  . Хотелось бы прояснить последний (надеюсь) вопрос. Цитата ... и получаем уже другую нумерацию отсчетов - их уже 16 комплексных. Вот из них-то и получаются R-итые. То есть: I0, Q0, 0, 0, I1, Q1, 0, 0, I2, Q2, 0, 0, I3, Q3, 0, 0, I4, Q4, 0, 0, I5, Q5, 0, 0, I6, Q6, 0, 0, I7, Q7, 0, 0; после фильтрации превращается в некую i0, q0, i1, q1, i2, q2, ..., i14, q14, i15, q15. После умножения на (новую) Fs/4 получим: R0=i0, R1=-q1, R2=-i2, R3=q3, R4=i4, R5=-q5, R6=-i6, R7=q7, ... Вот и ответ на вопрос про число байтов там и там - число байтов не изменится (Вы же информацию не потеряли и новой не добавили, с чего им измениться). Что за фильтрация? Как ее произвести? Я так понимаю, она нужна, чтобы превратить вставки из нулей во что-то более подходящее в контексте имеющегося сигнала? qxovНаглядно - может быть, и это пока. Когда появится еще один или более каналов с комплексным выходом, и у каждого надо будет выделять реальную и мнимую части разными цветами, - тогда зарябит в глазах  . Если честно, у меня уже рябит, только от одного канала с двумя графиками.
|
|
|
|
|
Apr 9 2009, 15:30
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 20-09-08
Пользователь №: 40 352

|
Цитата(Ykidia @ Apr 9 2009, 16:30)  Что за фильтрация? Как ее произвести? Я так понимаю, она нужна, чтобы превратить вставки из нулей во что-то более подходящее в контексте имеющегося сигнала? Если рассматривать во временной области, то да, можно сказать что этот фильтр занимается интерполяцией, то есть те нулевые отсчеты, которые были добавлены в сигнал, после фильтрации станут интерполированными значениями соседних ненулевых отсчетов. Проще говоря сигнал после фильтра будет гладким, уже без нулей. Но если рассматривать только с такой точки зрения то сложно понять как же выбрать характеристику фильтра. Поэтому, лучше рассматривать с точки зрения в частотной области. А с точки зрения частотной области после вставки нулей, но до фильтрации в спектре сигнала появилась копия спектра полезного сигнала, вот эти перечеркнутые составляющие по бокам:
Наш фильтр должен эти ложные боковые составляющие "задавить", иначе после взятия реальной части, они завернутся в полосу полезного сигнала, а полезный сигнал сохранить. Полезный сигнал лежит в полосе от -Fs/4 до Fs/4, где Fs - частота дискретизации после добавления нулей, в вашем случае, если не ошибаюсь, Fs будет 200 МГц. То есть АЧХ фильтра должна давить все частоты за пределами полосы от -Fs/4 до Fs/4, и пропускать частоты в этой полосе от -Fs/4 до Fs/4. Примерно АЧХ я нарисовал красной линией. А ФЧХ лучше чтобы была линейной. Тогда нам подойдет ФНЧ с конечной ИХ, то есть нерекурсивный, и симметричными коэффициентами(тогда ФЧХ будет линейна), и частотой среза равной Fs/4. В матлабе такой фильтр можно рассчитать командой b = fir1(n,Wn), где n - длина ИХ, Wn нормированная частота среза фильтра задается от 0 до 1, причем единица нормирована к Fs/2. Так как нам нужен фильтр со срезом Fs/4, то нужно вызвать команду так b = fir1(n,0.5), а n чем больше возьмете тем лучше фильтр будет давить ненужный частоты, но тем больше вычисления при работе фильтра. В b матлаб вам вернет значения коэффициентов КИХ фильтра. Если матлаб нет, то рассчитать КИХ ФНЧ в любом инструменте расчета симметричных КИХ фильтров, какой есть под рукой. В приципе и КИХ не обязательно, можно и БИХ, главное чтобы это был ФНЧ со срезом Fs/4. Как-то так. Осталось только одно замечание. У нас ведь на входе фильтра каждый второй отсчет нулевой, поэтому если взять стандартную реализацию КИХ фильтра, то он будет умножать в ходе вычислений эти нули на свои отсчеты, получившиеся умножением нули складывать с ненулевыми слагаемыми, короче делать лишнюю работу. Но результат будет правильный, так что если время вычислений фильтра не критично, то на это можно и "забить". А если хочется эти лишние вычисления не делать, то надо использовать полифазный многоскоростной фильтр. Реализации таких фильтров сейчас есть готовые во многих библиотеках для обработки сигналов. О принципе его работы я вряд ли смогу здесь коротко объяснить, так что лучше почитать литературу, коей на эту тему немало.
Сообщение отредактировал leksa - Apr 9 2009, 15:35
--------------------
A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away (Antoine de Saint-Exupery)
|
|
|
|
|
Sep 9 2009, 09:19
|
Группа: Участник
Сообщений: 7
Регистрация: 17-07-09
Из: Nьrnberg
Пользователь №: 51 349

|
i'm not sure that my question matches this topic, but: Hilbert tansformation, FPGA. i- and q-components are coming to the input separately. As far as i understood i should apply Hilbert filter and delay just to real component. What about q-component? Here is my Matlab simulation:
L = 26; h = firpm(L,[0.1 0.9],[1 1],'Hilbert'); h=round(h*256);
x_hil_i=filter(h,1,real(inp)); x_hil_i=x_hil_i/256;
delayfilter = zeros(L,1).'; delayfilter(14) = 1; inp_del_i= filter(delayfilter,1,real(inp));
b_i1=inp_del_i+1i*x_hil_i; b_i2=inp_del_i-1i*x_hil_i;
figure; plot (abs(fftshift(fft(b_iA)))); figure; plot (abs(fftshift(fft(b_iB))));
|
|
|
|
|
Aug 23 2010, 07:01
|
Группа: Новичок
Сообщений: 6
Регистрация: 23-08-10
Пользователь №: 59 060

|
Цитата(DRUID3 @ Apr 4 2009, 15:21)  какой именно обработки? Выше указали их много... я делал бы так. есть n*I, n*Q временных отсчетов. 1) cFFT //получили n*I n*Q в частотной области2) тупо сдвинули все частотные отсчеты в сторону положительных на 50 MHz. Имеем только положительные отсчеты спектра. 3) дополняем отрицательную часть спектра до 2*n элементов в соответствии с правилами спектра Фурье для действительных последовательностей. Вещественная ось четная симметрия([i]=[N-i]). Мнимая - нечетная симметрия([i]=-[N-i]), "0"-й и "N/2" отсчеты пусты т.е. "0"... 4) RealRFFT //обратное для действительных чисел.получаем действительную временнУю последовательность для 2*n действительных отсчетов. Этот блочный алгоритм вполне работоспособен для Real Time. неее...давайте 50$... P.S.: временнОй метод с преобразованием Гильберта тоже проканает, при отвратительном результате для "0"-й частоты. Просто мне частотные методы "ближе"... Вижу, что теме уже год, но уж очень точно попало в мою задачу. Имею 2048 комплексных отсчетов (2048 I и 2048 Q). И так 95 раз в секунду. Что образует частоту дискретизации 196078 Гц. Нужно демодулировать амплитудный сигнал (AM USB) по частоте 1500 Гц (здесь я имею ввиду частоту относительно нулевой - по крайней мере я так понимаю). Здесь сигнал это картинка: наличие сигнала на 1500 Гц это черный пиксел, отсутствие - белый. В идеале получать где-нибудь 4000 пикселей в секунду. Подойдет ли мне такая реализация? : Хочу 1) использовать вышеописанный алгоритм преобразования комплексного сигнала в вещественный частотным сдвигом. 2) Далее наверно применять КИХ фильтр для выделения нужной частоты. 3) Затем разделить полученный за секунду вещественный отфильтрованный сигнал на 4000 кусков и каждый кусок сравнивать с прототипом минимальной амплитуды = если выше, то черный, если ниже, то белый. to DRUID3: есть у меня сомнения, что я правильно понимаю, что такое четная и нечетная симметрия. Если есть массив a, то для четной симметрии в массив b надо записывать b[i] = a[N-i], а для нечетной b[i] = -a[N-i], правильно? и так до i < N/2? Еще вопрос по RealFFT. Нашел реализацию сей функции по адресу http://algolist.manual.ru/maths/fft.php Там есть функция void RealFFT(real *ddata, ulong Len, int Dir). Здесь Dir означает направление преобразования. Мне же нужно обратное? (для преобразования из частотного представления в сигнал). Вот, а зачем выше (перед RealFFT) копируем мнимую часть, если преобразование у нас вещественное. Может и копировать есть смысл только вещественную чать?
|
|
|
|
|
Aug 24 2010, 04:49
|

Местный
  
Группа: Участник
Сообщений: 240
Регистрация: 20-09-08
Пользователь №: 40 347

|
Цитата(aa.veter @ Aug 23 2010, 11:01)  Вижу, что теме уже год, но уж очень точно попало в мою задачу. Имею 2048 комплексных отсчетов (2048 I и 2048 Q). И так 95 раз в секунду. Что образует частоту дискретизации 196078 Гц. Нужно демодулировать амплитудный сигнал (AM USB) по частоте 1500 Гц (здесь я имею ввиду частоту относительно нулевой - по крайней мере я так понимаю). Здесь сигнал это картинка: наличие сигнала на 1500 Гц это черный пиксел, отсутствие - белый. В идеале получать где-нибудь 4000 пикселей в секунду.
Подойдет ли мне такая реализация? :
Хочу 1) использовать вышеописанный алгоритм преобразования комплексного сигнала в вещественный частотным сдвигом. 2) Далее наверно применять КИХ фильтр для выделения нужной частоты. 3) Затем разделить полученный за секунду вещественный отфильтрованный сигнал на 4000 кусков и каждый кусок сравнивать с прототипом минимальной амплитуды = если выше, то черный, если ниже, то белый. вы имеете квадратуры зачем вам для демодуляции назад вещественный сигнал? Сдвигайте ваш комплексный сигнал на 1500 Гц (т.е. в ноль) и выделяйте амплитудную огибающую Есть z(t) = I(t)+j *Q(t) нужно сместить на 1500 Гц для этого умножаем на комплексную экспоненту получаем z0(t) = I0(t)+j*Q0(t) = z(t)*exp(-j*2*pi*f0*t), где f0 = 1500 Гц. Теперь выделяем амплитудную огибающую: A(t) = sqrt(I0(t)^2 + Q0(t)^2). Все амплитудный демодулятор готов никаких фильтров не надо никаких fft.
|
|
|
|
|
Aug 24 2010, 13:46
|
Группа: Новичок
Сообщений: 6
Регистрация: 23-08-10
Пользователь №: 59 060

|
Цитата(bahurin @ Aug 24 2010, 08:49)  вы имеете квадратуры зачем вам для демодуляции назад вещественный сигнал? Сдвигайте ваш комплексный сигнал на 1500 Гц (т.е. в ноль) и выделяйте амплитудную огибающую
Есть z(t) = I(t)+j *Q(t) нужно сместить на 1500 Гц для этого умножаем на комплексную экспоненту получаем z0(t) = I0(t)+j*Q0(t) = z(t)*exp(-j*2*pi*f0*t), где f0 = 1500 Гц. Теперь выделяем амплитудную огибающую: A(t) = sqrt(I0(t)^2 + Q0(t)^2). Все амплитудный демодулятор готов никаких фильтров не надо никаких fft. сделал таким образом. И о чудо, вижу картинку! До этого рисовал только на другом сигнале с помощью спектра по Фурье, выбирая там амплитуду на нужной частоте. Брал просто минимально возможное количество выборок. Естественно этого не хватало, так как картинка в таком варианте получается недостаточно детализированной. И я решил двигаться в сторону фильтрации сигнала по нужной частоте и выделению уже из отфильтрованного сигнала амплитуды. Так как у соратника оказалась реализация фильра баттрворта для вещественного сигнала, то решил к такому виду и привести свой сигнал. Однако этот метод явно лучше! Сразу благодарю! Огромное спасибо! Очень удачная подсказка! Сейчас получаю 2048 * 95 * 2 пикселей за секунду. Это количество перевожу в 2048*2 за секунду, суммируя каждые 95, ну и делю еще на подобранный интуитивно коэффициент. Единственное, в идеале должно получаться белое поле с рисунком черными линиями. Сейчас оно от строчки к строчке наверно синусоидально варьируется по яркости, поэтому на каких-то строчках черные линии по белому, на каких-то белые по черному, на каких-то серые на сером (в градациях серого то есть). Чем это может быть вызвано и как привести к желаемой стабильной картинке? Цитата(hobgoblin @ Aug 24 2010, 14:56)  Можно еще применить алгоритм CORDIC в режиме вычисления модуля. что означает в режиме вычисления модуля? Правильно я понял, что CORDIC - это способ упрощенной реализации вышеописанного смещения сигнала?
|
|
|
|
|
Aug 25 2010, 15:03
|
Группа: Новичок
Сообщений: 6
Регистрация: 23-08-10
Пользователь №: 59 060

|
похоже, амплитуда сдвинутого сигнала равна амплитуде не сдвинутого((
|
|
|
|
|
Aug 26 2010, 07:13
|

Местный
  
Группа: Свой
Сообщений: 202
Регистрация: 2-10-06
Из: Петербург
Пользователь №: 20 881

|
Цитата(aa.veter @ Aug 24 2010, 17:46)  что означает в режиме вычисления модуля? Правильно я понял, что CORDIC - это способ упрощенной реализации вышеописанного смещения сигнала? У кордика есть два режима - режим вычисления модуля (преобразование из декартовой в полярную систему координат) и режим вращения (когда комплексный вектор вращается на заданный угол). В режиме вычисления модуля делается поворот вектора (x,y) таким образом, чтобы составляющая y в итоге была равна нулю. x при этом будет равно модулю вектора, умноженному на константу, зависящую от количества итераций. В режиме вращения вектор поворачивается на указанный угол. Так как Вам нужно просто получить огибающую (модуль комплексного вектора), то проще использовать первый режим. Если бы у Вас была задача по честному снести спектр сигнала на нулевую частоту, то тогда нужно было бы использовать режим вращения, подав на вход угла вращения сигнал от фазового аккумулятора. Инкремент фазового аккумулятора в этом случае должен быть равен -2*IF/Fs, где IF - частота ПЧ, Fs - частота дискретизации.
|
|
|
|
|
Aug 26 2010, 13:18
|
Группа: Новичок
Сообщений: 6
Регистрация: 23-08-10
Пользователь №: 59 060

|
В общем после сдвига сигнала фильтрую лишние частоты с помощью прямого и обратного фурье. За базис беру первые и последние пять значений в бине спектра из 2048 отсчетов, остальные урезаю, и то же самое с зеркалом бина на следующих 2048. Получается неплохо. Картинка приобретает читабельный характер. Приводит это дело к некоторой вычислительной задержке, но это решаемо использованием более быстрых фильтров, как я понимаю. И если не ошибаюсь, полоски, идущие наискосок картинки, у меня появляются тоже из-за фурье. Так что похоже с этим справились.
Единственный вопрос: количество пикселей в строке у меня отличается от расчетных где-то на десяток. Это из-за того, что сигнал сдвинут относительно нулевой частоты? Если так, то получается когда я буду принимать сигнал на 0-ой частоте, количество пикселей четко будет соответствовать?
|
|
|
|
|
Aug 27 2010, 13:35
|
Группа: Новичок
Сообщений: 6
Регистрация: 23-08-10
Пользователь №: 59 060

|
Еще: почему мне все-таки приходится фильтровать? я что-то не так делаю? Экспоненту я представляю комплексным числом: exp( 0 + j*2*pi*f0*t ) = exp(0) * ( cos( 2*pi*f0*t ) + j*sin( 2*pi*f0*t ) ), где f0 - частота для сдвига Гц, t - время отсчета, сек. И сдвиг получаю умножением z0 = z * exp(...). В результате Амплитуда сигнала остается на месте.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|