Extract magnitude response in dB using fvtool(_) or freqz(_)
11 views (last 30 days)
Show older comments
Shannon Cherry
on 4 Aug 2021
Commented: Shannon Cherry
on 4 Aug 2021
Hi, I have some filter coefficients 'h' and I am plotting the frequency response using fvtool(h) or freq(z).
Now, I would like to know the magnitude response (Y-axis) values of any given Normalized frequency (X-axis) shown in the figure (attached).
I have to manually place a cursor on Normalized frequency (X-axis) and drag it to a point to know its corresponding Y-axis value as shown below.
Example: Y-axis value (Magnitude) = 0.3523 for a given X-axis value (Normalized frequency) 0.2427.
This is quite uncomfortable when I want to know the Y-axis values for 100s of X-axis values. Is there any alternative way or MATLAB command to get the Y-axis values for any given X axis value?
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/702462/image.png)
0 Comments
Accepted Answer
Pere Garau Burguera
on 4 Aug 2021
You can still use freqz, and in h you get the frequency response.
[h,w] = freqz(z);
This returns an array of 8192 elements, you can change this number with
[h,w] = freqz(z,n);
Then
freqz(z)
without assigning it to a variable is what you have been doing, and it automatically plot the response for you (which actually uses fvtool), as indicated in freqz.
Since h is complex you can then get the magnitude with
h_mag = abs(h);
And the phase with
h_ph = angle(h);
3 Comments
Pere Garau Burguera
on 4 Aug 2021
To convert from linear to logarithmic, you can use
h_db = 10*log10(h_mag);
More Answers (1)
Chunru
on 4 Aug 2021
fvtool visualizes filter frequency response and it has no return value. freqz returns the frequency response and has the syntax such as "[h,f] = freqz(___,n,fs)". You should use freqz to get the response h vs f.
0 Comments
See Also
Categories
Find more on Filter Design 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!