Полосовой фильтр (MatLab)

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

Re: Полосовой фильтр (MatLab)

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

А если частота дискретизации будет не 84 МГц, а 28 МГц. Если я делаю для этой частоты в матлабе получаются такие картинки безобразные и не пойму такие и должны получатся или в матлабе, необходимо что-то изменить может?
Исходные данные:
Амплитуда 1 В
Количество импульсов 2
Задержка 0 мкс
ско 0 (шума нет)
Доплеровская частота 25
Подскажите как мне тут быть?

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

% Исходные данные
U_m=input('Амплитуда сигнала (В): ');          % Амплитуда сигнала
F_prom=63;                                     % Промежуточная частота (МГц)
T_rep=10;                                      % Период повторения импульсов (мкс)
F_rep=1/T_rep;                                 % Частота повторения (МГц)
tau_imp=1;                                     % Длительность импульса (мкс)
N_imp=input('Количество импульсов в пачке: '); % Количество импульсов в пачке
T_pack=N_imp*T_rep;                            % Длительность пачки радиоимпульсов (мкс)
F_Doppler=input('Доплеровский сдвиг частоты (кГц): ')*10^(-3); % Доплеровский сдвиг частоты (МГц)
fs=28;                                         % Частота дискретизации (МГц)
dt=1/fs;                                       % Шаг дискретизации (мкс)
tay_delay=input('Задержка отраженного сигнала (мкс): '); % Задержка отраженного сигнала (мкс)
N_sample_1=T_rep*fs;                           % Количество отсчетов в одном периоде
N_sample_imp=tau_imp*fs;                       % Количество отсчетов в импульсе
sigma_noise=input('СКО шума: ');

figure(1)
% Отр. от цели сигнал. Сигнал представляет собой ког. пачку импульсов.
t=0:0.001:T_pack;                              % Интервал времени пачки импульсов
d=[0.5:10:T_pack];                             % Массив значений центров импульсов
y=U_m*pulstran(t-tay_delay,d,'rectpuls',1);    % Формирование последовательности прямоугольных импульсов
b=cos(2*pi*(F_prom+F_Doppler)*t);              % Формирование гармонического сигнала т.е. ВЧ заполнение в импульсе
x=y.*b;                                        % Получение радиоимпульса путем умножения огибающей сигнала и гармонического сигнала
plot(t,x),grid                                 % График принятого отраженного сигнала
ylim([-U_m-0.5,U_m+0.5])                       % Интервал значений по оси y

figure(2)
% Аналоговый полосовой фильтр f0=63 МГц, полоса пропускания 14 МГц.
Center_frequency=63;                           % Центральная частота аналогового полосового фильтра
[b,a]=butter(5,[2*pi*(Center_frequency-7) 2*pi*(Center_frequency+7)],'s'); % Синтез коэффициентов фильтра
f=0:0.1:90;                                    % Массив значений частоты (МГц)
h=freqs(b,a,2*pi*f);                           % Комплексный коэффициент передачи
plot(f,abs(h))                                 % График АЧХ полосового фильтра                                 
xlim([30 90])                                  % Интервал значений по оси x
H=tf(b,a);                                     % Передаточная функция соответствующая своим коэффициентам числителя и знаменателя

% Формирование шума. Нормальный случайный процесс.
T=0:dt:T_pack-dt;                              % Массив дискретного времени (мкс)
noise=sigma_noise*randn(1,length(T));          % Формирование шума
noise_f=lsim(H,noise,T);                       % Шум на выходе аналогового фильтра
noise_exit=noise_f';                           % Изменение вектора столбца на вектор строку

figure(3)
% Оцифрованный (отраженный) сигнал. Сигнал на выходе АЦП
y_digitize=U_m*pulstran(T-tay_delay,d,'rectpuls',1);   
b_digitize=cos(2*pi*(F_prom+F_Doppler)*T);             
x_digitize=y_digitize.*b_digitize+noise_exit;  % Сигнал-шум на выходе АЦП     
plot(T,x_digitize),grid                        % График сигнал-шум на выходе АЦП
xlim([0 1])

figure(4)
% Вычисление спектра от дискретного (отраженного) сигнала на выходе АЦП.
NFFT=N_sample_1*N_imp;                         % Количество дискретных отсчетов сигнала
df=fs/NFFT;                                    % Шаг по частоте в спектре (МГц)
f=(0:NFFT-1)*df;                               % Диапозон частот в спектре (МГц)
Spectr=abs(fft(x_digitize,NFFT));              % Вычисление спектра
plot(f,Spectr),grid                            % График дискретного спектра
xlim([0,fs])                                   % Интервал значений по оси x
 
figure(5)
% Цифровой полосовой фильтр f0=21 МГц, полоса пропускания 10 МГц.
Center_frequency=21;                           % Центральная частота цифрового полосового фильтра
[b1,a1]=butter(6,[2*pi*(Center_frequency-5) 2*pi*(Center_frequency+5)],'s'); % Синтез коэффициентов фильтра
f=0:0.1:40;                                    % Массив значений частоты (МГц)
h1=freqs(b1,a1,2*pi*f);                        % Комплексный коэффициент передачи цифрового фильтра
plot(f,abs(h1))                                % График АЧХ полосового фильтра                                 
xlim([0 40])                                   % Интервал значений по оси x
H1=tf(b1,a1);                                  % Передаточная функция соответствующая своим коэффициентам числителя и знаменателя
signal_noise=lsim(H1,x_digitize,T);            % Сигнал-шум на выходе цифрового фильтра
signal_noise1=signal_noise';                   % Изменение вектора столбца на вектор строку

figure(6)
plot(T,signal_noise1),grid                     % График сигнал-шум на выходе АЦП

figure(7)
% Вычисление спектра от дискретного (отраженного) сигнала на выходе цифрового фильтра.
f1=(0:NFFT-1)*df;                              % Диапозон частот в спектре (МГц)
Spectr1=abs(fft(signal_noise1,NFFT));          % Вычисление спектра
plot(f1,Spectr1),grid                          % График дискретного спектра
xlim([0,fs])                                   % Интервал значений по оси x

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

Re: Полосовой фильтр (MatLab)

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

код не запустился. Мой матлаб не знает что такое tf и lsim

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

Re: Полосовой фильтр (MatLab)

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

Такой вопрос, если у меня есть сигнал который имеет 120540 отсчетов, мне нужно построить его спектр, но возникает вопрос можно ли при преобразовании Фурье взять БПФ не для всех отсчетов? Я в интернете посмотрел, что Объем вычислений по алгоритму БПФ можно сократить, если применить такую запись N*Log2(N) или N/2*Log2(N), так вот даже не знаю можно ли применять эти записи?

Аватара пользователя
Santik
Сообщения: 609
Зарегистрирован: 28 дек 2010, 08:04
Откуда: Мирный (Якутия)
Контактная информация:

Re: Полосовой фильтр (MatLab)

Сообщение Santik »

Я в интернете посмотрел, что Объем вычислений по алгоритму БПФ можно сократить, если применить такую запись N*Log2(N) или N/2*Log2(N), так вот даже не знаю можно ли применять эти записи?
Вы совсем не так поняли!
Если вы делаете Дискретное Преобразование Фурье, объем вычислений пропорционален N*N.
При Быстром Преобразовании Фурье объем вычислений сокращается и пропорционален N*Log2(N)
При N=1024 в первом случае объем вычислений ~ 10^6, а во втором ~10^4
Т.е. БПФ в 100 раз быстрее.

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

Re: Полосовой фильтр (MatLab)

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

Ну т.е. при взятии ДПФ сигнала виде отсчетов 120540, объем вычислений NFFT ставится равным количеству отсчетов, просто дело в том, откуда берется эта запись NFFT=64*1024?

Аватара пользователя
Santik
Сообщения: 609
Зарегистрирован: 28 дек 2010, 08:04
Откуда: Мирный (Якутия)
Контактная информация:

Re: Полосовой фильтр (MatLab)

Сообщение Santik »

Обычно, в простейших алгоритмах БПФ, существует требование к N. N - должно быть степенью числа 2:
...64,128, 256,512,1024,...,64*1024 и т.д.
В более "продвинутых" алгоритмах такого ограничения нет. N - может быть произвольным числом.
В реальности, если у тебя 1000 значений, берёшь N=1024, и добавляешь к своим данным 24 нулевых значения.

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

Re: Полосовой фильтр (MatLab)

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

Спасибо, у меня снова появился вопрос! Скажите вот допустим у меня частота дискретизации уменьшилась в три раза, была 84 МГц, а стала 28 МГц, так вот скажите если у меня допустим сигнал с частотой 63 МГц, который проходит через полосовой фильтр с полосой 14 МГц, где должен оказаться спектр на какой частоте после АЦП? Правильно ли я понимаю, что он должен оказаться на частоте 21 МГц выше частоты Найквиста, т.е. после этого произойдет отражения спектра 21 МГц относительно частоты Найквиста на 7 МГц? Если наоборот частота дискретизации будет 84 МГц, то спектр будет располагаться на частоте 63 МГц( это сигнал) и опять отражение относительно частоты Найквиста на 21 МГц частоты Найквиста? Я правильно понимаю, что если бы не было полосового фильтра (это бы привело во первых к невыполнению теоремы Котельникова так как частота дискретизации была бы меньше удвоенной частоты сигнала т.е. 84 меньше 2*63 или 28 меньше гораздо 2*63 так как мы разбираем два случая)спектральные составляющие боковых лепестков стали пересекаться между двумя спектрами относительно частоты Найквиста?

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

Re: Полосовой фильтр (MatLab)

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

т.е. преобразование Фурье можно брать с объемом вычислений, когда N=64*1024, а также когда N равно числу отсчетов сигнала. А к чему это может привести , если я допустим беру N=64*1024, к меньшему объему вичисления спектра?

Аватара пользователя
Santik
Сообщения: 609
Зарегистрирован: 28 дек 2010, 08:04
Откуда: Мирный (Якутия)
Контактная информация:

Re: Полосовой фильтр (MatLab)

Сообщение Santik »

Второе замечание от модератора за некорректно поставленный вопрос! :D
А так - ответил на Кибере.
P.S. На Кибере ссылку стёрли.
http://www.geokniga.org/books/661
Э.Р. Канасевич "Анализ временных последовательностей в геофизике".
Стр. 47
3.5. Преобразование Фурье больших массивов данных.

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

Re: Полосовой фильтр (MatLab)

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

Андрей1991 писал(а):Спасибо, у меня снова появился вопрос! Скажите вот допустим у меня частота дискретизации уменьшилась в три раза, была 84 МГц, а стала 28 МГц, так вот скажите если у меня допустим сигнал с частотой 63 МГц, который проходит через полосовой фильтр с полосой 14 МГц, где должен оказаться спектр на какой частоте после АЦП? Правильно ли я понимаю, что он должен оказаться на частоте 21 МГц выше частоты Найквиста, т.е. после этого произойдет отражения спектра 21 МГц относительно частоты Найквиста на 7 МГц? Если наоборот частота дискретизации будет 84 МГц, то спектр будет располагаться на частоте 63 МГц( это сигнал) и опять отражение относительно частоты Найквиста на 21 МГц частоты Найквиста? Я правильно понимаю, что если бы не было полосового фильтра (это бы привело во первых к невыполнению теоремы Котельникова так как частота дискретизации была бы меньше удвоенной частоты сигнала т.е. 84 меньше 2*63 или 28 меньше гораздо 2*63 так как мы разбираем два случая)спектральные составляющие боковых лепестков стали пересекаться между двумя спектрами относительно частоты Найквиста?

да при 28 МГц частоты дискретизации сигнал попадает на частоту 7 МГц и имеет полосу 14 МГц.
да при 84 МГц частоты дискретизации сигнал попадает на 21 МГц.
да без полосового фильтра так оцифровывать нельзя.

Ответить