"Вычисления, визуализация и программирование в среде MATLAB 5.x" - читать интересную книгу автора (Мартынов Н. Н., Иванов А. П.)

╤ яюью∙№■ яЁхфёЄртыхээюую т√°х ъюфр фюёЄшурхЄё  юЄэюёшЄхы№эю яЁшхьыхьюх шчюсЁрцхэшх фтшцхэш  сєёшэъш, т яхЁтє■ юўхЁхф№ шч-чр Єюую, ўЄю юс·хь яхЁхЁшёютъш сєёшэъш яю ёЁртэхэш■ ёю тёхщ яыю∙рф№■ юс·хъЄр axes эхтхышъ. ┼ёыш с√ ЄЁхсютрыё  сюы№°ющ юс·хь яхЁхЁшёютъш, Єю яЁхфёЄртыхээ√щ ёяюёюс эх ьюу с√ фюёЄшў№ яЁшхьыхьющ ёъюЁюёЄш.
MATLAB 5.x. ┬√ўшёыхэш , тшчєрышчрЎш , яЁюуЁрььшЁютрэшх 159
┬ Єръшї ёыєўр ї шёяюы№чє■Є яЁшэЎшяшры№эю фЁєующ ёяюёюс, яЁш ъюЄюЁюь тёх яЁюьхцєЄюўэ√х ърфЁ√ ЁрёёўшЄ√тр■Єё  ш чряюьшэр■Єё  чрЁрэхх, яюёых ўхую ляЁюшуЁ√тр■Єё ╗ ёяхЎшры№эющ лъшэхьрЄюуЁрЇшўхёъющ╗ ЇєэъЎшхщ movie. ╤ яюью∙№■ ¤Єюую ёяюёюср шчюсЁрчшь лсЁюєэютёъюх фЁюцрэшх╗ 200 Єюўхъ т Ёрьърї чрфрээюую яЁ ьюєуюы№эшър, яЁшўхь їрюЄшўэюёЄ№ фтшцхэш  Єюўхъ (лрЄюьют╗) сєфхЄ юсхёяхўштрЄ№ё  ЇєэъЎш ьш rand ш randn, яюЁюцфр■∙шьш ёююЄтхЄёЄтхээю ЁртэюьхЁэю ЁрёяЁхфхыхээ√х ш эюЁьры№эю ЁрёяЁхфхыхээ√х ёыєўрщэ√х ўшёыр.
╧юфуюЄютшь уЁрЇшўхёъюх юъэю фы  яюърчр 100 ърфЁют (Frames) лъшэюЇшы№ьр╗ яЁю сЁюєэютёъюх фтшцхэшх 200 рЄюьют, ёЁхфэ■■ ёъюЁюёЄ№ ъюЄюЁ√ї їрЁръЄхЁшчєхь ярЁрьхЄЁюь v:
я└ = 200; nFrames = 100; v = 0.03; ї = rand(nA,1) - 0.5; є = rand(nA,l) - 0.5; h = plot(x,є,'.'); set(h,'MarkerSize',10); axis([-l 1 -1 1]); axis square; Buf = moviein( nFrames ) ;
┬ яюёыхфэхщ ёЄЁюъх ё яюью∙№■ ЇєэъЎшш moviein ёючфрхЄё  ушурэЄёъшщ сєЇхЁ Buf т ярь Єш ъюья№■ЄхЁр яюф тёх ърфЁ√ ъшэюЇшы№ьр:
size( Buf ) ans =
24920 100
╟фхё№ яюф ърцф√щ шч 100 ърфЁют (100 ёЄюысЎют ьрёёштр Buf Єшяр double) юЄтюфшЄё  24 920 яючшЎшщ (ёЄЁюъ ьрёёштр Buf). ╧юёыхфэхх ўшёыю чртшёшЄ юЄ Єхъє∙хую ЁрчьхЁр уЁрЇшўхёъюую юъэр ш  ты хЄё  яхЁхьхээ√ь; Єръ, ЁрчьхЁ ¤Єюую юъэр т ы■сющ ьюьхэЄ ьюцэю шчьхэшЄ№ ё яюью∙№■ ь√°ш. ┬ фрээюь ъюэъЁхЄэюь ёыєўрх ьрёёшт Buf ёюёЄюшЄ шч 2 492 000 ¤ыхьхэЄют ш чрэшьрхЄ т ярь Єш ъюья№■ЄхЁр 19 936 000 срщЄ (юъюыю 20 ╠срщЄ).
╥хяхЁ№ ЁрёёўшЄ√трхь ърцф√щ ърфЁ ш лчрїтрЄ√трхь╗ хую т сєЇхЁ Buf (яю юфэюьє ърфЁє эр ърцф√щ ёЄюысхЎ ьрёёштр Buf) ёяхЎшры№эющ ЇєэъЎшхщ getf rame:
for k=l:nFrames, x=x+v*randn(nA, 1) ;y=y+v*randn (nA, 1); ... set(h,'XData',x,'YData',y); Buf(:,k) = getframe; end
╬ъюэўрЄхы№эю яЁюъЁєўштрхь лёэ Є√щ Ёюышъ╗ ё яюью∙№■ ЇєэъЎшш movie 5 Ёрч яюфЁ ф:
movie( Buf, 5 ) ;
╩ръ Єюы№ъю юЄярфрхЄ эхюсїюфшьюёЄ№ т їЁрэхэшш ъшэюЇшы№ьр, ёЁрчє цх юётюсюцфрхь ярь Є№ т Ёрсюўхь яЁюёЄЁрэёЄтх ёшёЄхь√ MATLAB, чрэ Єє■ яюф сєЇхЁ Buf:
clear Buf
160 ├ыртр 5. ╚эЄхЁръЄштэ√щ Ёхцшь ЁрсюЄ√ ш хую ртЄюьрЄшчрЎш  ё яюью°№■ ёЎхэрЁшхт
▌Єю эєцэю ёфхырЄ№ ъръ ьюцэю с√ёЄЁхх, яюёъюы№ъє юс√ўэю тшфхюсєЇхЁ√ шьх■Є ушурэЄёъшх ЁрчьхЁ√ ш чЁ  Ёрёїюфє■Є фЁруюЎхээ√х ЁхёєЁё√ ъюья№■ЄхЁр.
╬Єфхы№э√х ърфЁ√ яюфуюЄютыхээюую ъшэюЇшы№ьр ьюцэю ёъюяшЁютрЄ№ ЇєэъЎшхщ frame2im т фтр ўшёыют√ї ьрёёштр: т ьрёёшт яшъёхыют ш ЄрсышЎє ЎтхЄют (¤Єш ьрёёшт√ с√ыш яюфЁюсэю ЁрёёьюЄЁхэ√ т уы. 2). ╤ыхфє■∙шщ ЇЁруьхэЄ чряюьшэрхЄ k-щ ърфЁ т ьрёёштх яшъёхыют X ш ЄрсышЎх ЎтхЄют ЄрЁ:
[X, ЄрЁ] = frame2im( Buf( : , k ) );
┬ уы. 2 юяшёрэю, ъръ ьюцэю ьрёёшт√ X ш ЄрЁ чряшёрЄ№ т Їрщы√ Ёрчышўэ√ї ЇюЁьрЄют фы  фышЄхы№эюую їЁрэхэш  эр фшёъх.
┬ Єю цх тЁхь   ты хЄё  ръЄєры№эющ ш юсЁрЄэр  чрфрўр. ╚ч Їрщыр шэЇюЁьрЎш  ўшЄрхЄё  т ьрёёшт яшъёхыют XI ш ЄрсышЎє ЎтхЄют ЄрЁ, яюёых ўхую ЇєэъЎшхщ im2 frame юэш ьюэЄшЁє■Єё  ъръ ърфЁ Їшы№ьр ёшёЄхь√ MATLAB:
Buf = moviein( nFrames );
Buf( : , 1) = im2frame( XI, map);
╟фхё№, юфэръю, ёыхфєхЄ юЄьхЄшЄ№ фтр трцэ√ї юсёЄю Єхы№ёЄтр. ┬ю-яхЁт√ї, ЇєэъЎш  im2frame ЁрсюЄрхЄ Єюы№ъю ё шэфхъёшЁютрээ√ьш шчюсЁрцхэш ьш (ёь. уы. 2) ш эх ЁрсюЄрхЄ ё шчюсЁрцхэш ьш Єшяр truecolor (ўЄю, ъюэхўэю, т√ч√трхЄ ёюцрыхэшх). ┼ёыш є трё шьххЄё  шьхээю шчюсЁрцхэшх truecolor, Єю хую эєцэю сєфхЄ ёрьюёЄю Єхы№эю яЁхюсЁрчютрЄ№ т шэфхъёшЁютрээюх шчюсЁрцхэшх. ┬ю-тЄюЁ√ї, чэр  ЁрчьхЁ шчюсЁрцхэш  т яшъёхырї, ёыхфєхЄ яЁхфтрЁшЄхы№эю (яхЁхф т√чютюь ЇєэъЎшш moviein) єёЄрэютшЄ№ ЁрчьхЁ уЁрЇшўхёъюую юъэр ёшёЄхь√ MATLAB Ёртэ√ь ¤Єюьє ЁрчьхЁє (ъръ ¤Єю ёфхырЄ№, Ёрёёърчрэю т уы. 2).
╟рЄхь ўшЄрхЄё  ёюфхЁцшьюх фЁєуюую уЁрЇшўхёъюую Їрщыр ш юэю ьюэЄшЁєхЄё  єцх т ёыхфє■∙шщ ърфЁ Їшы№ьр Buf:
Buf( : ,2) = im2frame( X2, map);
ш Єръ фрыхх тяыюЄ№ фю яюёыхфэхую ърфЁр ё эюьхЁюь nFrames, яюёых ўхую т√ч√трхЄё  ЇєэъЎш  movie:
movie( Buf )
┬ ЇюЁьрЄх т√чютр ¤Єющ ЇєэъЎшш ё хфшэёЄтхээ√ь рЁуєьхэЄюь яЁюъЁєЄър тшфхюЁюышър юёє∙хёЄты хЄё  юфшэ Ёрч, Єръ ўЄю эхЄ ёяхЎшры№эющ эхюсїюфшьюёЄш т√ч√трЄ№ ЇєэъЎш■ movie ё фтєь  рЁуєьхэЄрьш, Єю хёЄ№ movie (Buf, 1).
╠єы№Єшьхфшщэ√х ёяюёюсэюёЄш яръхЄр MATLAB срчшЁє■Єё  ъръ эр рэшьрЎшш, ЁрёёьюЄЁхээющ т√°х, Єръ ш эр тючьюцэюёЄш тюёяЁюшчтюфшЄ№ чтєъ (хёыш эр ъюья№■ЄхЁх яЁшёєЄёЄтєхЄ ёююЄтхЄёЄтє■∙хх юсюЁєфютрэшх) ёЄрэфрЁЄэюую фы  яырЄЇюЁь√ Windows ЇюЁьрЄр WAVE. ╤ююЄтхЄёЄтє■∙шх Їрщы√ шьх■Є, ъръ шчтхёЄэю, Ёрё°шЁхэшх wav. ╤шёЄхьр MATLAB яючтюы хЄ ўшЄрЄ№ ш чряшё√трЄ№ Їрщы√ ¤Єюую ЇюЁьрЄр. ╫Єхэшх юёє∙хёЄты хЄё  ё яюью∙№■ ЇєэъЎшш wavread, р чряшё№- ё яюью∙№■ ЇєэъЎшш wavwrite. ═ръюэхЎ, ЇєэъЎш  sound (р Єръцх яюўЄш рэрыюушўэр  хщ ЇєэъЎш  sounds ё) юёє∙хёЄты хЄ Ёхры№эюх тюёяЁюшчтхфхэшх чтє-
┘ MATLAB 5.x. ┬√ўшёыхэш , тшчєрышчрЎш , яЁюуЁрььшЁютрэшх
161
ър, яюыєўр  т ърўхёЄтх рЁуєьхэЄр тх∙хёЄтхээ√щ тхъЄюЁ, ёюфхЁцр∙шщ яюёыхфютрЄхы№эюёЄ№ шчьхЁхэшщ уЁюьъюёЄш чтєър. ╥рър  яюёыхфютрЄхы№эюёЄ№ ўшёхы їрЁръЄхЁшчєхЄё  ўрёЄюЄющ фшёъЁхЄшчрЎшш (фы  ЇюЁьрЄр CD Audio - 44,1 ъ├Ў) ш ЁрчЁ фэюёЄ№■ юЄёўхЄют (фы  CD Audio ¤Єю 16 сшЄ). ┬ ёыєўрх ёЄхЁхючтєър ЇєэъЎш  sound яюыєўрхЄ т ърўхёЄтх рЁуєьхэЄр ьрЄЁшЎє m x 2, т ъюЄюЁющ ърцф√щ ёЄюысхЎ ёюфхЁцшЄ фрээ√х фы  юфэюую шч ёЄхЁхюърэрыют.
╧Ёюшыы■ёЄЁшЁєхь яЁшьхэхэшх яхЁхўшёыхээ√ї ЇєэъЎшщ. ─юяєёЄшь, эр фшёъх шьххЄё  чряшёрээ√щ ёЄрэфрЁЄэ√ьш фы  яырЄЇюЁь√ Windows ёЁхфёЄтрьш ёЄхЁхюЇюэшўхёъшщ чтєъютющ Їрщы ' soundl23.wav', яЁшўхь хую ърўхёЄтю ёююЄтхЄёЄтєхЄ ёЄрэфрЁЄє CD Audio. ╤ўшЄ√трхь чтєъютє■ шэЇюЁьрЎш■ шч ¤Єюую Їрщыр т ёюёЄю ∙є■ шч фтєї ёЄюысЎют ўшёыютє■ ьрЄЁшЎє V
[V,f,b] = wavreadCsoundl23.wav');
р т ёъры Ёэє■ яхЁхьхээє■ f яЁш ¤Єюь ўшЄрхЄё  ўрёЄюЄр фшёъЁхЄшчрЎшш, т яхЁхьхээє■ b - ЁрчЁ фэюёЄ№. ╥ръ ъръ т Їрщы ' soundl23. wav' чтєъютр  шэЇюЁьрЎш  с√ыр чряшёрэр ё ърўхёЄтюь CD Audio, Єю яхЁхьхээр  f фюыцэр яЁшэ Є№ чэрўхэшх 44 100 (ухЁЎ), р яхЁхьхээр  b фюыцэр с√Є№ Ёртэр 16 (сшЄ эр юфшэ юЄёўхЄ). ╧ЁютхЁ хь ш єсхцфрхьё , ўЄю ¤Єю фхщёЄтшЄхы№эю шьххЄ ьхёЄю (ёь. Ёшё. 5.7).
лA MATLAB Command Window
Edit Window Help
' D g? I X ^ ╪! **> I ffl tg if* I ?
.!|S(:16i|titlI>e
╨шёєэюъ 5.7
╥хяхЁ№ ьюцэю тюёяЁюшчтхёЄш чтєъ:
sound( V, f, b )
єърчрт ъръ ёрь яюЄюъ чтєъют√ї юЄёўхЄют т тшфх ўшёыютюую ьрёёштр (ьрЄЁшЎ√ m ї 2) V, Єръ ш хую їрЁръЄхЁшёЄшъш т тшфх ўрёЄюЄ√ фшёъЁхЄшчрЎшш ш ЁрчЁ фэюёЄш юЄёўхЄют.
╩ръшї-ышсю тёЄЁюхээ√ї ёЁхфёЄт яю Ёрчєьэюьє ртЄюьрЄшўхёъюьє яЁхюсЁрчютрэш■ ьрёёштр чтєъют√ї юЄёўхЄют V т  фЁх ёшёЄхь√ MATLAB эхЄ, эю юэш тёхуфр ьюуєЄ эрщЄшё№ ёЁхфш ьэюуюўшёыхээ√ї яръхЄют Ёрё°шЁхэш  ¤Єющ ёшёЄхь√.
с ╟ры 409
162 ├ыртр 5. ╚эЄхЁръЄштэ√щ Ёхцшь ЁрсюЄ√ ш хую ртЄюьрЄшчрЎш  ё яюью°№■ ёЎхэрЁшхт
┬ ы■сюь ёыєўрх эрь эшъЄю эх чряЁх∙рхЄ яюяЁюсютрЄ№ ётюш ёюсёЄтхээ√х ёшы√ т ¤Єюь фхых. ┬ ърўхёЄтх яЁюёЄхщ°хую яЁшьхЁр яюёьюЄЁшь, ўЄю яюыєўшЄё , хёыш юёє∙хёЄтшЄ№ эхсюы№°юх чр°єьыхэшх чтєъютюую ёшуэрыр:
[m,n] = size( V ); s = 0.05; VI = zeros ( m,l ); for k=l:m, VI(k) = V(k,1)+s*randn(1); end
╤эютр т√ч√трхь ЇєэъЎш■ sound ш лёыє°рхь тхъЄюЁ╗ VI, є ъюЄюЁюую шьххЄё  Єюы№ъю юфшэ ёЄюысхЎ, т ъюЄюЁ√щ чрэхёхэ чр°єьыхээ√щ чтєъ, яюыєўхээ√щ шч яхЁтюую ёЄхЁхюърэрыр шёїюфэюую чтєър. ╟рЁрэхх с√ыю  ёэю, ўЄю ърўхёЄтю чтєър (т ьєч√ъры№эюь ёь√ёых) юЄ Єръшї яЁхюсЁрчютрэшщ ьюцхЄ Єюы№ъю яюэшчшЄ№ё .