DSP Question: invfreqs.m
Show older comments
I generate some coefficents for a filter and can inspect the frequency response as following:
%%Orginal Data
N = 5000;
data = cumsum(randn(N,1));
t = 252;
a = 2 / (t+1);
b = repmat(1-a,1 ,N).^(1:N); %b are your filter coeff
b = b ./ sum(b);
a = 1;
%%Plot the Filter on some example data
ma = filter(b, a, data);
figure;plot(data); hold all; plot(ma, 'r');
%%Plot the Response
figure;freqz(b,1);
[h,w] = freqz(b,1);
I now explain my problem. I am now in the situation where I have a frequency response (i.e. the vector "h") and know nothing else.
I would like to estimate from this my original "b" (the filter coefficents) to allow me to estimate my variable "t".
I thought I could use invfreqs.m (or invfreqz.m) to do this, but Im afraid I dont know how.
%%Find the impluse response
n = 10; % I choose a large number allowing a good approximation
m = 0; % I choose 0 here as I have 1 in my orignal filter ==> the output comes out as aNew = 1;
[bNew,aNew] = invfreqz(h,w,n,m);
%[bNew,aNew] = invfreqs(h,w,n,m);
sys = tf(bNew,aNew)
%%Plot the filter coeffcients
x1 = [0: 1/(size(b,2) -1) : 1];
x2 = [0: 1/(size(bNew,2) -1) : 1];
figure;plot(x1,b); hold all; plot(x2,bNew, 'r');
When I inspect the final plot, I would expect to see the red line (bNew) as a good approximation to b. It is not. not even close.
Clearly I am doing something very wrong. Please could someone with experince of how this function works, explain my mistake.
many thanks!
1 Comment
Matlab2010
on 9 May 2012
Accepted Answer
More Answers (0)
Categories
Find more on Get Started with DSP System Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!