Уважаемые посетители! Форум CQHAM.RU существует исключительно за счет показа рекламы. Мы будем благодарны, если Вы не будете блокировать рекламу на нашем Форуме. Просим внести cqham.ru в список исключений для Вашего блокировщика рекламы.
Страница 42 из 45 ПерваяПервая ... 3239404142434445 ПоследняяПоследняя
Показано с 411 по 420 из 447

Тема: Как шумит радио (цифровая обработка и слуховой приём)

  1. #411

    Регистрация
    10.11.2016
    Адрес
    Харьков
    Сообщений
    4,420
    Цитата Сообщение от EU1SW Посмотреть сообщение
    чем шире "ворота" тем больше шума, СШ ухудшается
    Такое ощущение, что этот треск не связан с естественным шумом.
    Он и на относительно мощных сигналах присутствует.


    Цитата Сообщение от EU1SW Посмотреть сообщение
    как реализован демодулятор?
    Код:
            public void Demodulate(Complex* iq, float* audio, int length)
            {
                for (var i = 0; i < length; i++)
                {
                    // Polar discriminator
                    var f = iq[i] * _iqState.Conjugate();
    
                    // Limiting
                    var m = (float)Math.Sqrt(f.Real * f.Real + f.Imag * f.Imag);
                    if (m > 0.0f)
                    {
                        f /= m;
                    }
    
                    // Angle estimate
                    var a = (float)Math.Atan2(f.Imag, f.Real);
    
                    // Scale
                    audio[i] = a * FMGain; // FMGain = 0.00001f;
    
                    _iqState = iq[i];
                }
                if (_mode == FmMode.Narrow)
                {
                    for (var i = 0; i < length; i++)
                    {
                        audio[i] *= NarrowAFGain;   // NarrowAFGain = 0.5f;
                    }
                }
            }


  2. #412
    Аватар для Genadi Zawidowski
    Регистрация
    22.07.2004
    Адрес
    Санкт-Петербург
    Сообщений
    11,100
    Записей в дневнике
    20
    Позывной
    UA1ARN
    Записи не радиолюбительского обмена, но в любительском диапазоне (тема про QRM с Питерского форума).
    Код демодулятора привожу, просто достаточное соотношение сигнал/шум.

    Код:
    	omega2ftw_k1 = POWF(2, NCOFTWBITS);
    
    ...
    
    #define OMEGA2FTWI(angle) ((ncoftwi_t) ((FLOAT_t) (angle) * omega2ftw_k1 / (FLOAT_t) M_TWOPI))	// angle in radians -pi..+pi to signed version of ftw_t
    
    ...
    
    // Демодуляция FM
    static RAMFUNC ncoftwi_t demodulator_FM(
    	FLOAT32P_t vp1,
    	const uint_fast8_t rxi				// 0/1: main_RX/sub_RX
    	)
    {
    	// Здесь, имея квадратурные сигналы vp1.IV и vp1.QV, начинаем демодуляции
    	//
    	// tnx Vladimir Vassilevsky
    	// http://www.dsprelated.com/showmessage/71491/2.php
    	//
    	static ncoftwi_t prev_fi [NTRX] = { 0, };
    
    	if (vp1.IV == 0 && vp1.QV == 0)
    		vp1.QV = 1;
    	const ncoftwi_t fi = OMEGA2FTWI(ATAN2F(vp1.QV, vp1.IV));	//  returns a value in the range –pi to pi radians, using the signs of both parameters to determine the quadrant of the return value.
    
    	const ncoftwi_t d_fi = (ncoftwi_t) (fi - prev_fi [rxi]);
    	prev_fi [rxi] = fi;
    
    	return d_fi;
    }
    
    ...
    
    		{
    			// Демодуляция NBFM
    			/*const FLOAT_t gain = */agc_forvard_float(dspmode, vp0f, rxi);	// для отображения S-метра
    			saved_delta_fi [rxi] = demodulator_FM(vp0f, rxi);	// погрешность настройки - требуется фильтровать ФНЧ
    			//const int fdelta10 = ((int64_t) saved_delta_fi [rxi] * ARMSAIRATE * 10) >> 32;	// Отклнение частоты в 0.1 герц единицах
    			// значение для прослушивания
    			// 0.707 == M_SQRT1_2
    			const FLOAT_t sample = saved_delta_fi [rxi] * (FLOAT_t) M_SQRT1_2;
    			BEGIN_STAMP2();
    			r = sample * rxoutdenom;	// масштабирование к разрядности аудио-кодека 1_31 -> 1_15
    			END_STAMP2();
    			if (glob_nb_off == 0)
    			{
    				// "шумодав"
    				testholdmax3(iir_nfmnbbpf(sample));
    				const int nbopen = getholdmax3() < nbfence;
    				r = (nbopen != 0) ? r : (r / 16);
    			}
    		}
    Вложения Вложения
    ... Я там глубину сам промерял!

  3. Спасибо от alex_m

  4. #413
    Аватар для EU1SW
    Регистрация
    01.07.2009
    Адрес
    Minsk
    Сообщений
    3,870
    Записей в дневнике
    1
    Позывной
    EU1SW
    Цитата Сообщение от alex_m Посмотреть сообщение
    // Angle estimate var a = (float)Math.Atan2(f. Imag, f.Real); // Scale audio[i] = a * FMGain; // FMGain = 0.00001f;
    не вижу дифференциатора
    вот гляньте на заведомо рабочий код, вычисляется разница фазы между соседними семплами, скачки фазы между семплами больше чем на PI должны быть устранены, реально это работает очень хорошо, проверено
    вместо argof используете ессно своё
    Код:
    float phase, dphase;
    for (int i=0; i<input_size; i++)
    {
    phase=argof(input,i);
    dphase=phase-last_phase;
    if(dphase<-PI) dphase+=2*PI;
    if(dphase>PI) dphase-=2*PI;
    output[i]=dphase/PI;
    last_phase=phase;
    }
    return last_phase;
    73! ***a few homemade DDC|DUC rigs, Malamute DDC, Storch-X DDC 7"

  5. Спасибо от alex_m

  6. #414
    Аватар для Genadi Zawidowski
    Регистрация
    22.07.2004
    Адрес
    Санкт-Петербург
    Сообщений
    11,100
    Записей в дневнике
    20
    Позывной
    UA1ARN
    Цитата Сообщение от EU1SW Посмотреть сообщение
    не вижу дифференциатора
    Точно!
    ... Я там глубину сам промерял!

  7. #415

    Регистрация
    10.11.2016
    Адрес
    Харьков
    Сообщений
    4,420
    Цитата Сообщение от EU1SW Посмотреть сообщение
    вот гляньте на заведомо рабочий код
    Что должно возвращать argof(input,i) ?

    попробовал подставить значение Q, не работает, вот результат:
    Вложения Вложения

  8. #416
    Аватар для EU1SW
    Регистрация
    01.07.2009
    Адрес
    Minsk
    Сообщений
    3,870
    Записей в дневнике
    1
    Позывной
    EU1SW
    Фазу, ессно... У вас же в явном виде в коде аналогично все идет // англ естимейт
    Или просто цельнотянутое, не вникая? )))
    73! ***a few homemade DDC|DUC rigs, Malamute DDC, Storch-X DDC 7"

  9. #417

    Регистрация
    10.11.2016
    Адрес
    Харьков
    Сообщений
    4,420
    Цитата Сообщение от EU1SW Посмотреть сообщение
    Фазу, ессно... У вас же в явном виде в коде аналогично все идет
    Чтото не понял. Код, который вы привели - это демодулятор или только часть от него?
    Если только часть, то фазу от чего на вход подавать? Брать из значений входного iq потока?

    И что такое output[i]? Это выходной аудиопоток или массив значений Q?
    Если массив значений Q, то что дальше делать с обработанным таким образом IQ потоком?

  10. #418
    Аватар для Genadi Zawidowski
    Регистрация
    22.07.2004
    Адрес
    Санкт-Петербург
    Сообщений
    11,100
    Записей в дневнике
    20
    Позывной
    UA1ARN
    atan2(I, q) дает текущую фазу. вычитаем из предыдущей - получаем скорость изменения фазы (т.е. частоту). Нормируем. Изящный способ решения проблем с необходимостью оставаться в пределах 0..2 пи предложен по ссылке, которая оставлена в моем исходнике. Хотя можно и явно проверять на выход и корректировать на 2пи - пока разбираетесь с алгоритмом.

    А было вот так:
    Код:
    const s32 MAX_S32 = 0x7FFFFFFF;
    const f32 PI = 3.141592653;
    const f32 radians_to_int = MAX_S32/PI;
    
    
    {
    ...
    
    static s32 prev_fi;
    
    f32 fi = atan2(Q,I);
    
    s32 fi_int = (s32)(fi*radians_to_int);
    
    s32 d_fi = fi_int - prev_fi_int;
    
    prev_fi_int = fi_int;
    
    So on, so forth...
    
    Vladimir Vassilevsky
    
    DSP and Mixed Signal Design Consultant
    
    http://www.abvolt.com
    Как результат в d_fi значение соответствующее частоте. MAX_S32 с плюсом или минусом соответствуют отклонению от нулевой састоты на 1/2 частоты дискретизации.
    Для тестирования можете настраиваться на немодулированную несущую и наблюдать в d_fi значение.
    Последний раз редактировалось Genadi Zawidowski; 23.06.2017 в 02:14.
    ... Я там глубину сам промерял!

  11. Спасибо от alex_m

  12. #419

    Регистрация
    10.11.2016
    Адрес
    Харьков
    Сообщений
    4,420
    Теперь понятно. Переделал демодулятор, надеюсь что теперь правильно понял:
    Код:
            public void Demodulate(Complex* iq, float* audio, int length)
            {
                var gain = FMGain;
                if (_mode == FmMode.Narrow)
                    gain *= NarrowAFGain;
                for (var i = 0; i < length; i++)
                {
                    // Polar discriminator
                    var f = iq[i] * _iqState.Conjugate();
    
                    // Limiting
                    var m = (float)Math.Sqrt(f.Real * f.Real + f.Imag * f.Imag);
                    if (m > 0.0f)
                    {
                        f /= m;
                    }
    
                    // Angle estimate
                    var phase = (float)Math.Atan2(f.Imag, f.Real);
    
                    var dphase = phase - last_phase;
                    if (dphase < -Math.PI) dphase += TWO_PI;
                    if (dphase > Math.PI) dphase -= TWO_PI;
                    dphase /= (float)Math.PI;
                    last_phase = phase;
    
                    // Scale
                    audio[i] = dphase * gain;
                    _iqState = iq[i];
                }
            }
    Такой вариант работает, но не могу сказать что стало лучше.
    Приаттачил примеры со старым вариантом и с новым.
    Вложения Вложения


  13. #420
    Аватар для Genadi Zawidowski
    Регистрация
    22.07.2004
    Адрес
    Санкт-Петербург
    Сообщений
    11,100
    Записей в дневнике
    20
    Позывной
    UA1ARN
    Выкинуть работу с _iqState, протестировать на немодулированном сигнале (получаем постоянную составляющую, пропорциональную расстройке). Выкинуть Limiting.
    ... Я там глубину сам промерял!

  14. Спасибо от alex_m

Страница 42 из 45 ПерваяПервая ... 3239404142434445 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. шумит TS850S
    от rx6aob в разделе TS-850
    Ответов: 23
    Последнее сообщение: 08.11.2012, 08:50
  2. Шумит ли эмф?
    от АНАТ0ЛИЙ в разделе Технический кабинет
    Ответов: 52
    Последнее сообщение: 22.12.2011, 02:23
  3. Почему шумит антенна?
    от Vlad UR 4 III в разделе Антенны
    Ответов: 109
    Последнее сообщение: 01.06.2009, 14:09
  4. Почему шумит «Лавина»?
    от Гагарин в разделе Технический кабинет
    Ответов: 1
    Последнее сообщение: 05.08.2007, 09:56
  5. Шумит ICOM 756PRO....
    от космос в разделе Трансиверы, приемники КВ/УКВ
    Ответов: 15
    Последнее сообщение: 26.06.2007, 20:34

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •