How to convert S-parameters (MA format) to transfer function or impulse response?
10 views (last 30 days)
Show older comments
Dear all,
I am trying to convert S-parameters provided by a VNA (Magnitude and phase format) into transfer function or impulse response. I would like to do this in order to filter arbitrary signals generated in MATLAB with this data measured. I would very grateful if you can provide me any information in order to do this.
0 Comments
Answers (1)
Mathieu NOE
on 5 Jan 2021
hello
IMHO, the best way is to find a FIR or IIR filter that mimics the magnitude / phase plot of the FRF - see invfreqz
once the filter is designed , you can do waht you want (filter a signal, generate the impulse response)
below one example :
data = importdata ('beam_experiment.mat');
x = transpose(data.x); %input
y = transpose(data.y); %output
fs = data.fs; % sampling frequency
NFFT = 2048;
NOVERLAP = 0.75*NFFT;
[Txy,F] = tfestimate(x,y,hanning(NFFT),NOVERLAP,NFFT,fs);
% IIR model
W = linspace(0,pi,length(F));
ind = find(F>5 & F <80); % frequency weighting ; data reliable between 5 and 80 Hz
WT = zeros(size(W));
WT(ind) = 1;
NB = 6;
NA = NB+2;
[B,A] = invfreqz(Txy,W,NB,NA,WT,1e4);
% check bode plots
[H,WW] = freqz(B,A,length(F));
figure(1),
subplot(2,1,1),plot(F,20*log10(abs(Txy)),'b',F,20*log10(abs(H)),'r');grid
subplot(2,1,2),plot(F,180/pi*(angle(Txy)),'b',F,180/pi*(angle(H)),'r');grid
% Impulse response
[IR,X] = dimpulse(B,A);
samples = length(IR);
time = 1/fs*(1:samples);
figure(2),
plot(time,IR,'r');grid
title('Impulse response')
xlabel('Time (s)');
ylabel('Amplitude')
0 Comments
See Also
Categories
Find more on Analog Filters in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!