реклама на сайте
подробности

 
 
> попытка создания спектроанализатора, XC3S250E-208 и ТФТ 480х234
andreichk
сообщение Dec 29 2012, 21:32
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



Привет народ. Вот вымучил ФФТ на корке , получилось что-то похожее на спектр. Во всяком случае на изменение частоты реагирует переползанием пиков сигнала по экрану. Только вот никак не соображу, как сделать так, чтобы пики сигнала располагались только сверху, а не вращались как умалишённые вверх-вниз.
http://www.youtube.com/watch?v=Vy1yDr5oZU8...eature=youtu.be

прилагаю куски кода по частям.
1. корка ФФТ в ИЗЕ

Код
reg [8:0]xn_re;
always @ (posedge CLK_A)
xn_re <= signal;

FFT FFT_A (
  .clk(CLK_A),         // input clk
  .start(1),           // input start
  .unload(1),          // input unload
  .xn_re(xn_re[8:0]),  // input [8 : 0] xn_re min+max
  .xn_im(0),           // input [8 : 0] xn_im
  .fwd_inv(1),         // input fwd_inv
  .fwd_inv_we(1),      // input fwd_inv_we
  .rfd(rfd),           // output rfd
  .busy(busy),         // output busy
  .dv(dv),             // output dv
  .xk_re(xk_re),       // output [8 : 0] xk_re
  .xk_im(xk_im)        // output [8 : 0] xk_im
);


далее блок математики , в котором сигналы с ФФТ обрабатываются и выводятся далее на экран

Код
wire [8:0]out_math;
math math (// математика
          .clk(CLK_A),
             .dv(dv),
          .real_(xk_re),
          .imaginary(xk_im),
          .out_(out_math)
         );

и собственно сама математика

Код
module math (
input clk,
input dv,
input [7:0]real_,
input [7:0]imaginary,
output reg[9:0]out_
);
wire [15:0] real_re;
wire [15:0] imaginary_;
//модуль комплексного числа.    
multiplexor m_re (
  .clk(clk), // input clk
  .a(real_), // input [7 : 0] a
  .b(real_), // input [7 : 0] b
  .ce(dv),  
  .p(real_re) // output [15 : 0] p
);
multiplexor m_im (
  .clk(clk),     // input clk
  .a(imaginary), // input [7 : 0] a
  .b(imaginary), // input [7 : 0] b
  .ce(dv),  
  .p(imaginary_) // output [15 : 0] p
);
reg [16:0] summe;
always @ (posedge clk)
begin
summe <= real_re[15:0] + imaginary_[15:0];
end
wire [8:0]out_m;
sqrt sqrt (
  .clk(clk), // input clk
  .ce(dv),
  .x_in(summe), // input [15 : 0] x_in
  .x_out(out_m) // output [8 : 0] x_out
);
//------------------------ ищем max ----------------------------------
wire [8:0] max = (dv == 1'b1) ? 1'b1: (( max < out_m ) ?  out_m : 1'b1);    
//----------------------- нормировка по max
wire [8:0] max_2;  
divider d_max (
    .clk(clk),         // input clk
    .ce(dv),           // input ce
    .dividend(max),    // input [8 : 0] dividend
    .divisor(2),       // input [8 : 0] divisor
    .fractional(max_2) // output[8 : 0] fractional
    );
wire [8:0] res;      
divider d_res (
    .clk(clk),       // input clk
    .ce(dv),         // input ce
    .dividend(out_m),// input [8 : 0] dividend
    .divisor(max_2), // input [8 : 0] divisor
    .fractional(res) // output[8 : 0] fractional
    );

always @ (posedge clk)
begin
      out_ <= res[7:0] - 118;//двигаем по высоте. меньше - выше
end

endmodule

поскажите, что надо сделать, чтобы устранить это вращение.Спасибо заранее и всех с наступающим Новым годом ! santa2.gif


--------------------
Go to the top of the page
 
+Quote Post
3 страниц V  < 1 2 3 >  
Start new topic
Ответов (15 - 29)
Lmx2315
сообщение Dec 30 2012, 19:19
Сообщение #16


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



QUOTE (andreichk @ Dec 30 2012, 22:09) *
RROR:HDLCompilers:87 - "math.v" line 86 Could not find module/primitive 'log10'


..сарказм вам неведом.
Сделайте табличную реализацию логарифма - если обойдётесь шагом в 3 дБ вам понадобится всего примерно 60 значений в табличке, вряд-ли больше.
А захотите шаг 1 дБ - уместитесь в 180 строк, вам хватит за глаза.


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
Flood
сообщение Dec 30 2012, 21:36
Сообщение #17


Знающий
****

Группа: Свой
Сообщений: 702
Регистрация: 8-06-06
Пользователь №: 17 871



Цитата(Lmx2315 @ Dec 30 2012, 21:47) *
..не жалко :
Код
log10 log10(
  .clk(clk), // input clk
  .ce(dv),
  .x_in(summe), // input [15 : 0] x_in
  .x_out(out_m) // output [8 : 0] x_out
);


..пользуйтесь, всегда рады помочь.


Со стороны как-то некрасиво выглядит, да и смысл жеста не понятен...
Go to the top of the page
 
+Quote Post
andreichk
сообщение Dec 30 2012, 21:50
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



будем считать это новогодней шюткой santa2.gif


--------------------
Go to the top of the page
 
+Quote Post
novchok
сообщение Jan 1 2013, 15:11
Сообщение #19


Частый гость
**

Группа: Свой
Сообщений: 128
Регистрация: 19-08-10
Из: Смоленск
Пользователь №: 58 991



Мне просто интересно, а как сигнал вводится в систему для анализа. Насколько я понимаю, качество съема сигнала и перевода его в цифру играет решающую роль при анализе спектра. Можете рассказать что именно анализируется, какие АЦП используются, какие фильтры стоят и т.д.


--------------------
Herz укроп и педрила
Go to the top of the page
 
+Quote Post
andreichk
сообщение Jan 1 2013, 16:41
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



да вот собственно входная часть, никаких спецфильтров, только ОУ и всё. в коде тоже нет никакой цифровой фильтрации, окон и всего того, что в принципе там должно быть. я пока ещё далёк от правильного понимания построения правильных измерительных приборов.Сьём данных,согласно графикам из даташита на корку ФФТ


--------------------
Go to the top of the page
 
+Quote Post
novchok
сообщение Jan 1 2013, 18:28
Сообщение #21


Частый гость
**

Группа: Свой
Сообщений: 128
Регистрация: 19-08-10
Из: Смоленск
Пользователь №: 58 991



Спасибо, схема интересная, единственное, чего могу сказать, OPA2652 честно отработает усиление в 30 не выше 10MHz, а судя по делителю, максимальное усиление как раз 30. Поэтому если будете пытаться получить реальный спектр сигнала, учтите, что операционники заваливают высокочастотный сигнал.


--------------------
Herz укроп и педрила
Go to the top of the page
 
+Quote Post
andreichk
сообщение Jan 1 2013, 19:55
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



ну дык скоп , да и спектр тоже, более , чем на 10-15 МГц и не расчитывался.


--------------------
Go to the top of the page
 
+Quote Post
Timmy
сообщение Jan 2 2013, 07:40
Сообщение #23


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Входную часть я бы делал примерно так:
Прикрепленное изображение

Грубый/тонкий регуляторы смещения объединёны и регулятор упрощён с учётом того, что ОУ имеет по входу не меньший размах, чем по выходу, поэтому может использоваться в качестве буфера. Вход получится стандартный под осциллографический щуп с делителем.
На схеме от andreichk ассиметрично включён драйвер АЦП, так он не будет держать постоянное синфазное напряжение. И ещё, резисторы регулятора усиления выбраны очень странно, которые с малыми номиналами, если вспомнить, чему равно усиление такой схемы. А триггерную схему можно вообще сделать в цифре, или подключать к выходу IC2, чтобы не грузить высокоомный вход.
UPD:По драйверу АЦП возражение снимаю, его можно и так включать. И тонкое смещение действительно имеет смысл ставить после усилителя, чтобы его регулировка не зависела от коэффициента усиления.

Сообщение отредактировал Timmy - Jan 2 2013, 12:38
Go to the top of the page
 
+Quote Post
MaverickDSP
сообщение Jan 10 2013, 12:32
Сообщение #24





Группа: Новичок
Сообщений: 2
Регистрация: 10-01-13
Из: В. Новгород
Пользователь №: 75 139



Цитата(andreichk @ Dec 30 2012, 20:25) *
правда как обычно какая-то фигня на экран полезла в виде зеркальных повторов. как от этого избавиться, вот ещё задачка..... smile3046.gif

Очень похоже на спектр меандра
Либо сигнал на входе АЦП очень мощный, либо ошибка в типах данных.
В каком режиме работает АЦП ? signed или unsigned ? (ножка DF)
Я так понимаю, ядро БПФ ждет signed.
Go to the top of the page
 
+Quote Post
Uuftc
сообщение Jan 10 2013, 15:14
Сообщение #25


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 3-10-04
Из: Кукуево-Дальнее
Пользователь №: 767



Цитата(andreichk @ Jan 1 2013, 20:41) *
да вот собственно входная часть, никаких спецфильтров, только ОУ и всё.

Фильтровать по аналогу перед ADC надо обязательно!
Алиасинг иначе никак не победить потом.
Go to the top of the page
 
+Quote Post
Aner
сообщение Jan 10 2013, 18:31
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



Если счетные ресурсы есть, то фильтровать по аналогу перед ADC не обязательно. Алиасинг никто уже и не побеждает, его используют. Как вторую, третью и тд. зоны Найквиста. Ну будет поболее шумов в этих зонах, появятся инскажения в сигналах, до приемлемого уровня фильтруется. Хотя не понятно для чего создавать такой спектроанализатор сегодня? Пройденный этап. При нынешних компах + 20 баксов за модуль (RTL2832+FC0013 или E4000) не e-bay получите неплохой спектроанализатор ~50...2200 Мгц.
Go to the top of the page
 
+Quote Post
Uuftc
сообщение Jan 10 2013, 19:20
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 3-10-04
Из: Кукуево-Дальнее
Пользователь №: 767



Цитата(Aner @ Jan 10 2013, 22:31) *
Если счетные ресурсы есть, то фильтровать по аналогу перед ADC не обязательно. Алиасинг никто уже и не побеждает, его используют. Как вторую, третью и тд. зоны Найквиста.

Очень интересно, как можно разделить сигналы из разных диапазонов, например из первого и из второго, оцифрованных одновременно?
Go to the top of the page
 
+Quote Post
andreichk
сообщение Feb 2 2013, 09:53
Сообщение #28


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



Цитата(MaverickDSP @ Jan 10 2013, 13:32) *
В каком режиме работает АЦП ? signed или unsigned ? (ножка DF)
Я так понимаю, ядро БПФ ждет signed.

assign ADC_DF_DCS = 0;//Offset binary data, duty cycle correction on
при желании можно переключить на
assign ADC_DF_DCS = 1;//2's complement data, duty cycle correction on


Цитата(Uuftc @ Jan 10 2013, 16:14) *
Фильтровать по аналогу перед ADC надо обязательно!
Алиасинг иначе никак не победить потом.

а разве R86,R87,C30 не являются ФНЧ ?

Цитата(Aner @ Jan 10 2013, 19:31) *
Хотя не понятно для чего создавать такой спектроанализатор сегодня
знаете, если бы речь шла о том , где купить подешевле, то тема так бы и называлась, а так, отвечая на ваш вопрос - чтобы окончательно с ума не сойти - ...


--------------------
Go to the top of the page
 
+Quote Post
Victor®
сообщение Feb 2 2013, 16:14
Сообщение #29


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(Uuftc @ Jan 10 2013, 23:20) *
Очень интересно, как можно разделить сигналы из разных диапазонов, например из первого и из второго, оцифрованных одновременно?


Вот-вот... и мне интересно...
Просветите, плз! Жаль Найквиста тут нет...


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
andreichk
сообщение Feb 4 2013, 13:04
Сообщение #30


Знающий
****

Группа: Свой
Сообщений: 507
Регистрация: 15-04-06
Из: Германия
Пользователь №: 16 143



Народ, для загрузки скопа в припаянную к спартану флеш, сдули у кого-то из сети и адаптировали под наш модуль(с изменением пинов и тактовой частоты) проект загрузчика флеш. загрузчик собрался и откомпилировался без проблем.Но не хочет грузиться в спартан из за этого сообщения:
WARNING:MapLib:701 - Signal RS232_RXD connected to top level port RS232_RXD has been removed.

Получается, что он отрубил линию загрузки в спартан прямо на входе, ссылаясь , что этот сигнал никуда не идёт.
Весь проект перерыли , но найти обрыв не смогли. Может ктось глянет из опытных, если не влом. smile3046.gif


--------------------
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 03:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01499 секунд с 7
ELECTRONIX ©2004-2016