Вы упомянули как раз комплексную огибающую у меня как раз и заключается работа с комплексной огибающей. Может поможете разобраться с моей задачей.Сейчас я ее расскажу. Смотрите есть у меня комплексная огибающая сигнала по этой комплексной огибающей можно найти вещественный сигнал (т.е. если сделать такую процедуру домножить на комплексную огибающую сигнала 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