Перейти к содержанию

    

Чем заменить устаревшую функцию psd()

Для отображения спектра сигнала использую устаревшую функцию psd() примерно так:

figure
psd(signal(100:end),2^14,fs/1e3)
axis([35 37 -80 40]),xlabel('КHz'),title('Спектр сигнала')

Поучается такая картинка

post-39850-1524989098_thumb.jpg

Но Матлаб выдает предупреждения об устаревшей функции.

Чем ее можно заменить чтобы отобразить спектр сигнала в таком же виде как на предст. картинке?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Чем ее можно заменить чтобы отобразить спектр сигнала в таком же виде как на предст. картинке?
Чем обычная fft() не устраивает? Нужно только результат в dB перевести, но это тривиально.

 

В моем наборе функций есть fftplot(). Она довольно топорная, но посмотреть можно.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Чем обычная fft() не устраивает? Нужно только результат в dB перевести, но это тривиально.

В моем наборе функций есть fftplot(). Она довольно топорная, но посмотреть можно.

fft() почему-то рисует немного не то. Спектр смещен вправо по оси частот. Не врубаюсь, почему?

clear all; 
close all; 

%% Исходные установки

% Битовая посл.
%bit_stream = (rand(1, 20) > 0.5);
bit_stream = [0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1];
%bit_stream = [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
% длина бит. посл.
N = length(bit_stream);

% Несущая частота Гц
f = 36000;
% Кол. выб. на период несущей 
nsp = 4; 
% Частота семплирования Гц 
fs = f*nsp;
% Частота доплера Гц
fdop = 0;
% время выборки
Ts = 1/fs;
fprintf('Ts %d\n', Ts);
% Амплитуда
A = 0.1;
% колич. периодов несущей для одного симв.   
sone = 360;
% Символьная частота Гц
fsim = f/sone;
fprintf('fsim %d\n', fsim);
% Количество выборок необх. для одного символа 
% при символьной скорости fsim
tsymbol = f*nsp/fsim;
fprintf('tsymbol %d\n', tsymbol);

% несущая частота для PLL Гц
fref = f;
% Доплер для PLL
ferr = fdop; 
fprintf('fref %d\n', fref);
ttotal = N*tsymbol;
% Частота Найквиста
fn = fs/2;
% несущая и доплер в % по отн. к fs
fb = f/fs;
fbdop = fdop/fs;

%% Входной сигнал

t = 0;
for i = 1:N
%  phase = pi * bit_stream(i);
 phase = 0;
 for j = 1:tsymbol
   % входной сигнал
   BPSK_signal(t+1) = cos(2*pi*(fb+fbdop)*t + phase); 
   t = t + 1;
 end 
end

%% Графика

figure
psd(BPSK_signal(100:end),2^14,fs/1e3)
axis([35 37 -120 40]),xlabel('КHz'),title('Спектр сигнала')

figure
Nb = length(BPSK_signal);
X_mags = abs(fft(BPSK_signal));
bin_vals = [10 : Nb-1];
fax_Hz = bin_vals*fs/Nb;
Nb_2 = ceil(Nb/2);
plot(fax_Hz(1:Nb_2), 10*log10(X_mags(1:Nb_2)))
axis([35.5e3 36.5e3 -120 40]),xlabel('КHz'),title('Спектр сигнала')

post-39850-1525073581_thumb.jpg post-39850-1525073599_thumb.jpg

А, разобрался.

Спасибо.

Примерно так:

figure
Nb = length(BPSK_signal);
X_mags = abs(fft(BPSK_signal));
bin_vals = [1 : Nb];
fax_Hz = bin_vals*fs/Nb;
plot(fax_Hz(1:Nb), 10*log10(X_mags(1:Nb)))
axis([35.5e3 36.5e3 -120 40]),xlabel('Hz'),title('Спектр сигнала')

Изменено пользователем Acvarif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти