Plotting multiple Magnitudes in one plot (2024)

4 views (last 30 days)

Show older comments

Mehdi Jaiem on 21 Jan 2021

  • Link

    Direct link to this question

    https://support.mathworks.com/matlabcentral/answers/723128-plotting-multiple-magnitudes-in-one-plot

  • Link

    Direct link to this question

    https://support.mathworks.com/matlabcentral/answers/723128-plotting-multiple-magnitudes-in-one-plot

Commented: Mathieu NOE on 21 Jan 2021

Accepted Answer: Star Strider

Open in MATLAB Online

Hello everyone,

I intend to use freqz() function I need to plot the magnitude for different border frequencies. But first I need to determine the cut off frequencies.

I used this code but which seems to not give me even a close response to this

%% INitializing Matlab Environment

close all;

clc;

clearvars;

%% 1.1

b=log10(8000);%stop frequency and 100Hz is the pass frequency

yc1=logspace(2,b,23);

yd=stem(yc1);

grid on

xlabel('Borders','FontSize',12);

ylabel('F (Hz)','FontSize',12);

set(gca,'YScale', 'log')

%%

m={};

n={};

h={};

ph={};

j={};

fs=21e3 %sampling frequency

for i= 1:1:23

[u,o] = butter(1,[2*100/fs, (2*yc1(i))/fs],'bandpass');

m{i}=u;

n{i}=o;

%freqz(m{i},n{i});

[h{i},ph{i}]=freqz(m{i},n{i});

figure

subplot(2,1,1)

hold on

plot(ph{i},20*log10(abs(h{i})));

end

hold off

grid

set(gca,'XLim',[0 1e4],'XTick',10.^(0:4),'YLim',[-12 0],'YTick',-12:2:0,'XScale', 'log')

Any Idea on what I am missing ?

0 Comments

Show -2 older commentsHide -2 older comments

Sign in to comment.

Sign in to answer this question.

Accepted Answer

Star Strider on 21 Jan 2021

  • Link

    Direct link to this answer

    https://support.mathworks.com/matlabcentral/answers/723128-plotting-multiple-magnitudes-in-one-plot#answer_603088

  • Link

    Direct link to this answer

    https://support.mathworks.com/matlabcentral/answers/723128-plotting-multiple-magnitudes-in-one-plot#answer_603088

Open in MATLAB Online

Put the figure call before the loop, and remove the subplot call:

figure

hold on

for i= 1:1:23

[u,o] = butter(1,[2*100/fs, (2*yc1(i))/fs],'bandpass');

m{i}=u;

n{i}=o;

%freqz(m{i},n{i});

[h{i},ph{i}]=freqz(m{i},n{i});

plot(ph{i},20*log10(abs(h{i})));

end

hold off

This does not exactly produce the plot you posted, however it will get you closer.

I leave the other details to you.

2 Comments

Show NoneHide None

Mehdi Jaiem on 21 Jan 2021

Direct link to this comment

https://support.mathworks.com/matlabcentral/answers/723128-plotting-multiple-magnitudes-in-one-plot#comment_1276758

  • Link

    Direct link to this comment

    https://support.mathworks.com/matlabcentral/answers/723128-plotting-multiple-magnitudes-in-one-plot#comment_1276758

Edited: Mehdi Jaiem on 21 Jan 2021

Thank you it solves at least the multiplot issue !

Star Strider on 21 Jan 2021

Direct link to this comment

https://support.mathworks.com/matlabcentral/answers/723128-plotting-multiple-magnitudes-in-one-plot#comment_1276768

As always, my pleasure!

Sign in to comment.

More Answers (1)

Mathieu NOE on 21 Jan 2021

  • Link

    Direct link to this answer

    https://support.mathworks.com/matlabcentral/answers/723128-plotting-multiple-magnitudes-in-one-plot#answer_603118

  • Link

    Direct link to this answer

    https://support.mathworks.com/matlabcentral/answers/723128-plotting-multiple-magnitudes-in-one-plot#answer_603118

Open in MATLAB Online

hello

according to the picture, your code needed a revision, see below

the bandwith of your filters (BW) should be proportionnal to the center frequency to have identical roll off curves when plotted in log axis

you can test with a fixed constant bandwith , it's no the right option

hope it helps !

%% INitializing Matlab Environment

close all;

clc;

clearvars;

%% 1.1

b=log10(8000);%stop frequency and 100Hz is the pass frequency

BW = 100; % fixed bandwith (Hz)

yc1=logspace(2,b,23);

yd=stem(yc1);

grid on

xlabel('Borders','FontSize',12);

ylabel('F (Hz)','FontSize',12);

set(gca,'YScale', 'log')

%%

fs=21e3 %sampling frequency

for i= 1:1:23

BW = 100; % fixed bandwith (Hz) : NO !!!

% BW should be proportionnal to center frequencies (not fixed)

BW = yc1(i)/5;

f_low = yc1(i) - BW/2;

f_high = yc1(i) + BW/2;

[B,A] = butter(1,[f_low, f_high]*2/fs,'bandpass');

freq = logspace(log10(f_low/4),log10(f_high*4),100),

[h]=freqz(B,A,freq,fs);

figure(2)

hold on

semilogx(freq,20*log10(abs(h)));

end

hold off

grid

set(gca,'XLim',[0 1e4],'XTick',10.^(0:4),'YLim',[-12 0],'YTick',-12:2:0,'XScale', 'log')

2 Comments

Show NoneHide None

Mehdi Jaiem on 21 Jan 2021

Direct link to this comment

https://support.mathworks.com/matlabcentral/answers/723128-plotting-multiple-magnitudes-in-one-plot#comment_1276858

  • Link

    Direct link to this comment

    https://support.mathworks.com/matlabcentral/answers/723128-plotting-multiple-magnitudes-in-one-plot#comment_1276858

Open in MATLAB Online

Awesome thank you!

I have to review some notons then since I am new to this topic.

But there are two ine that I did not understand:

BW = yc1(i)/5; %why did you divide by 5

freq = logspace(log10(f_low/4),log10(f_high*4),100) % what is the perpose of 100?

semilogx(freq,20*log10(abs(h))); % I read about semilogx but I did not understand it. why not plot ?

Mathieu NOE on 21 Jan 2021

Direct link to this comment

https://support.mathworks.com/matlabcentral/answers/723128-plotting-multiple-magnitudes-in-one-plot#comment_1277028

  • Link

    Direct link to this comment

    https://support.mathworks.com/matlabcentral/answers/723128-plotting-multiple-magnitudes-in-one-plot#comment_1277028

BW = yc1(i)/5; %why did you divide by 5

bandwith is a fraction of center frequency , the higher the division factor, the narrower the filter ; just adapt to your own needs

freq = logspace(log10(f_low/4),log10(f_high*4),100) % what is the perpose of 100?

this is the length we want for freq vector; try another value , like 10, and see the plot being not so smooth

semilogx(freq,20*log10(abs(h))); % I read about semilogx but I did not understand it. why not plot ?

try plot to see the difference

Sign in to comment.

Sign in to answer this question.

See Also

Categories

Signal ProcessingSignal Processing ToolboxDigital and Analog FiltersAnalog Filters

Find more on Analog Filters in Help Center and File Exchange

Tags

  • freqz
  • bandpass

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

An Error Occurred

Unable to complete the action because of changes made to the page. Reload the page to see its updated state.


Plotting multiple Magnitudes in one plot (8)

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list

Americas

  • América Latina (Español)
  • Canada (English)
  • United States (English)

Europe

  • Belgium (English)
  • Denmark (English)
  • Deutschland (Deutsch)
  • España (Español)
  • Finland (English)
  • France (Français)
  • Ireland (English)
  • Italia (Italiano)
  • Luxembourg (English)
  • Netherlands (English)
  • Norway (English)
  • Österreich (Deutsch)
  • Portugal (English)
  • Sweden (English)
  • Switzerland
    • Deutsch
    • English
    • Français
  • United Kingdom(English)

Asia Pacific

Contact your local office

Plotting multiple Magnitudes in one plot (2024)
Top Articles
Latest Posts
Article information

Author: Jeremiah Abshire

Last Updated:

Views: 6528

Rating: 4.3 / 5 (74 voted)

Reviews: 81% of readers found this page helpful

Author information

Name: Jeremiah Abshire

Birthday: 1993-09-14

Address: Apt. 425 92748 Jannie Centers, Port Nikitaville, VT 82110

Phone: +8096210939894

Job: Lead Healthcare Manager

Hobby: Watching movies, Watching movies, Knapping, LARPing, Coffee roasting, Lacemaking, Gaming

Introduction: My name is Jeremiah Abshire, I am a outstanding, kind, clever, hilarious, curious, hilarious, outstanding person who loves writing and wants to share my knowledge and understanding with you.