На главную страницу сайта
· Наш магазин · Объявления · Рейтинг · Статьи · Частоты · Копилка · Аэродромы · Live!
· Файлы · Диапазоны · Сигналы · Музей · Mods · LPD-форум · Клуб · Радиостанции
На сайте: гостей - 47,
участников - 3 [ muha131, killer258, Andry 165]
 · Начало · Опросы · События · Статистика · Поиск · Регистрация · Правила · FAQ · Галерея ·
 Форум —› Радиосигналы —› SDR - алгоритмы, идеи, проблемы, принципы 
Портативные любительские радиостанции Yaesu


Yaesu FT-60R
руб.

Yaesu VX-3R
руб.

Yaesu VX-6R
руб.

Yaesu VX-8DR
руб.

Yaesu FT-1D
руб.
 Страница:  ««  1  2  3  4  5  6  7  8  »»Поиск в теме
Автор Сообщение
rst59
Участник
Offline1.4
с мая 2009
KN88SU
Сообщений: 127

Дата: 29 Окт 2011 12:03:06 #  

Programmist
после фильтрации уровень сигнала значительно снижается, так что эта функция ни на что не влияет (я проверял)
ввёл её так на всякий случай
rst59
Участник
Offline1.4
с мая 2009
KN88SU
Сообщений: 127

Дата: 29 Окт 2011 12:04:45 · Поправил: rst59 (29 Окт 2011 12:06:17) #  

Mesh
вот ето я тупанул :) ну да, конечно -32768...32767
но вункция всё ж роли не играет, дело не в ней
массивы такие
type
TSmallIntArr = array of SmallInt;
wavein, waveout: TSmallIntArr;
Реклама
Google
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 29 Окт 2011 12:11:38 #  

rst59
после фильтрации уровень сигнала значительно снижается, так что эта функция ни на что не влияет (я проверял)
Это далеко не факт, а частный случай, контроль амплитуды на выходе всегда необходим.
rst59
Участник
Offline1.4
с мая 2009
KN88SU
Сообщений: 127

Дата: 29 Окт 2011 12:13:56 #  

Programmist
да контролировал я, не было превышения
Mesh
Участник
Offline4.0
с мая 2006
Сообщений: 6169

Дата: 29 Окт 2011 12:14:03 · Поправил: Mesh (29 Окт 2011 12:14:59) #  

rst59 Тода значти косяк в прямом чтении из массива smallint даты как real. Если правильно помню в фильтре входная дата в этом типе. Добавте просто явное приведение типо так что ли:

var
....
a:real;
begin

LPF1 := TIirLPF.Create(12000, 48000, 0.8, 12, 0.9);
SetLength(waveout, Length(wavein));
for i := Low(wavein) to High(wavein) do
begin
a:=wavein[i];
waveout[i] := Norm(LPF1.Exec(a));
end;

Уж по крайней мере тут вроде всё чики пуки, если не будет работать тогда где-то ещё какие-то колёса, ну не может это не работать. Имхо ессно.
rst59
Участник
Offline1.4
с мая 2009
KN88SU
Сообщений: 127

Дата: 29 Окт 2011 12:17:32 #  

Добавте просто явное приведение
сделал, всё то же...
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 29 Окт 2011 12:19:21 · Поправил: Programmist (29 Окт 2011 12:23:43) #  

Не будет работать, функцию Norm надо выбросить, и следить за амплитудой.
Вот так можно проверить, для начала (число 100 подобрать экспериментально)
for i := 0 to High(wavein) do
begin
a:=wavein[i];
waveout[i] := Round( LPF1.Exec(a / 100) );
end;
rst59
Участник
Offline1.4
с мая 2009
KN88SU
Сообщений: 127

Дата: 29 Окт 2011 12:20:26 · Поправил: rst59 (29 Окт 2011 12:25:04) #  

Programmist
будь по вашему

max := 0;
...
a := LPF1.Exec(wavein[i]);
if Abs(a) > max then max := Abs(a);
waveout[i] := Round(a);

