lennen 0 26 ноября, 2016 Опубликовано 26 ноября, 2016 · Жалоба Я все время делал это на векторном оборудовании и думал, что достаточно взять модуль от комплексного числа, чтобы получился реальный сигнал в выборках. А затем если взять от него БПФ, то все станет на свои места. Вот код в Матлаб: %Простейший OFDM-символ s = ifft(S); OFDMsend = abs(s+10000)-10000 %srec = fft(OFDMsend); plot(fft(OFDMsend)); Как бы не так! Появляется много лишних точек в созвездии. Тогда я не понимаю, как это делается. Подскажите, пожалуйста? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
quato_a 3 26 ноября, 2016 Опубликовано 26 ноября, 2016 · Жалоба n = 201; map_re = randi([0 1], [1,n]); map_im = randi([0 1], [1,n]); for i = 1:n if map_re(i) == 0 map_re(i) = -1; end end for i = 1:n if map_im(i) == 0 map_im(i) = -1; end end mapc = map_re + 1i*map_im; mapc(101) = complex(0); mapc = mapc * 2^(1/2) / 2; figure; plot(mapc, '*'); grid on; maptx = [mapc(101:201) zeros(1,823) mapc(1:100)]; figure; plot(real(maptx)); grid on; tx = ifft(maptx, 1024); figure; plot(real(tx)); grid on; figure; plot_psd(tx, 100e6, 256); maprx = fft(tx, 1024); figure; plot(maprx, '*'); grid on; function plot_psd(x, Fs, N) % Строит график спектральной плотности мощности сигнала (Power Spectral Density) нормированный по log оси и fs NH = floor (N/2); xPsd = psd (x/2^(12-1), N, Fs); length(xPsd); if (length(xPsd) ~= N) % real xPsdResh(1:NH) = xPsd(1:NH); xFreq = (0:NH-1)/N*Fs*10^-6; length(xPsdResh); length(xFreq); else % complex xPsdResh(1:NH) = xPsd(NH+1:N); xPsdResh(NH+1:N) = xPsd(1:NH); xFreq = ((0:N-1)-NH)/N*Fs*10^-6; end xLog = 10*log10(xPsdResh); % xFreq = ((0:N-1)-NH)/N*Fs*10^-6; plot( xFreq, xLog, 'b-'); grid; end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться