всем добрый вечер! решил заняться IQ сигналами, сделал запись с помощью АЦП и не узнал сигнал:) решил разобраться и смоделировать процесс в С++:
имеем сумму двух фазоманипулированных сигналов
S(t) = ( 5 * sin( ( 150 ) * 2 * Pi * t / 1000 + ( ( Pi / 4) * ( ( t / 25 ) % 4 ) ) ) )
+ ( 5 * sin( ( 250 ) * 2 * Pi * t / 1000 + ( ( Pi / 4) * ( ( t / 50 ) % 4 ) ) ) );
где ( ( Pi / 4) * ( ( t / 25 ) % 4 ) ) ) и ( ( Pi / 4) * ( ( t / 50 ) % 4 ) ) ) - мгновенные значения фазы сигнала. Первая несущая работает на частоте 150, вторая на частоте 250 Гц соответственно. ФМ модулятор на базе квадратурного имеет следующий вид:
Следовательно выходной сигнал будет задан выражением:
I = ( 5 * sin( ( 150 ) * 2 * Pi * t / 1000 + ( ( Pi / 4) * ( ( t / 25 ) % 4 ) ) ) )
+ ( 5 * sin( ( 250 ) * 2 * Pi * t / 1000 + ( ( Pi / 4) * ( ( t / 50 ) % 4 ) ) ) );
Q = ( 5 * cos( ( 150 ) * 2 * Pi * t / 1000 + ( ( Pi / 4) * ( ( t / 25 ) % 4 ) ) ) )
+ ( 5 * cos( ( 250) * 2 * Pi * t / 1000 + ( ( Pi / 4) * ( ( t / 50 ) % 4 ) ) ) );
e = I + Q;
Для построения спектра использовалась библиотека FFTW:
fftw_complex * in = new fftw_complex[ sizeof(fftw_complex) * 1000 ];
fftw_complex * out = new fftw_complex[ sizeof(fftw_complex) * 1000 ];
fftw_plan PF;
PF = fftw_plan_dft_1d( 1000, in, out, FFTW_FORWARD, FFTW_MEASURE );
fftw_execute( PF );
полученный спектр:
Спектр смоделированного IQ сигнала получился честный. В таком случае почему, при обработке файла с отсчетами АЦП в IQ формате спектр получается неверный? сигнал, который
был в центре при записи оказывается разделенным пополам, одна часть вначале, другая в конце спектра?