МАРСОХОД

Open Source Hardware Project

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня

ТЕМА: Радиоприемник на ПЛИС

Радиоприемник на ПЛИС 3 года 7 мес. назад #6139

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54

Ynicky пишет: Я пробовал в ПЗУ зашивать только
I = A * sin F и Q = A * cos F.
Результат становится немного хуже.

Меняется только абсолютная фаза и амплитуда сигнала гетеродина. Абсолютная фаза не должна ни на что влиять, амплитуда влияет только на возможное переполнение. Относительная фаза I и Q влияет только при фазовой фильтрации зеркальных боковых полос, на прием АМ не должна влиять. Если не напутал.
Так что в гетеродине/смесителе что-то не так (те до фильтров).

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.

Радиоприемник на ПЛИС 3 года 7 мес. назад #6140

Вот упрощенная программа генерации ПЗУ:
#include<stdio.h>
#include<math.h>

#define PI 3.14159265

int main(int argc, char *argv[]) {

	FILE *miffile;
	int imfile,iIQ,iV;
	int iP,iA;
	double dP,dA,dI,dQ;
	double dC = 5.625;/// 360/64  (360 degrees / 2**6 DDS phase)

	if (argv[1])
	{
		imfile = fopen_s(&miffile, argv[1], "w");
		if (imfile)
		{
			printf("miffile was not opened\n");
			return 1;
		}
	}

	if (argc < 1)
	{
		fprintf(stderr, "Usage: m2sdrrom.exe <outfile>.mif\n");
		return 1;
	}

	fprintf(miffile, "DEPTH = 16384;\n");
	fprintf(miffile, "WIDTH = 16;\n");
	fprintf(miffile, "ADDRESS_RADIX = HEX;\n");
	fprintf(miffile, "DATA_RADIX = HEX;\n");
	fprintf(miffile, "CONTENT\n");
	fprintf(miffile, "BEGIN\n");

	for (iV = 0; iV < 16384; iV++)
	{
		iA = iV & 0xFF;///ADC output - 8 bits
		iP = iV >> 8;
		iP &= 0x3F;    ///DDS phase  - 6 bits

		dA = ((double)iA) - 127.5;///-127.5...-0.5 | +0.5...+127.5
		dP = (((double)iP) * dC) * PI / 180;

///		dI = dA * cos(dP) - dA * sin(dP);
///		dQ = dA * sin(dP) + dA * cos(dP);
		dI = dA * cos(dP);
		dQ = dA * sin(dP);

		iIQ = (((int)dQ) & 0xFF) << 8;
		iIQ += (int)dI & 0xFF;
		iIQ &= 0xFFFF;
		fprintf(miffile, "%04X : %04X;\n", iV, iIQ);
	}

	fprintf(miffile, "END;\n");

	fclose(miffile);
    return 0;
}
Своим взглядом ошибок не вижу.
Может вы что-то заметите?

И еще вопрос.
Есть ли у кого пример "Преобразователя Гилберта"
для получения квадратуры сигналов с АЦП.



Николай.
Вложения:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Радиоприемник на ПЛИС 3 года 7 мес. назад #6141

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
sin/cos позже посмотрю.
Преобразование Гильберта давно моделировал, и не в Octave, а в Maple, буду заново разбираться...

Попробовал сравнить в Octave свой алгоритм синтеза ФНЧ с fir1 (из пакета signal), результаты с плавающей точкой:
синие графики - fir1, красные - мой.
Вложения:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Радиоприемник на ПЛИС 3 года 7 мес. назад #6142

  • Falcon
  • Falcon аватар
  • Не в сети
  • Осваиваюсь на форуме
  • Осваиваюсь на форуме
  • Сообщений: 31
  • Спасибо получено: 8
Рекомендую сделать так.

Вложения:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Радиоприемник на ПЛИС 3 года 7 мес. назад #6143

To Falcon:
Похоже на фазофильтровый приемник.



Николай.
Вложения:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Радиоприемник на ПЛИС 3 года 7 мес. назад #6144

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54

Ynicky пишет: /// dI = dA * cos(dP) - dA * sin(dP);
/// dQ = dA * sin(dP) + dA * cos(dP);
dI = dA * cos(dP);
dQ = dA * sin(dP);

Закомментированное вызывает переполнение, тк амплитуда sqrt(2)*dA. Думаю, если при этом лучше слышно, значит прием идет на паразитных гармониках, а не как задумано.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Радиоприемник на ПЛИС 3 года 7 мес. назад #6145

Нет, тут у меня все правильно.
Я просто удалил отладочную информацию и лишние действия.
На самом деле там было так:
dI = (dA * cos(dP) - dA * sin(dP)) / 1.41421356;
dQ = (dA * sin(dP) + dA * cos(dP)) / 1.41421356;

Николай.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Радиоприемник на ПЛИС 3 года 7 мес. назад #6146

  • Falcon
  • Falcon аватар
  • Не в сети
  • Осваиваюсь на форуме
  • Осваиваюсь на форуме
  • Сообщений: 31
  • Спасибо получено: 8

Ynicky пишет: To Falcon:
Похоже на фазофильтровый приемник.

Он и есть. Только все происходит в цифре.
Это тот же Гильберт. Но не много другой подход.
Да и все минусы отсутствуют.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Falcon.

Радиоприемник на ПЛИС 3 года 7 мес. назад #6147

  • Falcon
  • Falcon аватар
  • Не в сети
  • Осваиваюсь на форуме
  • Осваиваюсь на форуме
  • Сообщений: 31
  • Спасибо получено: 8

Ynicky пишет: Нет, тут у меня все правильно.
Я просто удалил отладочную информацию и лишние действия.
На самом деле там было так:
dI = (dA * cos(dP) - dA * sin(dP)) / 1.41421356;
dQ = (dA * sin(dP) + dA * cos(dP)) / 1.41421356;

Николай.


Ну и зачем вам эти лишнее математические действия?
Делайте проще.
dI = dA * cos(dP);
dQ = dA * sin(dP);
P.S. деление на 1.41421356; возникает именно из за сумы Sin + Cos Плюс имеете фазовый сдвиг в 45 град. Что собственно в целом не важно. Но зачем?
Если привести ваше выражение то выйдет
dI = dA * 1.41421356 * cos(dP - Pi / 4) / 1.41421356

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Falcon.

Радиоприемник на ПЛИС 3 года 7 мес. назад #6148

Сделал еще несколько раз сравнение на средневолновой станции.
Похоже, что все-таки никакой разницы нет, хотя раньше проверял, казалось
что разница есть.
Извиняюсь, что ввел в заблуждение.



Николай.
Вложения:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 1.638 секунд
ВКонтакте  facebook  GitHub  YouTube  Twitter
Вы здесь: Начало Forum Наш форум Вопросы о плате Марсоход Радиоприемник на ПЛИС