-
Leka
-
Автор темы
-
Не в сети
-
Живу я здесь
-
-
Сообщений: 635
-
Спасибо получено: 54
-
-
|
Ynicky пишет: Я пробовал в ПЗУ зашивать только
I = A * sin F и Q = A * cos F.
Результат становится немного хуже.
Меняется только абсолютная фаза и амплитуда сигнала гетеродина. Абсолютная фаза не должна ни на что влиять, амплитуда влияет только на возможное переполнение. Относительная фаза I и Q влияет только при фазовой фильтрации зеркальных боковых полос, на прием АМ не должна влиять. Если не напутал.
Так что в гетеродине/смесителе что-то не так (те до фильтров).
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от Leka.
|
-
Ynicky
-
-
Не в сети
-
Завсегдатай
-
-
Сообщений: 209
-
Спасибо получено: 39
-
-
-
-
|
Вот упрощенная программа генерации ПЗУ: #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;
}
Своим взглядом ошибок не вижу.
Может вы что-то заметите?
И еще вопрос.
Есть ли у кого пример "Преобразователя Гилберта"
для получения квадратуры сигналов с АЦП.
Николай.
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
Leka
-
Автор темы
-
Не в сети
-
Живу я здесь
-
-
Сообщений: 635
-
Спасибо получено: 54
-
-
|
sin/cos позже посмотрю.
Преобразование Гильберта давно моделировал, и не в Octave, а в Maple, буду заново разбираться...
Попробовал сравнить в Octave свой алгоритм синтеза ФНЧ с fir1 (из пакета signal), результаты с плавающей точкой:
синие графики - fir1, красные - мой.
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
Ynicky
-
-
Не в сети
-
Завсегдатай
-
-
Сообщений: 209
-
Спасибо получено: 39
-
-
-
-
|
To Falcon:
Похоже на фазофильтровый приемник.
Николай.
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
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. Думаю, если при этом лучше слышно, значит прием идет на паразитных гармониках, а не как задумано.
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
Ynicky
-
-
Не в сети
-
Завсегдатай
-
-
Сообщений: 209
-
Спасибо получено: 39
-
-
-
-
|
Нет, тут у меня все правильно.
Я просто удалил отладочную информацию и лишние действия.
На самом деле там было так:
dI = (dA * cos(dP) - dA * sin(dP)) / 1.41421356;
dQ = (dA * sin(dP) + dA * cos(dP)) / 1.41421356;
Николай.
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
Falcon
-
-
Не в сети
-
Осваиваюсь на форуме
-
-
Сообщений: 31
-
Спасибо получено: 8
-
-
|
Ynicky пишет: To Falcon:
Похоже на фазофильтровый приемник.
Он и есть. Только все происходит в цифре.
Это тот же Гильберт. Но не много другой подход.
Да и все минусы отсутствуют.
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от 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.
|
-
Ynicky
-
-
Не в сети
-
Завсегдатай
-
-
Сообщений: 209
-
Спасибо получено: 39
-
-
-
-
|
Сделал еще несколько раз сравнение на средневолновой станции.
Похоже, что все-таки никакой разницы нет, хотя раньше проверял, казалось
что разница есть.
Извиняюсь, что ввел в заблуждение.
Николай.
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
Время создания страницы: 1.982 секунд