выдало max = 11417,5950677173
всё в пределах нормы, но спектр всё тот же
Mesh
Участник
Offline4.0
с мая 2006
Сообщений: 6169

Дата: 29 Окт 2011 12:22:58 #  

rst59 Я файлик с шумом не смотрел, пока так превинтивно чирикаю, может там и в норме всё. Чуть попозжее гляну.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 29 Окт 2011 12:43:57 · Поправил: Programmist (29 Окт 2011 12:45:20) #  
rst59
Участник
Offline1.4
с мая 2009
KN88SU
Сообщений: 127

Дата: 29 Окт 2011 13:06:17 #  

Programmist
оооо!!! спасибо! с вашим TLPF всё чётко фильтруется
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 29 Окт 2011 13:19:15 #  

rst59
спасибо! с вашим TLPF всё чётко фильтруется
Не за что, он похож на тот LPF, что Eralgen выкладывал, просто я там правил чего-то, уже не помню. ФВЧ тоже из него сделан, не факт, что правильно, но работает.
IQ конвертер мне тоже нужен будет, сразу понять, как Mesh сделал, не смог, придется вникать в детали, это потом, пока оболочки для проги нет и не хватает дециматора.
Mesh
Участник
Offline4.0
с мая 2006
Сообщений: 6169

Дата: 29 Окт 2011 18:51:45 #  

rst59 Да, чёт не то в ваших примерах с шумом. Срез на уровне 15-16 килогерц, но ежели всё уже устаканилось то и ладно.
rst59
Участник
Offline1.4
с мая 2009
KN88SU
Сообщений: 127

Дата: 29 Окт 2011 20:14:21 #  

Mesh
хотелось бы реализовать такой фильтр, ну вот как в SA например, чтоб чётко отсекал ненужный участок спектра
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 29 Окт 2011 20:37:58 #  

чтоб чётко отсекал ненужный участок спектра
FFT:
http://www.radioscanner.ru/files/miscsoftware/file10919/
Mesh
Участник
Offline4.0
с мая 2006
Сообщений: 6169

Дата: 29 Окт 2011 20:46:51 #  

rst59 А там сокрее всего не БИХ, потому что фаза после фильтеринга не рушится. Оно-то и на БИХ можно это сварганить, но ихмо гемороя больше будет, чем на КИХ.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 29 Окт 2011 20:57:34 #  

FFT никогда не рушит фазу, но там другие проблемы, имхо самый надежный способ, свалить АЧХ 2-ым - 3-им порядком ФНЧ, а остальное дорезать FFT, иначе все равно что-то останется, или фильтровать будет вечно.
Mesh
Участник
Offline4.0
с мая 2006
Сообщений: 6169

Дата: 29 Окт 2011 21:07:12 #  

Programmist Удаление бинов после FFT эт любимая забава пионеров. Посмторите любой документ по ЦОС, чёто отцы и забугорные в том числе, ингорят тупо и упорно, это "гениальнейшее решение", всё норовят честному люду мозг вывернуть. :-) Хотя там выворачивать-то особо и нечему, но вот народ любит "открытия совершать" раз за разом.
rst59
Участник
Offline1.4
с мая 2009
KN88SU
Сообщений: 127

Дата: 30 Окт 2011 19:06:04 #  

Programmist, Mesh
а как избежать щелчков при склейке блоков обратно после БПФ?
Mesh
Участник
Offline4.0
с мая 2006
Сообщений: 6169

Дата: 30 Окт 2011 19:27:16 #  

rst59 Дык как бы посмотреть в доках по ЦОС, методы с перекрытием или накоплением. Эт в доках пишут, как и про проблемы обнулений бинов. Читать тока никто не любит. :-)
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 30 Окт 2011 19:47:54 #  

а как избежать щелчков при склейке блоков обратно после БПФ?
Это самое неприятное явление, если в реальном времени работать, минимум двойная буферизация нужна, я всегда четыре буфера ставлю. В статике все должно нормально склеиваться, но от задачи много зависит, как правило, без окон обойтись сложно.
rst59
Участник
Offline1.4
с мая 2009
KN88SU
Сообщений: 127

Дата: 30 Окт 2011 21:54:21 #  

Mesh, Programmist
спасибо, буд экспериментировать
petr0v
Участник
Offline2.3
с мая 2010
Balakhna
Сообщений: 412

Дата: 30 Окт 2011 22:12:45 #  

Programmist

Это самое неприятное явление, если в реальном времени работать, минимум двойная буферизация нужна, я всегда четыре буфера ставлю. В статике все должно нормально склеиваться, но от задачи много зависит, как правило, без окон обойтись сложно.

Плохой совет, от искажений так не избавиться, это вообще даже не фильтрация. Либо быстрая свёртка как Mesh выше указывал, но так частоты не "позануляешь", поскольку сначала во временной области нужно ИХ фильтра нулями дополнять. Либо банки фильтров с передискретизацией, здесь можно "частоты занулять", как вы любите, и без искажений.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 30 Окт 2011 22:28:41 #  

Здесь поможет только эксперимент, важно найти хороший модуль FFT, в сети их много, все дают разные результаты. Удивительно, но факт. Мне приклеился тот, что на asm-e (есть почти во всех исходниках), но он работает только с Single и точности не всегда хватает, да и приколы в нем есть недобитые. Может, когда и до него руки дойдут.
А от искажений можно избавляться долго, однозначного решения пока нет, имхо сначала надо сделать, чтобы хоть как-то работало. Оно и есть начало пути :)
Mesh
Участник
Offline4.0
с мая 2006
Сообщений: 6169

Дата: 30 Окт 2011 22:33:08 #  

Programmist имхо сначала надо сделать, чтобы хоть как-то работало Я хз конечно, но вот мне дедушки програмеры вдалбливали дргуое. Сначала должно работать как надо! Пускай медленно оченнно медленно но как надо! А вот уж потом отчекивай алглоритмы там, оптимизацию и всё такое. Ну да ту у каждого свои ходы.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 30 Окт 2011 22:49:10 #  

Mesh
Сначала должно работать как надо!
Ну не знаю, если работать нечему, то, как надо оно работать уж точно никак не сможет, здесь действительно, каждый решает для себя сам, с какой стороны подходить к вопросу.
petr0v
Участник
Offline2.3
с мая 2010
Balakhna
Сообщений: 412

Дата: 30 Окт 2011 22:54:24 · Поправил: petr0v (30 Окт 2011 22:55:35) #  

Programmist


Здесь поможет только эксперимент, важно найти хороший модуль FFT, в сети их много, все дают разные результаты. Удивительно, но факт. Мне приклеился тот, что на asm-e (есть почти во всех исходниках), но он работает только с Single и точности не всегда хватает, да и приколы в нем есть недобитые. Может, когда и до него руки дойдут.
А от искажений можно избавляться долго, однозначного решения пока нет, имхо сначала надо сделать, чтобы хоть как-то работало. Оно и есть начало пути :)


Никакой эксперимент не поможет без знания теории, она давно разработана, бери и используй. FFT нужно правильно использовать, а нет так как захотелось. Решения есть, можно получить сколь угодно качественный результат, не нужно изобретать плохой велосипед.
Programmist
Участник
Offline4.0
с ноя 2008
Москва
Сообщений: 3826

Дата: 30 Окт 2011 23:08:17 #  

petr0v
Читаю кое-что, когда время есть, а как выглядят нормальные и качественные решения, видно из исходных кодов. Это мегабайты текста, которые написаны не от хорошей жизни. Одна беда - слишком много ошибок и недоработок.
sea
Участник
Offline3.3
с авг 2006
Ярославль
Сообщений: 832

Дата: 31 Окт 2011 12:16:41 · Поправил: sea (31 Окт 2011 12:23:47) #  

rst59
можете выложить выши делфяные исходники?

Мне как-то Programmist присылал свои исходники. Там все так грамотно названо и расписано, что я теперь стесняюсь свои произведения выкладывать )) Но я причешу немного и вышлю. В общем логика такая: запускаю Filter Solutions выбираю какой-то определенный тип фильтра, задаю его параметры, ставлю тип Digital, указываю дискретизацию. Смотрю АЧХ на Frequency Response, может что-то еще меняю, пока не получу интересующие меня параметры. Потом нажимаю на Transfer Function - вижу функцию. Если нажать code - то выдадут текст на с++. Если нажать VEC то выдадутся параметры, нажимаю копировать и получаю что-то типа
NUM = [1.882e-02, -1.872e-02, -1.872e-02, 1.882e-02]
DEN = [1, -2.934, 2.873, -.9387]
Можно варьировать количество знаков после запятой.
Моя программа настроена так, что я ей эти две строки скармливаю, по ним она определяет порядок фильтра и соответственно размер массива задержки. Внутри все считаю пока в дробных числах. В принципе пробовал и в целых, но фиксированным алгоритмом под определенный фильтр.

Сама программа выдаёт что-то типа этого:


double DigFil(invar, initval, setic)
double invar, initval; int setic;
/******************************************************************************/
/* Filter Solutions Version 8.0 Nuhertz Technologies, L.L.C. */
/* http://www.nuhertz.com */
/* +01 602-216-2682 */
/* 3rd Order Low Pass Elliptic */
/* Bilinear Transformation with Prewarping */
/* Sample Frequency = 48.00 KHz */
/* Standard Form */
/* Arithmetic Precision = 10 Digits */
/* */
/* Pass Band Frequency = 3.000 KHz */
/* Pass Band Ripple = 1.000 dB */
/* */
/* Stop Band Ratio = 1.1 */
/* Stop Band Frequency = 3.300 KHz */
/* Stop Band Attenuation = 11.48 dB */
/* */
/******************************************************************************/
/* */
/* Input Variable Definitions: */
/* Inputs: */
/* invar double The input to the filter */
/* initvar double The initial value of the filter */
/* setic int 1 to initialize the filter to the value of initvar */
/* */
/* There is no requirement to ever initialize the filter. */
/* The default initialization is zero when the filter is first called */
/* */
/******************************************************************************/
/* */
/* This software is automatically generated by Filter Solutions. There are */
/* no restrictions from Nuhertz Technologies, L.L.C. regarding the use and */
/* distributions of this software. */
/* */
/******************************************************************************/

{
double sumnum, sumden; int i;
static double delay[4] = {0.0,0.0,0.0,0.0};
static double znum[4] = {
.1037026894,
-8.236913957e-02,
-8.236913957e-02,
.1037026894

};
static double zden[3] = {
-.6688198598,
2.207470036,
-2.495983077

};
if (setic==1){
for (i=0;i<=3;i++) delay[i] = 23.43726216*initval;
return initval;

}
else{
sumden=0.0;
sumnum=0.0;
for (i=0;i<=2;i++){
delay[i] = delay[i+1];
sumden += delay[i]*zden[i];
sumnum += delay[i]*znum[i];
}
delay[3] = invar-sumden;
sumnum += delay[3]*znum[3];
return sumnum;

}

}
sea
Участник
Offline3.3
с авг 2006
Ярославль
Сообщений: 832

Дата: 03 Ноя 2011 08:54:47 · Поправил: sea (03 Ноя 2011 08:55:34) #  

Подниму тему.

ProgrammistЗдесь поможет только эксперимент, важно найти хороший модуль FFT

Пробовал я как-то первый попавшийся модуль для FFT в своей программе. Поглядите - это не он?
Выложил тут. Вдруг пригодится.
Delphi FFT
Писалась некоторое время назат небольшая контрольная на дельфи с использованием FFT. Интерфейс может очень напоминать всем известную программу)) Функционал ооооочень ограничен: только просмотр файлов данных и wav файлов одного единственного формата: WAVE, 16-бит, моно любой дискретизации.


Увеличить
Реклама
Google
 Страница:  ««  1  2  3  4  5  6  7  8  »» 

Создавать сообщения могут только зарегистрированные участники форума.
Войти в форум :: » Логин » Пароль
Начало
Средства связи, рации. Купить радиостанции Motorola, Yaesu, Vertex, приемники, антенны.
Время загрузки страницы (сек.): 0.055; miniBB ®