Имеется в наличии 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);