Этот пример показывает, как вычислить ответ временного интервала простого полосового фильтра:
Выберите значения индуктивности и емкости с помощью классического метода разработки параметра изображения.
Используйте rfckt.seriesrlc
, rfckt.shuntrlc
и rfckt.cascade
, чтобы программно создать схему Баттерворта как сеть с 2 портами.
Используйте analyze
, чтобы извлечь S-параметры сети с 2 портами по широкому частотному диапазону.
Используйте s2tf
, чтобы вычислить передаточную функцию напряжения от входа до вывода.
Используйте rationalfit
, чтобы сгенерировать рациональные подгонки, которые получают идеальную схему RC в очень высокой степени точности.
Создайте шумную форму волны входного напряжения.
Используйте timeresp
, чтобы вычислить переходный ответ на шумную форму волны входного напряжения.
Метод разработки параметра изображения является средой для того, чтобы аналитически вычислить значения ряда и параллельных компонентов в пассивных фильтрах. Для получения дополнительной информации об этом методе см. "Полный Беспроводной Проект" Коттера В. Сэйри, McGraw-Hill 2008 p. 331.
Рисунок 1: полосовой фильтр Баттерворта создается из двух полуразделов.
Следующий код MATLAB генерирует значения компонента для полосового фильтра с более низкой частотой среза на 3 дБ 2,4 ГГц и верхней частотой среза на 3 дБ 2,5 ГГц.
Ro = 50; f1C = 2400e6; f2C = 2500e6; Ls = (Ro / (pi*(f2C - f1C)))/2; Cs = 2*(f2C - f1C)/(4*pi*Ro*f2C*f1C); Lp = 2*Ro*(f2C - f1C)/(4*pi*f2C*f1C); Cp = (1/(pi*Ro*(f2C - f1C)))/2;
L и стандартные блоки C формируются путем выбора соответствующих значений с функцией rfckt.shuntrlc
, показанной в рисунке 2 или функции rfckt.seriesrlc
, показанной в рисунке 3. Стандартные блоки затем соединяются вместе с rfckt.cascade
как показано в рисунке 4.
Рисунок 2: сеть с 2 портами создается функцией rfckt.shuntrlc
.
Рисунок 3: сеть с 2 портами создается функцией rfckt.seriesrlc
.
Рисунок 4: Соединение сетей с 2 портами с функцией rfckt.cascade
.
Seg1 = rfckt.seriesrlc('L',Ls,'C',Cs); Seg2 = rfckt.shuntrlc('L',Lp,'C',Cp); Seg3 = rfckt.shuntrlc('L',Lp,'C',Cp); Seg4 = rfckt.seriesrlc('L',Ls,'C',Cs); cktBPF = rfckt.cascade('Ckts',{Seg1,Seg2,Seg3,Seg4});
Метод analyze
извлекает S-параметры от схемы по заданному вектору частот. Этот пример обеспечивает набор частот, который охватывает полосу пропускания фильтра и анализирует со ссылкой на 50 Ом по умолчанию, исходным импедансом и импедансами загрузки. Затем, функция s2tf
вычисляет передаточную функцию напряжения через модель S-параметра схемы. Наконец, мы генерируем высокую точность рациональное приближение с помощью функции rationalfit
. Получившееся приближение совпадает с сетью, чтобы обработать точность машинным способом.
freq = linspace(2e9,3e9,101); analyze(cktBPF,freq); sparams = cktBPF.AnalyzedResult.S_Parameters; tf = s2tf(sparams); fit = rationalfit(freq,tf);
Используйте метод freqresp
, чтобы проверить, что рациональное подходящее приближение имеет разумное поведение вне обеих сторон подходящего частотного диапазона.
widerFreqs = linspace(2e8,5e9,1001); resp = freqresp(fit,widerFreqs); figure semilogy(freq,abs(tf),widerFreqs,abs(resp),'--','LineWidth',2) xlabel('Frequency (Hz)') ylabel('Magnitude') legend('data','fit') title('The rational fit behaves well outside the fitted frequency range.')
Этот полосовой фильтр должен смочь восстановить синусоидальный сигнал на уровне 2,45 ГГц, который сделан шумным включением нулевого среднего случайного шума и блокировщика на уровне 2,35 ГГц. Следующий код MATLAB создает такой сигнал из 4 096 выборок.
fCenter = 2.45e9; fBlocker = 2.35e9; period = 1/fCenter; sampleTime = period/16; signalLen = 8192; t = (0:signalLen-1)'*sampleTime; % 256 periods input = sin(2*pi*fCenter*t); % Clean input signal rng('default') noise = randn(size(t)) + sin(2*pi*fBlocker*t); noisyInput = input + noise; % Noisy input signal
Функция timeresp
вычисляет аналитическое решение уравнений пространства состояний, определенных рациональной подгонкой и входным сигналом.
output = timeresp(fit,noisyInput,sampleTime);
Постройте входной сигнал, шумный входной сигнал и фильтр передачи полосы вывод в окне рисунка.
xmax = t(end)/8; figure subplot(3,1,1) plot(t,input) axis([0 xmax -1.5 1.5]) title('Input') subplot(3,1,2) plot(t,noisyInput) axis([0 xmax floor(min(noisyInput)) ceil(max(noisyInput))]) title('Noisy Input') ylabel('Amplitude (volts)') subplot(3,1,3) plot(t,output) axis([0 xmax -1.5 1.5]) title('Filter Output') xlabel('Time (sec)')
Накладывание шумного входа и ответа фильтра в частотном диапазоне объясняет, почему операция фильтрации успешна. И сигнал блокировщика на уровне 2,35 ГГц и большая часть шума значительно ослабляются.
NFFT = 2^nextpow2(signalLen); % Next power of 2 from length of y Y = fft(noisyInput,NFFT)/signalLen; samplingFreq = 1/sampleTime; f = samplingFreq/2*linspace(0,1,NFFT/2+1)'; O = fft(output,NFFT)/signalLen; figure subplot(2,1,1) plot(freq,abs(tf),'b','LineWidth',2) axis([freq(1) freq(end) 0 1.1]) legend('filter transfer function') ylabel('Magnitude') subplot(2,1,2) plot(f,2*abs(Y(1:NFFT/2+1)),'g',f,2*abs(O(1:NFFT/2+1)),'r','LineWidth',2) axis([freq(1) freq(end) 0 1.1]) legend('input+noise','output') title('Filter characteristic and noisy input spectrum.') xlabel('Frequency (Hz)') ylabel('Magnitude (Volts)')