|
|
  |
Преобразование комплексного сигнала в вещественный |
|
|
|
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 - это способ упрощенной реализации вышеописанного смещения сигнала?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|