Страница 2 из 3

Re: программный перенос спектра

Добавлено: 28 июн 2018, 11:11
Бахурин Сергей
Есть возможность записать поток данных и АЦП?

Re: программный перенос спектра

Добавлено: 28 июн 2018, 11:14
Feofan
Да, возможно записывать квадратурный сигнал с ацп в файл, можно также записать в файл и сигнал после переноса.

Re: программный перенос спектра

Добавлено: 28 июн 2018, 11:36
Бахурин Сергей
Записывайте посмотрю

Re: программный перенос спектра

Добавлено: 28 июн 2018, 11:38
Бахурин Сергей
Желательно ещё си функцию считывания файла в массив комплексных данных тоже приложить

Re: программный перенос спектра

Добавлено: 28 июн 2018, 11:51
Feofan
Оба файла с частотой дискретизации 1,4 МГц, формат данных 8 бит.
Сигнал с ацп https://yadi.sk/d/1aMZTRsi3YXFMt.
Сдвинутый сигнал https://yadi.sk/d/swGRPLgb3YXFdM.
Немного не понял какая функция нужна. Функция считывания данных с приемника и формирования квадратурного сигнала в виде массива?

Re: программный перенос спектра

Добавлено: 28 июн 2018, 12:06
Бахурин Сергей
Ок функция не нужна. Я думал будет какой то специфический формат файла.

Re: программный перенос спектра

Добавлено: 28 июн 2018, 12:10
Бахурин Сергей
Я завтра постараюсь посмотреть.

Re: программный перенос спектра

Добавлено: 30 июн 2018, 17:29
Бахурин Сергей
Посмотрел ваши файлы.
В вашем программном переносе частоты где -то явно ошибка.
Вот скрипт из Octave которым анализировал ваши файлы

Код: Выделить всё

clear all; close all; clc;
pkg load signal;


% читаю стерео сигнал с ацп из файла
[adc, Fs, Nbits] = wavread('adc.wav');

% перевожу стерео из файла в один комплексный сигнал
adc = adc(:,1) + 1i * adc(:,1);

% ограничил. для спектра миллиона сэмплов достаточно
adc = adc(1:1E6);

% программное смещение на +100 кГц
y = adc.*exp(2i * pi * 1e5/Fs * (0:length(adc)-1)');

% читаю стерео сдвинутый сигнал из файла
[shf, Fs, Nbits] = wavread('shift.wav');

% перевожу стерео из файла в один комплексный сигна
shf = shf(:,1) + 1i * shf(:,1);

% ограничил. для спектра миллиона сэмплов достаточн
shf = shf(1:1E6);

% Строю спектры для считанных сигналов и программно смещенного
NFFT = 2048;
w = hamming(NFFT)';

[ADC, f] = pwelch(adc, w, 0.5, NFFT, Fs, 'shift');
[SHF, f] = pwelch(shf, w, 0.5, NFFT, Fs, 'shift');
[Y,   f] = pwelch(y,   w, 0.5, NFFT, Fs, 'shift');

 f = f/1000;

figure; plot(f, 10*log10(ADC), f, 10*log10(SHF), f, 10*log10(Y));
grid on;
axis([-Fs/2e3, Fs/2e3, -80, -30]);
xlabel('frequency, kHz');
ylabel('magnitude, dB');
legend('АЦП из файла','смещение из файла', 'программно сдвинутый');

В результате получил график:
freqshift.png
Из графика видно что сигнал с ацп смещается на 100 кГц если я его умножаю на экспоненту как в коде

Код: Выделить всё

% программное смещение на +100 кГц
y = adc.*exp(2i * pi * 1e5/Fs * (0:length(adc)-1)');
Смещенный спектр из вашего файла совсем не похож. Значит ошибка в вашем программном переносе.
Если хотите, то могу вам помочь путем написания функции частотного смещения в свою либу, вы ее подключите и сможете использовать. Там кстати есть уже алгоритмы готовые цифровой фильтрации и FFT (чуть проигрывают матлабовским и FFTW но не такие монструозные).

Re: программный перенос спектра

Добавлено: 30 июн 2018, 17:50
Feofan
Спасибо за столь подробный ответ.
От предложения откажусь, надо все таки разобраться и самостоятельно реализовать функцию переноса - требования диплома, но все равно спасибо.
P.S.
У вас спектр почему то получился симметричный, хотя сигнал комплексный.

Re: программный перенос спектра

Добавлено: 30 июн 2018, 19:25
Бахурин Сергей
Ну это не у меня спектр симметричный . Это такие данные вы прислали :roll: