Формирование пачки радиоимпульсов и его амплитудный спектр

Андрей1991
Сообщения: 64
Зарегистрирован: 11 сен 2015, 23:37

Формирование пачки радиоимпульсов и его амплитудный спектр

Сообщение Андрей1991 »

Можете помочь с программой. Задание такое нужно сформировать пачку радиоимпульсов и построить его амплитудный спектр. Исходные данные: частота дискретизации 28 МГц, период повторения 10 мкс, длительность импульса 1 мкс, параметр частоты Доплера меняется может быть любым.
Исходник программы:

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

close all;
clear all;
% Исходные данные:
j=sqrt(-1);    % Мнимая единица
F_prom=63;     % Промежуточная частота (МГц)
fs=28;         % Частота дискретизации (МГц)
dt=1/fs;       % Шаг дискретизации (мкс)
F_rep=0.1;     % Частота повторения импульса (МГц)
T_rep=1/F_rep; % Период повторения импульса (мкс)
tau_imp=1;     % Длительность импульса (мкс)
N_imp=input('Количество импульсов в пачке: ');               % Количество импульсов в пачке
F_Doppler=input('Доплеровский сдвиг частоты (кГц): ')*1e-3;  % Доплеровский сдвиг частоты (кГц)                                                

N_sample_1=round(T_rep*fs);       % Количество отсчетов в одном периоде повторения
N_sample_imp=round(tau_imp*fs);   % Количество отсчетов в одном импульсе
N_sample_signal=N_sample_1*N_imp; % Количество отсчетов в сигнале

figure(1)
% Формирование когерентной пачки радиоимпульсов
subplot(211)
t=(0:N_sample_signal-1)*dt;                     % Интервал времени сигнала
x=cos(2*pi*(F_prom+F_Doppler)*t);               % Формирование гармонического сигнала
U_1=zeros(1,N_sample_1); U_1(1:N_sample_imp)=1; % Формирование одного импульса
U_imp=ones(1,N_imp);                            % Массив содержащий, столько единиц, сколько импульсов в пачке
U=kron(U_imp,U_1);                              % Последовательность импульсов
U1=x.*U;                                         % Когерентная пачка радиоимпульсов
plot(t,U1)
xlim([0,12])
xlabel('t (мкс)')
title ('Когерентная пачка радиоимпульсов (1 способ)')
grid on

subplot(212)
% Второй способ формирования когерентной пачки радиоимпульсов
for n=0:N_imp-1
z=find(t>=tau_imp+n*T_rep&t<=n*T_rep+T_rep);
x(z)=0;
end
plot(t,x) 
xlim([0,12])
xlabel('t (мкс)')
title ('Когерентная пачка радиоимпульсов (2 способ)')
grid on

figure(2)
% Вычисление спектра
NFFT=N_sample_signal; % Размерность ДПФ
df=fs/NFFT;           % Шаг по частоте (МГц)
f=(0:NFFT-1)*df;      % Массив частот (МГц)
spectr_real_signal=fft(x,NFFT);                   % Комплексный спектр вещественного сигнала
amp_spectr_real_signal=abs(spectr_real_signal);   % Амплитудный спектр вещественного сигнала 
plot(f,amp_spectr_real_signal)                         
xlabel('f (МГц)')
title ('Амплитудный спектр вещественного сигнала')
Пачку радиоимпульсов формирую двумя способами.
При построении амплитудного спектра скажем, если я беру и ставлю частоту Доплера в программе 25 кГц получается амплитудный спектр имеющий побочные спектральные составляющие с чем это может быть связано не пойму.
Вместе с письмом отсылаю картинки спектров
Вложения
Новый точечный рисунок.jpg

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Формирование пачки радиоимпульсов и его амплитудный спектр

Сообщение Бахурин Сергей »

2 проблемы:
1) Прямоугольный импульс имеет бесконечный спектр который вы и наблюдаете. Вы можете это игнорировать или наложить окно на ваш импульс для сглаживания фронтов.
2) При сдвиге частоты вы можете не попадать по частоте на бин FFT. В результате спектр растечется.

Андрей1991
Сообщения: 64
Зарегистрирован: 11 сен 2015, 23:37

Re: Формирование пачки радиоимпульсов и его амплитудный спектр

Сообщение Андрей1991 »

Т.е. если применить окно это повлияет на результат, побочные спектральные отсчеты исчезнут? Мне по заданию конечно нужно менять частоту Доплера, в конце мне нужно получить комплексную огибающую сигнала. Если я буду работать сразу с комплексной огибающей сигнала, где только учитывается доплеровская частота, а высокочастотная составляющая нет, то спектр не содержит побочных спектральных отсчетов. Не очень понимаю что такое бин FFT?

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Формирование пачки радиоимпульсов и его амплитудный спектр

Сообщение Бахурин Сергей »

ДПФ считает спектр для фиксированной сетки частот. Если частота сигнала не точно попадает на эту сетку, то получим растекание спектра. Бин это и есть один спектральный отсчет дискретного периодического сигнала.

Андрей1991
Сообщения: 64
Зарегистрирован: 11 сен 2015, 23:37

Re: Формирование пачки радиоимпульсов и его амплитудный спектр

Сообщение Андрей1991 »

Ну т.е. от этого эффекта не избавится при таких моих параметрах? Если я правильно понял если частота сигнала не кратна шагу по частоте в спектре Fs/N, то возникает растекание?

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Формирование пачки радиоимпульсов и его амплитудный спектр

Сообщение Бахурин Сергей »

да все верно понимаете. Однако растекание не означает что нельзя выделить комплексную огибающую и провести обработку сигналов. Все можете делать как планировали этот эффект вам не помешает. Кроме того на ваших картинках эффект от паразитной модуляции которая возникла при цифровом представлении сигнала.

Андрей1991
Сообщения: 64
Зарегистрирован: 11 сен 2015, 23:37

Re: Формирование пачки радиоимпульсов и его амплитудный спектр

Сообщение Андрей1991 »

Вы упомянули как раз комплексную огибающую у меня как раз и заключается работа с комплексной огибающей. Может поможете разобраться с моей задачей.Сейчас я ее расскажу. Смотрите есть у меня комплексная огибающая сигнала по этой комплексной огибающей можно найти вещественный сигнал (т.е. если сделать такую процедуру домножить на комплексную огибающую сигнала e^(j*w0*t) соответственно спектр у меня сместится в область высоких частот), потом я нахожу вещественный сигнал просто беру реальную часть от полученного сигнала смещенного в область высоких частот, это по определению. Дальше уже с помощью встроенной функции Гильберта получаю аналитический сигнал, а потом полученный сигнал умножаю на e^(-j*w0*t) т.е. должен получить такую же комплексную огибающую сигнала, что и исходную с которой проделывал такую процедуру. Когда я все это сделаю получается так, что когда я строю амплитудные спектры этих двух комплексных огибающих сигналов (исходной и полученной по исходной комплексной огибающей) спектры по уровню отличаются не намного но все же есть разница. Дальше я строю фазовый спектр для двух комплексных огибающих сигналов (до стробирования это figure 3) значения фазы отличаются есть маркером померить точки на двух графиках. Последней и самой главной процедурой это комплексную огибающую необходимо умножить на две последовательности стробирующих импульсов (две последовательности сдвинуты на 0.5 мкс друг от друга), когда я проделал эту операцию опять строю фазовые спектры сигналов и их разность в результате для двух комплексных огибающих значения совершенно разные в чем может проблема быть я не знаю, может вы подскажите. По фазовому спектру я смогу определять доплеровскую частоту.
Код программы где идет сравнение двух комплексных огибающих

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

% Математическая модель. Измерение fдоп по фазовому спектру сигнала
clear all;close all;
% Исходные данные:
fs=28;         % Частота дискретизации (МГц)
dt=1/fs;       % Шаг дискретизации (мкс)
F_rep=0.1;     % Частота повторения импульса (МГц)
T_rep=1/F_rep; % Период повторения импульса (мкс)
tau_imp=1;     % Длительность импульса (мкс)
N_imp=input('Количество импульсов в пачке: ');                 % Количество импульсов в пачке
F_Doppler=input('Доплеровский сдвиг частоты (кГц): ')*1e-3;    % Доплеровский сдвиг частоты (кГц)                                                

phase_init=0;                       % Случайная начальная фаза сигнала
N_sample_1=round(T_rep*fs);         % Количество отсчетов в одном периоде повторения
N_sample_imp=round(tau_imp*fs);     % Количество отсчетов в одном импульсе
N_sample_signal=N_sample_1*N_imp;   % Количество отсчетов в сигнале

figure(1)
% Формирование КН сигнала
U_1=zeros(1,N_sample_1); U_1(1:N_sample_imp)=1; % Формирование одного импульса
U_imp=ones(1,N_imp);                            % Массив содержащий, столько единиц, сколько импульсов в пачке
U=kron(U_imp,U_1);                              % Последовательность импульсов
N_signal=length(U);                             % Количество отсчётов в сигнале
t=(0:N_signal-1)*dt;
U_signal=U.*exp(1i*2*pi*F_Doppler*t).*exp(1i*2*pi*7*t);     
U_signal=U_signal*exp(1i*phase_init);                       
plot(t,real(U_signal))
xlabel('t (мкс)')
grid on

% Формирование аналитического сигнала
analitic_signal=hilbert(real(U_signal)); 

% Формирование комплексной огибающей сигнала
analitic_signal_0=analitic_signal.*exp(-1i*2*pi*7*t);

% Исходная комплексная огибающая сигнала 
U_signal1=U.*exp(1i*2*pi*F_Doppler*t);       
U_signal1=U_signal1*exp(1i*phase_init);      

figure(2)
% Вычисление амплитудного спектра
NFFT=N_signal;        % Размерность ДПФ
df=fs/NFFT;           % Шаг по частоте (МГц)
f=(0:NFFT-1)*df;      % Массив частот (МГц)
f_plot=f-fs/2;        % Массив частот от -fs/2 до fs/2
subplot(411)
spectr_real_signal=fft(real(U_signal),NFFT);                % Комплексный спектр вещественного сигнала
amp_spectr_real_signal=abs(fftshift(spectr_real_signal));   % Амплитудный спектр вещественного сигнала 
plot(f_plot,amp_spectr_real_signal)                         
xlim([-fs/2,fs/2])
xlabel('f (МГц)')
title ('Амплитудный спектр вещественного сигнала')
grid on
subplot(412)
spectr_analitic_signal=fft(analitic_signal,NFFT);                 % Комплексный спектр аналитического сигнала
amp_spectr_analitic_signal=abs(fftshift(spectr_analitic_signal)); % Амплитудный спектр аналитического сигнала 
plot(f_plot,amp_spectr_analitic_signal)                         
xlim([-fs/2,fs/2])
xlabel('f (МГц)')
title ('Амплитудный спектр аналитического сигнала')
grid on
subplot(413)
spectr_analitic_signal_0=fft(analitic_signal_0,NFFT);                 % Комплексный спектр комплексной огибающей сигнала
amp_spectr_analitic_signal_0=abs(fftshift(spectr_analitic_signal_0)); % Амплитудный спектр комплексной огибающей сигнала
plot(f_plot,amp_spectr_analitic_signal_0)                             
xlim([-fs/2,fs/2])
xlabel('f (МГц)')
title ('Амплитудный спектр комплексной огибающей сигнала')
grid on
subplot(414)
spectr_U_signal1=fft(U_signal1,NFFT);                         % Комплексный спектр комплексной огибающей сигнала
amp_spectr_U_signal1=abs(fftshift(spectr_U_signal1));         % Амплитудный спектр комплексной огибающей сигнала
plot(f_plot,amp_spectr_U_signal1)                             
xlim([-fs/2,fs/2])
xlabel('f (МГц)')
title ('Амплитудный спектр комплексной огибающей сигнала (исходный)')
grid on

% Построение фазового спектра до стробирования
n_F_rep=round(F_rep/df);                                      % Номер отсчета спектра, соответствующего частоте повторения
[Spectr_max,Ind_max]=max(amp_spectr_analitic_signal_0);       % Максимальное значение спектральной составляющей в спектре
n_F_max=Ind_max;                                              % Номер отсчета частоты, соответствующей максимальной спектральной линии
n_F=n_F_max+(-5*n_F_rep:n_F_rep:5*n_F_rep);                   % Массив значений частоты на гармониках частоты повторения 
f_of_harmonics=f_plot(n_F); 

figure(3)
% Фазовый спектр до стробирования
subplot(211)
phase_spectr=angle(fftshift(spectr_analitic_signal_0));  
phase_spectr_harmonics=unwrap(phase_spectr(n_F));
plot(f_of_harmonics*1000,phase_spectr_harmonics,'red')
hold on
xlabel('f (кГц)')
ylabel('\phi (рад)')
title('Фазовый спектр сигнала до стробирования')
stem(f_of_harmonics*1000,phase_spectr_harmonics,'red','LineWidth',2)
grid on
hold off

% Фазовый спектр до стробирования (исходная компл. огибающая)
subplot(212)
phase_spectr1=angle(fftshift(spectr_U_signal1));  
phase_spectr_harmonics1=unwrap(phase_spectr1(n_F));
plot(f_of_harmonics*1000,phase_spectr_harmonics1,'red')
hold on
xlabel('f (кГц)')
ylabel('\phi (рад)')
title('Фазовый спектр сигнала до стробирования (исходная компл. огибающая)')
stem(f_of_harmonics*1000,phase_spectr_harmonics1,'red','LineWidth',2)
grid on
hold off

% Формирование последовательности стробирующих импульсов
% 1-я последовательность стробов
t_strobe=tau_imp/2;                                     % Длительность строба (мкс)
N_sample_str=round(t_strobe*fs);                        % Количество отсчетов в одном стробе
U_1_str=zeros(1,N_sample_1); U_1_str(1:N_sample_str)=1; % Формирование одного строба
U_ref1=kron(U_imp,U_1_str);                             % Формирование 1-й последовательности стробов             

% 2-я последовательность стробов
U_ref2=circshift(U_ref1.',N_sample_str).';              % Сдвиг массива 2-й последовательности стробов относительно 1-й последовательности стробов

figure(4)
% Вычисление амплитудного спектра после стробирования
% Амплитудный спектр сигнала после стробирования (1-й полустроб) 
subplot(411)
analitic_signal_0_str_1=analitic_signal_0.*conj(U_ref1); 
spectr_str_1=fft(analitic_signal_0_str_1,NFFT);          
amp_spectr_str_1=abs(fftshift(spectr_str_1));         
plot(f_plot,amp_spectr_str_1)                     
grid on
xlim([-fs/2,fs/2])
xlabel('f (МГц)')
title('Амплитудный спектр сигнала после стробирования (1-й полустроб) ')

% Амплитудный спектр сигнала после стробирования (2-й полустроб) 
subplot(412)
analitic_signal_0_str_2=analitic_signal_0.*conj(U_ref2);
spectr_str_2=fft(analitic_signal_0_str_2,NFFT);   
amp_spectr_str_2=abs(fftshift(spectr_str_2));     
plot(f_plot,amp_spectr_str_2)                     
grid on
xlim([-fs/2,fs/2])
xlabel('f (МГц)')
title('Амплитудный спектр сигнала после стробирования (2-й полустроб) ')

% Амплитудный спектр сигнала после стробирования (1-й полустроб) (исход. компл. огиб.) 
subplot(413)
U_signal1_1=U_signal1.*conj(U_ref1); 
spectr_str_U_signal1_1=fft(U_signal1_1,NFFT);          
amp_spectr_str_U_signal1_1=abs(fftshift(spectr_str_U_signal1_1));         
plot(f_plot,amp_spectr_str_U_signal1_1)                     
grid on
xlim([-fs/2,fs/2])
xlabel('f (МГц)')
title('Амплитудный спектр сигнала после стробирования (1-й полустроб)(исход. компл. огиб) ')

% Амплитудный спектр сигнала после стробирования (2-й полустроб) (исход. компл. огиб.) 
subplot(414)
U_signal1_2=U_signal1.*conj(U_ref2);
spectr_str_U_signal1_2=fft(U_signal1_2,NFFT);   
amp_spectr_str_U_signal1_2=abs(fftshift(spectr_str_U_signal1_2));     
plot(f_plot,amp_spectr_str_U_signal1_2)                     
grid on
xlim([-fs/2,fs/2])
xlabel('f (МГц)')
title('Амплитудный спектр сигнала после стробирования (2-й полустроб) (исход. компл. огиб) ')

figure(5)
% Фазовый спектр после стробирования (1-й полустроб) 
subplot(411)
phase_spectr_str_1=angle(fftshift(spectr_str_1));
phase_spectr_harmonics_str_1=unwrap(phase_spectr_str_1(n_F));
plot(f_of_harmonics*1000,phase_spectr_harmonics_str_1,'red')
hold on
xlabel('f (кГц)')
ylabel('\phi (рад)')
title('Фазовый спектр сигнала после стробирования (1-й полустроб')
stem(f_of_harmonics*1000,phase_spectr_harmonics_str_1,'red','LineWidth',2) 
grid on
hold off

% Фазовый спектр после стробирования (2-й полустроб) 
subplot(412)
phase_spectr_str_2=angle(fftshift(spectr_str_2));
phase_spectr_harmonics_str_2=unwrap(phase_spectr_str_2(n_F));
plot(f_of_harmonics*1000,phase_spectr_harmonics_str_2,'red')
hold on
xlabel('f (кГц)')
ylabel('\phi (рад)')
title('Фазовый спектр сигнала после стробирования (2-й полустроб)')
stem(f_of_harmonics*1000,phase_spectr_harmonics_str_2,'red','LineWidth',2) 
grid on
hold off

% Разность фазовых спектров 
delta_phase_spectr_str=phase_spectr_harmonics_str_2-phase_spectr_harmonics_str_1;
if max(delta_phase_spectr_str)<0
    delta_phase_spectr_str=delta_phase_spectr_str+2*pi;
elseif min(delta_phase_spectr_str)>0
    delta_phase_spectr_str=delta_phase_spectr_str-2*pi;
end
subplot(413)
plot(f_of_harmonics*1000,delta_phase_spectr_str,'red')
hold on
xlabel('f (кГц)')
ylabel('\phi (рад)')
title('Разность двух фазовых спектров')
stem(f_of_harmonics*1000,delta_phase_spectr_str,'red','LineWidth',2) 
grid on
hold off

subplot(414)
% Оценка доплеровского сдвига частоты
F_Doppler_estim_at_harmonics=(f_of_harmonics+delta_phase_spectr_str/(3.10433*tau_imp))*1000;
F_Doppler_estim=mean(F_Doppler_estim_at_harmonics); 
w=-3.10433*tau_imp*(f_of_harmonics-0);
plot(f_of_harmonics*1000,delta_phase_spectr_str,'red')
hold on
plot(f_of_harmonics*1000,w)
grid on
hold off

figure(6)
% Фазовый спектр после стробирования (1-й полустроб) (исход. компл. огиб.) 
subplot(311)
phase_spectr_str_U_signal1_1=angle(fftshift(spectr_str_U_signal1_1));
phase_spectr_harmonics_str_U_signal1_1=unwrap(phase_spectr_str_U_signal1_1(n_F));
plot(f_of_harmonics*1000,phase_spectr_harmonics_str_U_signal1_1,'red')
hold on
xlabel('f (кГц)')
ylabel('\phi (рад)')
title('Фазовый спектр сигнала после стробирования (1-й полустроб) (исход. компл. огиб)')
stem(f_of_harmonics*1000,phase_spectr_harmonics_str_U_signal1_1,'red','LineWidth',2) 
grid on
hold off

% Фазовый спектр после стробирования (2-й полустроб) (исход. компл. огиб.) 
subplot(312)
phase_spectr_str_U_signal1_2=angle(fftshift(spectr_str_U_signal1_2));
phase_spectr_harmonics_str_U_signal1_2=unwrap(phase_spectr_str_U_signal1_2(n_F));
plot(f_of_harmonics*1000,phase_spectr_harmonics_str_U_signal1_2,'red')
hold on
xlabel('f (кГц)')
ylabel('\phi (рад)')
title('Фазовый спектр сигнала после стробирования (2-й полустроб) (исход. компл. огиб)')
stem(f_of_harmonics*1000,phase_spectr_harmonics_str_U_signal1_2,'red','LineWidth',2) 
grid on
hold off

% Разность фазовых спектров (исход. компл. огиб.) 
delta_phase_spectr_str_U_signal1=phase_spectr_harmonics_str_U_signal1_2-phase_spectr_harmonics_str_U_signal1_1;
if max(delta_phase_spectr_str_U_signal1)<0
    delta_phase_spectr_str_U_signal1=delta_phase_spectr_str_U_signal1+2*pi;
elseif min(delta_phase_spectr_str_U_signal1)>0
    delta_phase_spectr_str_U_signal1=delta_phase_spectr_str_U_signal1-2*pi;
end
subplot(313)
plot(f_of_harmonics*1000,delta_phase_spectr_str_U_signal1,'red')
hold on
xlabel('f (кГц)')
ylabel('\phi (рад)')
title('Разность двух фазовых спектров (исход. компл. огиб)')
stem(f_of_harmonics*1000,delta_phase_spectr_str_U_signal1,'red','LineWidth',2) 
grid on
hold off
В коде есть оценка доплеровского сдвига частоты, но проблема в том там формуле стоит число (подогнано число 3.10433), а на самом деле должно стоять "пи", это выражение было получено для исходной комплексной огибающей сигнала (до всей процедуры которую я привел)
Исходные данные в программу водить такие:
Количество импульсов в пачке: 400
Доплеровский сдвиг частоты (кГц): 0

Андрей1991
Сообщения: 64
Зарегистрирован: 11 сен 2015, 23:37

Re: Формирование пачки радиоимпульсов и его амплитудный спектр

Сообщение Андрей1991 »

Если так происходит ошибка, что будет если я сам буду формировать пачку радиоимпульсов по первому сообщению что я приводил

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Формирование пачки радиоимпульсов и его амплитудный спектр

Сообщение Бахурин Сергей »

Фазовые спектры после стробирования разные потому что стробы сдвинуты во времени. Почему вы ждете что они должны быть одинаковые?

как вы получили число 3.104 вместо пи?

Андрей1991
Сообщения: 64
Зарегистрирован: 11 сен 2015, 23:37

Re: Формирование пачки радиоимпульсов и его амплитудный спектр

Сообщение Андрей1991 »

Если сравнивать фазовые спектры двух комплексных огибающих (как я писал одна получается комплексная огибающая из другой путем получения не скольких операций, я писал сверху как) они должны быть одинаковы, а насчет стробов да если взять одну комплексную огибающую то да фазовые спектры разные, так как стробы сдвинуты. Насчет пи, да выражении должно именно стоять пи, но только для исходной комплексной огибающей для другой комплексной огибающей там уже другой наклон и я его подредактировал на это число, так конечно не должно быть, но так почему то получается. Почему то когда из исходной комплексной огибающей получаешь вещественный сигнал потом применяешь преобразование Гильберта, а потом смещаешь в область нулевой частоты получается комплексная огибающая совсем другая не такая как была исходная, уровень спектральных составляющих двух комплексных огибающихогибающих разная

Ответить