Демодуляция FM радио + SDR

kirill3266
Сообщения: 1
Зарегистрирован: 07 дек 2023, 21:20

Демодуляция FM радио + SDR

Сообщение kirill3266 »

Всем привет, пожалуйста, помогите разобраться.
Имеется в наличии SDR HackRF ONE, пытаюсь воспроизвести FM сигнал на частоте 95.5 МГц, записанный на частоте 95 МГц при частоте дискретизации 2 млн сэмплов/с при помощи программы HDSDR. Прочитал все связанные с этим статьи, но видимо или что-то где-то недопонял, или ошибся. В общем случае читаю IQ компоненты в матлабе из wav файла, перемножаю их на соответственно косинусоиду и синусоиду искомой частоты, а после фильтрую сигнал полосовым фильтром, однако ни воспроизведение огибающей амплитуды, ни огибающей частоты, искомого сигнала не дают. Код программы, параметры записи и файл прилагаю по ссылке:https://drive.google.com/drive/folders/ ... sp=sharing

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

close all;

L = 20000000;

Fc = 95500000;

[A, Fs] = audioread("C:\Users\Kirill Afanasev\Desktop\RBU\FM.wav", [1,L]);

t=((0:L-1)/Fs);

inphase = A(:,1);
quadrature = A(:,2);
IQData = inphase+1i*quadrature;

Y = fft(IQData);

plot(Fs/L*(-L/2:L/2-1),abs(fftshift(Y)))
title("Complex Magnitude of fft Spectrum")
xlabel("f (Hz)")
ylabel("|fft(X)|")
ylim([0, 50000])

inphase = inphase.*cos(2*pi*Fc*t)';
quadrature = quadrature.*sin(2*pi*Fc*t)';

IQData =  inphase+1i*quadrature;

Y = fft(IQData);

plot(Fs/L*(-L/2:L/2-1),abs(fftshift(Y)))
title("Complex Magnitude of fft Spectrum(moved)")
xlabel("f (Hz)")
ylabel("|fft(X)|")
ylim([0, 50000])

% Visualize magnitude and phase responses
freqz(designedFilter.Coefficients,[],Fs)
IQData = filtfilt(designedFilter,IQData);

Y = fft(IQData);

plot(Fs/L*(-L/2:L/2-1),abs(fftshift(Y)))
title("Complex Magnitude of fft Spectrum(filtered and moved)")
xlabel("f (Hz)")
ylabel("|fft(X)|")
ylim([0, 50000])

Amp = sqrt(quadrature.^2+inphase.^2);

% Phase = (diff(quadrature).*inphase(2:end)-diff(inphase).*quadrature(2:end))./(quadrature(2:end).^2+inphase(2:end).^2);

title("Filtered Amp")
xlabel("Sample number")
ylabel("Amp")
Y = fft(Amp);

plot(Fs/L*(-L/2:L/2-1),abs(fftshift(Y)))
title("Complex Magnitude of fft Amp(filtered and moved)")
xlabel("f (Hz)")
ylabel("|fft(X)|")
ylim([0, 50000])
sound(resample(Amp,192000,Fs),192000);

kaa
Сообщения: 40
Зарегистрирован: 17 мар 2019, 20:03

Re: Демодуляция FM радио + SDR

Сообщение kaa »

Похоже ваш сигнал уже перенесен на нулевую частоту, достаточно только частотную демодуляцию выполнить

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

L = 10000000;
[A, Fs] = audioread("./FM.wav", [1,L]);
inphase = A(:,1);
quadrature = A(:,2);
y = inphase + 1i*quadrature;
Fcs = [-900e3, 0, 500e3, 900e3];
for k = 1 : length(Fcs)
    Fc = Fcs(k);
    t=((0:L-1)/Fs);
    yq = y.*exp(-1i*2*pi*Fc*t).';
    q = 25;
    yq = resample(yq, 1, q);
    fdev = 20000;
    z = (1/(2*pi*fdev)) * diff(unwrap(angle(yq))) * (Fs / q);
    sound(z, Fs/q);

    pause(L / Fs);
end

Ответить