Автор |
Сообщение |
|
Дата: 28 Окт 2011 13:01:03
#
|
|
Дата: 28 Окт 2011 13:09:54
#
rst59 Ну собсно sea уже ответил. :) Придётся с полосой определится заранее, или только бла-бла с микрофона, или если в планах музЫку или чего пошире, то сразу лучше прикидывать.
|
Реклама Google
|
|
|
Дата: 28 Окт 2011 13:14:19
#
спасибо за ответы
и ещё вопрос
где будет располагаться спектр сверху или снизу? как перекинуть на другую сторону? cos и sin местами поменять?
sea
cos(pi/2*n)
т.е. эта функция принимает только значения -1, 0 и 1?
|
|
Дата: 28 Окт 2011 13:20:19
#
rst59 как перекинуть на другую сторону? cos и sin местами поменять? Да.
т.е. эта функция принимает только значения -1, 0 и 1? Блин наваждение какое-то с частными случаями. :-) В общем случае нет, в каких-то частных да там будут константы, парит чекить те что вы напсали или чего другое, и в каких случаях именно, это имхо несложно прикинуть.
|
|
Дата: 28 Окт 2011 13:22:39 · Поправил: sea (28 Окт 2011 13:24:10)
#
|
|
Дата: 28 Окт 2011 13:25:36
#
Придётся с полосой определится заранее, или только бла-бла с микрофона, или если в планах музЫку или чего пошире, то сразу лучше прикидывать.
А если с микроконтроллера генерить, например CW, BPSK и прочее, на базе несущих, то их сразу же можно генерировать в 0 и 90 и ничего фильтровать не надо.
|
|
Дата: 28 Окт 2011 13:26:45
#
Mesh, sea
спасибо! попробую реализовать
|
|
Дата: 28 Окт 2011 13:31:07 · Поправил: Mesh (28 Окт 2011 13:38:39)
#
rst59 Есть еще похожий вариант. Например при сигнале 3 КГц перемножаем на 1.5 ГКц так, чтобы сигнал был вокруг 0 Гц. И так далее, прямо как по книге ППП, только в цифровом виде. Вот если взять дискрет для такого примеру 6000 килогерц это и будет один из частных случаев. Имхо. :) 6000 килогерцев это я конечно маху дал, пардоне.
|
|
Дата: 28 Окт 2011 13:42:42 · Поправил: sea (28 Окт 2011 13:43:52)
#
Таки да ) Получается умножение можно заменить за изменение знака, потому, что умножать надо будет один канал на 0, 1, 0, -1, второй, соответственно на 1, 0, -1, 0. Но тут все равно, что использовать ключевой смеситель, т.е. получается перемножение на меандр. В данном случае получается, что после ЦАП с дискретизацией в 6 КГц нужно поствить соотв. ФНЧ в 6 КГц, иначе сигнал много раз повторится по частоте (гармоники). Физика - штука злая. Если же при 48 КГц умножать на меандр 1.5 КГц, то гармоники вылезут уже в цифровом виде. Может я конечно и ошибаюсь, надо глядеть на условия реализации, но мне кажется, что лучше сделать 48 КГц дискретизацию, умножать на нечто похожее на синус с косинусом и тогда хотя бы в цифре гармоник не будет до 24 КГц, дальше на тот же ФНЧ КГц, и он подавит то, что будет выше 24 КГц намного лучше, чем то, что останется выше 6 КГц при дискретизации в 6 КГц. Но надо смотреть вычислительную мощь, применяемые ЦАП/АЦП. Все ИМХО, конечно.
|
|
Дата: 28 Окт 2011 13:53:05
#
sea Гм, как бы оно б мне не очень надо, разберётесь конечно, но вроде как то после ЦАП с дискретизацией в 6 КГц нужно поствить соотв. ФНЧ в 6 КГц, что-то тут не то? :) Что может отфильтровать ФНЧ со срезом 6 килогерц при дискрете 6 килогерц? Как бы особо дискутировать не очень хоца, тема для меня не очень волнующая, но вроде косяк какой в прикидах?
|
|
Дата: 28 Окт 2011 14:52:34 · Поправил: sea (28 Окт 2011 15:01:18)
#
Ну может быть... На два поделить... Просто после ЦАП надо ФНЧ. А если ЦАП на 6, а ФНЧ на 3 зачем вообще цифровая обработка? :)
спасибо! попробую реализовать
Интересно на чем
ps. Я в БПФ не специалист, но думаю, что его тоже можно использовать для поворота фазы на 90 градусов. Там же вроде как раз и получаются амплитуды и фазы. Но это я так... Слышал звон.
|
|
Дата: 28 Окт 2011 19:13:55
#
sea А, ЦАП... ну да, чёт не просёк сходу, думал о чём-то о своём. :) Да юзают и БПФ конешно. Тут от платформы зависит изделия ну и цели какие нужно достигнуть.
|
|
Дата: 28 Окт 2011 21:27:12
#
вот заюзал тут фильтр TIirLPF из исходников Eralgen и Mesh
но как-то он не по нужной частоте срезает, а выше процентов на 40-50
кто вкурсе в чём дело?
|
|
Дата: 28 Окт 2011 21:37:28 · Поправил: sea (28 Окт 2011 22:44:11)
#
вот заюзал тут фильтр TIirLPF из исходников Eralgen и Mesh
А можно чуть подробнее? Просто вариантов LPF в виде IIR вагон и маленькая тележка.
|
|
Дата: 28 Окт 2011 21:42:08
#
|
|
Дата: 28 Окт 2011 21:47:37
#
собственно хочу сделать конвертер wav в IQ :)
|
|
Дата: 28 Окт 2011 22:35:56
#
rst59 Я так думаю, там просто вы попарились с частотой дискрета судя по тому что 40-50 эт как раз в два раза. Вся софтина и все классы это eralgen, я тока там чуток совего дописал. Дискрет меняется при перегонах туда суда.
|
|
Дата: 28 Окт 2011 22:45:54
#
собственно хочу сделать конвертер wav в IQ :)
Ага, а потом нарежете на болвалку и сделаете безкомпьютерный SDR маяк.
|
|
Дата: 28 Окт 2011 22:55:29 · Поправил: rst59 (28 Окт 2011 22:56:17)
#
|
|
Дата: 28 Окт 2011 22:59:16
#
нарежете на болвалку и сделаете безкомпьютерный SDR маяк
можно и так :)
но желательно риалтайм обработка
|
|
Дата: 28 Окт 2011 23:03:06
#
rst59 Да я не могу проверить, у меня дельфи давно уже нет. Вот думкаю может скачать да поставить? А другой какой фильтр, там вроде их куча классов была, да и порядок с ходу 12 может не надо, так попробовать-то можно и на меньшем потом увеличить. Блин я уж не помню чего там и как.
|
|
Дата: 28 Окт 2011 23:32:17
#
странно... с другими фильтрами (TIIRFilter, TIIRFilter1) тоже не получилось отсечь частоты выше 12кГц
|
|
Дата: 28 Окт 2011 23:52:04
#
rst59 Сгенерите шум во всей полосе в том ж Куле, тока с амплитудой там не переборщите, прогоните через фильтр и будет видно в реале чего там где, может оно всё и нормал и что б получить то что вы хотите нужно 120 порядку фильтры или ещё круче. Срез вобще вроде по уровню 3 дб задаётся, там ни как не будет что сразу после 12 полный мрак типо всё исчезло.
|
|
Дата: 29 Окт 2011 00:02:40
#
пробовал и больший порядок - бестолку
|
|
Дата: 29 Окт 2011 00:09:31 · Поправил: Mesh (29 Окт 2011 00:09:49)
#
rst59 Положите листинг кода где инизилизируете и используете фильтр, так не бывает, где-то в консерватории косяк.
|
|
Дата: 29 Окт 2011 09:55:01
#
Я вот на дельфи делаю белый шум рандомом. Потом фильтр. Потом все это в файл dat. В SV старом открываю и смотрю что получается. Дискретизацию сейчас считаю и ставлю на 48 КГц. Фильтры БИХ. Порядок 6-8. Тогда получается нормально. Если КИХ, то там и 120 выглядят как-то... Фильтры считаю в Filter Solutions там есть сразу же вывод текста в с++, чтобы понять алгоритм хватает.
По поводу подавления заметил такую интересную весчь, что БИХ ФНЧ чем выше частота среза, тем меньше подавление, а ФВЧ практически ничего не меняют (странно). Полосовые работают.
|
|
Дата: 29 Окт 2011 10:04:26 · Поправил: rst59 (29 Окт 2011 10:14:35)
#
sea
можете выложить выши делфяные исходники?
Mesh
function Norm(r: real): SmallInt;
begin
if r > 65535 then r := 65535;
if r < -65536 then r := -65536;
Result := Round(r);
end;
LPF1 := TIirLPF.Create(12000, 48000, 0.8, 12, 0.9);
SetLength(waveout, Length(wavein));
for i := Low(wavein) to High(wavein) do
waveout[i] := Norm(LPF1.Exec(wavein[i]));
далее пишем в файл заголок wav и массив waveout
вот пример обработки с белым шумом
http://dl.dropbox.com/u/9597146/noise.rar |
|
Дата: 29 Окт 2011 10:49:50 · Поправил: Programmist (29 Окт 2011 11:11:20)
#
function Norm(r: real): SmallInt;
Нельзя так делать, Smallint: -32768..32767
Сначала надо вычислять максимальное значение массива, потом приводить к Smallint.
з.ы.
Совсем прааильно будет, если исходный массив RealArray привести к SingleArray, чтобы максимальные значения не вылетали за -+1.0, потом умножить на 32767, поучится нормальная 16-ти битная Data.
Все это делать надо после фильтра, потому, как он нормально работает с плавающей точкой.
Во избежание непонятных результатов тип Real, без особой на то необходимости использовать не надо, Single вполне достаточно, если мало, везде ставим Double.
|
|
Дата: 29 Окт 2011 11:36:01 · Поправил: Mesh (29 Окт 2011 11:45:48)
#
rst59 Ну да Programmist дело говорит. Так-то косяков особых в консерватории не видать, но с типами промашка конкретная. Запросто может быть причиной чего угодно. Уж хотя б фаншен в рамки вогнать для приличия что ли, где так
function Norm(r: real): SmallInt;
const
max = 32760;
min = -32760;
begin
if r > max then r := max;
if r < min then r := min;
Result := Round(r);
end;
з.ы. Ессно wavein должен быть smallint array если читаете из 16 битных файлов, иначе тож бардак будет.
|
|
Дата: 29 Окт 2011 11:59:32 · Поправил: Programmist (29 Окт 2011 12:05:02)
#
Mesh
function Norm(r: real): SmallInt
Не совсем в курсе, что тут хотят, но, имхо эта функция все испортит. Она только ограничит диапазон до нормальных значений. Для правильного результата, нужно приводить весь массив к SmallInt.
з.ы.
Ессно wavein должен быть smallint array если читаете из 16 битных файлов, иначе тож бардак будет.
Ну да, цикл нормализации нужен. Не знаю пока стандартов на 32-х битную дату, но похоже, что все стараются сейчас не выходить за единицу.
|
Реклама Google |
|