ベストアンサー MATLABで 2012/05/06 12:32 MATLABで880Hzの正弦波を発振させ、1000ミリ秒間一定の音量に保ち、次の2000ミリ秒で減衰させる音を鳴らすプログラムを組みたいのですが上手く行きません。 どなたかご教授お願いします。 みんなの回答 (2) 専門家の回答 質問者が選んだベストアンサー ベストアンサー Kules ベストアンサー率47% (292/619) 2012/05/08 21:48 回答No.2 A No.1のKulesです。 補足ありがとうございます。 うーん…なんかぐっちゃぐちゃですね(笑) 1つずつ整理していきましょうか。 >Fs = 48000; >Freq = 440; >Freq2= 880; >time=Fs / 10; この時点でtime=4800ですね。 >n = 1:time; time=4800なので、nは1行4800列です。 >tone(n) = 1*sin(2*pi*Freq*(n-1)/Fs); >n = time:Fs; time=4800、Fs=48000ですので、nは1行43201列です。 >tone(n) = 0; >n = 4*Fs+1:6*Fs; 4*Fs=196000、6*Fs=288000なので、nは1行96000列です。 >A = linspace(1,0,2/44100); 2/44100は2*44100のことでしょうか?あるいは、44100/2のことでしょうか?前者の場合、Aは1行88200列、後者の場合Aは1行22050列です。 >tone(n) = A.*sin(2*pi*Freq2*(n-1)/Fs); この時点でAとnの要素数が違うので、掛け算することはできませんね。 行列のサイズを具体的に数値で書きだしてみると間違いに気付きやすいかも知れませんね。 書き直してまたエラー等でたら補足願います。 参考になれば幸いです。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 その他の回答 (1) Kules ベストアンサー率47% (292/619) 2012/05/06 13:17 回答No.1 前回の質問に回答したKulesです。 前回の質問は解決したんですかね? で、今回の質問ですが、前回あなたが書いたコード Fs = 48000; Fq_A = 440; time = Fs / 10; n = 1 : time; tone(n) = 1 * sin(2 * pi * Fq_A * (n-1) / Fs); soundsc(tone, Fs) の中で、 tone(n) = 1 * sin(2 * pi * Fq_A * (n-1) / Fs); の「1」は振幅ですよね? ここに「1000ms一定で、次の2000msで減衰」という振幅の配列を作り、掛けてやれば所望の音が出せると思います。 多分上手くいかないのは ・そのまま「*」で掛け算をしている(要素ごとの積にする必要があるので、「.*」を使います) ・振幅の配列を作れていない(要素が全て1の配列はonesで、徐々に減衰していく配列はlinspaceで作れます) 辺りでしょうか。 わからないこと等あれば補足していただければと思います。 参考になれば幸いです。 質問者 補足 2012/05/07 15:22 早速の回答ありがとうございます。 Fs = 48000; Freq = 440; Freq2= 880; time=Fs / 10; n = 1:time; tone(n) = 1*sin(2*pi*Freq*(n-1)/Fs); n = time:Fs; tone(n) = 0; n = 4*Fs+1:6*Fs; A = linspace(1,0,2/44100); tone(n) = A.*sin(2*pi*Freq2*(n-1)/Fs); soundsc(tone,Fs); と組んでみましたが -------------------------------------------- ??? エラー ==> times 行列の次元は一致しなければなりません。 エラー ==> Untitled3 at 17 tone(n) = A.*sin(2*pi*Freq2*(n-1)/Fs); -------------------------------------------- とエラーを吐いてしまいました。 どうすればこのエラーを回避できますか? 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発その他(プログラミング・開発) 関連するQ&A MATLABのプログラミングを使って MATLABのプログラミングを使って 小惑星探査機はやぶさのビーコン音を作成したいのですが よく分かりません…。 ビーコン音は1024Hzと2048Hzの短形波が一秒ごとに 繰り返していることはネット検索で分かりました。 でも、それをどうようにプログラムをすればいいのかが分からないです。 もしかしたら、プログラミングでは作成できないのでは…と考えましたが 無知な私で判断するには早いと思い、ここに書き込ませて頂きました。 よろしくお願いします。 Matlab/SimulinkのChirp信号について Matlab/SimulinkのChirp信号について Matlab/SimulinkのChirp信号について教えてください。このChirp信号は時間と共に周波数が増加するものですが、20秒間で0.1~10Hzになるように設定した場合、時間と周波数の関係はどのようになるのでしょうか?周波数が一定に比例して増えていくのでしょうか?ちょっとピンときません。時間軸で段々増えていく状態を周波数で置き換えたいのです。よろしければお教えください。 MATLABについてお聞きしたいです。 MATLABについてお聞きしたいです。 現在勉強しているのですが、プログラミング初心者なので…。 MATLABでwavファイルの書き込みについてです。 周波数1000Hz, 0.5秒,サンプリング周波数22050Hz の設定にしてwavファイルで保存したく… f=1000; > A=0.5; > Fs=22050; > wavwrite(MyFunc_2(1000,0.5,22050),'sin1000'); という設定にして、保存したのですが、録音時に流れた音と録音された音が違うのです。 ファンクションMファイルは… function y=MyFunc_2(f,A,Fs) %Fs=44100; d=1/Fs; t=0:d:2; %f=440; %A=0.1; y=A*sin(2*pi*f*t); wavplay(y,Fs) このような設定にしています。 問題解決への協力よろしくお願いします。 ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム デシベルの単位で表す減衰率の定義式は? 実習の課題が分からず、手をつけられなくて困っています。 大学生なのですが、物理は高校で習ったことがなく、基礎知識がないために、大変苦戦しております。 以下の測定結果から、デシベルの単位で表す減衰率の定義式はどのように求めればいいのでしょうか。回答よろしくお願いいたします。 <測定結果1> オシロスコープを発振器につなげて、発振器の減衰率を-50、-40、-30、-20、-10、0dBと変えながら出力電圧を読み取ったところ(条件:正弦波、周波数50Hz) -50dB 0.1V -40dB 0.315V -30dB 1.0V -20dB 3.1V -10dB 10V 0dB 31.5V <測定結果2> オシロスコープを発振器につなげて、発振器の周波数を、15、50、150、500、1.5k、5kHzと変えながら順にそれぞれの周期を読み取ったところ(条件:正弦波、-50dB) 15Hz 66msec 50Hz 19.6msec 150Hz 6.7msec 500Hz 2msec 1.5kHz 0.67msec 5.0kHz 0.2msec MATLABで同じ音を鳴らす? MATLAB初心者なのですが、下のようなプログラムを書きました。これではラの音が1回鳴りますが、この音を0.9秒の間隔を置いて3回鳴らしたいのですが、どのようにプログラムを書けばいいのでしょうか? よろしくお願いします。 Fs = 48000; Fq_A = 440; time = Fs / 10; n = 1 : time; tone(n) = 1 * sin(2 * pi * Fq_A * (n-1) / Fs); soundsc(tone, Fs) Matlabを使った心理学実験 Matlabを使って、刺激呈示から回答までの反応時間を測定する心理学実験のプログラムを作らないといけないのですが、どうしても先に進められないので、どなたか教えてください。 刺激は8秒間呈示されて、その間に被験者が回答すれば反応時間を記録して次の課題へ、また8秒以内に回答できなければそのまま次の課題へ進むという設定です。刺激はimreadを使って読み込み、呈示した後、 waitforbuttonpress を使って回答を待つようにしました。 今の段階で押されたキーと、反応時間を記録し、次の課題へ移行することは出来るのですが、8秒の回答制限時間をプログラムに組み込むことが出来ません。timer あるいはuiwait 、timeoutを使うことが出来ないかと考えているのですが、これらのコマンドの使い方がいまいちわからず、困っています。 どなたか、教えていただければ大変ありがたいです。また他のコマンドで可能であれば、全然かまわないので、是非教えていただきたいです。 なお、今の環境上、実験にはPsychtoolbox が使えないので、 Psychtoolboxなしでお願いします。どうしても、この問題を解決しないといけないので、どうかよろしくお願いします。 減衰率について 周波数440Hzで鳴る音叉がある。音の大きさのレベルは4秒間で、最初の5分の1に減衰した。 この音叉の音の減衰率γを求めよ。 これって、{440-440*(1/5)}/4 であってますか? MP-Z80の問題について ワンボードマイコンMP-Z80のプログラムを勉強しているのですが、 次の問題がわかりません。 (1)NHKの時報の様な音を出すプログラムを作成する。但し音の周波数は、440Hzの音が鳴ったり鳴らなかったりを0.5秒間隔で3回繰り返して880Hzで1秒間鳴らすプログラムを作成する。プログラムは8900H番地以降に作成すること。周波数の誤差は+-0.5以下に、時間の誤差は+-1ms以下にすること。 お願いします、だれか教えてください。 周波数に関することです。 第一の質問ですが、1000Hzのサイン波の音を再生したら1000Hzの音が出るとします。それのスピーカーケーブルの片方にダイオードなどをいれ、片方の位相を消した場合、その音は何Hzの音になるのですか? 第二の質問ですが、100Hzのサイン波の音を1秒間流したら100Hzの音が聞こえますよね、0,5秒流しても100Hzの音になりますよね?ですが100Hzの音を0,01秒間、0,005秒間、0,0025秒間流したらそれらは何Hzの音になるのですか? 機器の性能や、人間の感度、可聴域等は無視して理論的な解答をお願いします。 ハウリングの時はアンプ出力はどうなりますか? PAやカラオケで、スピーカーから出た音がマイクに戻って増幅されるとドンドン大きくなって ピーとかポーとか大音量のハウリングを起こしますが、 これはアンプの正帰還での発振回路と同じことなので、 アンプの定格出力まで大きく出力されて一定音圧の正弦波になると思っています。 間違い無いでしょうか? 具体的解説記事が見当たらないので宜しくお願いします。 MATLAB 画像表示に関して 卒業研究にてMATLABを使用しています。 MATLAB初心者です。 Aの画像とその他の画像を比べる評価実験を行う予定です。 Aの画像を細かく定義 Bの画像を細かく定義 Aの画像を表示させる 5秒たったら、画像をリセットして Bの画像を表示 画像をリセットして終了 というところまでは不格好ながらにもかけました。 これを、 A、B、C、Dの画像を細かく定義 Aの画像5秒間表示後、 リセット(真っ黒の状態に)して ランダムに(B、C、D、E)いずれかの画像を表示させる リセットして終了 という形に変えたいのですが、うまく行きません。 CDEの画像を定義した後、どのようにすればいいのでしょうか? ご教授いただきたく思います。 MATLABエラー 0.1秒かけて直線的に立ち上がり、その後0.1秒かけて直線的に減衰するような三角形の時間包絡をかけた音を作成したいのでの下記のプログラムを作りました。 1 %envelope.m 2 delta=1/48000; 3 t=delta:delta:0.1; 4 y=sin(2*pi*500*t); 5 6 t1=delta:delta:0.1; 7 env1=t1/0.1; 8 9 t2=delta:delta:0.1; 10 env2=1-t2/0.1; 11 12 env=[env;env2]; 13 z=y.*env; 14 plot(t,z); 15 16 A=0.9; 17 z=A*z; 18 sound(z,48000,16); しかし、次のようなエラーが起こりました。 行列の次元は一致しなければなりません。 エラー ==> enveplot at 13 z=y.*env; 何行目をどのように書き換えればエラーが起こらなくなりますか? AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム 音量、音圧、振幅、定義式、matlabについて よろしくお願いします。 はじめまして 音楽家(作曲、アレンジ)をやりながら大学の修士課程で信号処理(音声)の研究をおこなっています。 曲のミックス、マスタリング時において 各パートまたは2ミックスされたものに聴感上、音を前に出したり、迫力を出したりする時にコンプを使って音圧をあげます。 一般的には、このときにコンプを使うことによりデコボコだった時間軸波形を平らになるようにします。波形が変わるので若干音質も変化をします。 音量の上げ下げをするときは、ボリュームボタンを操作することにより音質を変えることなく音量を変えることが出来ます。 ここで質問なんですが 音量と音圧の定義(式)または違いは何でしょう? 次に matlabを使って音声信号処理シミュレーションを行っているときに 音声をmatlabに読み込み、音声の音量を変化させたいと思って、音声信号を定数倍することにより音量の変化を試みました。 ここで、音声を定数倍することにより音量を上げようとしたときに音質が変わる気がするのですが気のせいでしょうか?(音量の変化=振幅の変化?) 気のせいではないとしたら この理由として、自分なりの考えは matlabで扱える振幅の範囲を超えてしまい自動的にコンプがかかったような状態になったのではないか と思っています。 どうなんでしょうか? また、matlabのコマンドとして、取り込んだ音声データのボリュームを操作できる関数はないのでしょうか? さらに 音の音色を決めるのは「波形」だと言われていますが 市販されている各アーティストのCDをPCに取り込み波形を見ると、当然ですがミックスやマスタリングを行っていることによりほぼ平らになってます。 大体どんなアーティストのCDの波形を見ても同じ様な波形をしていると思いますが、 聞いてみると当然、それぞれのアーティストの曲が聞こえますね どうゆうことなんでしょうか? よろしくお願いします。 MATLABのプログラミングについてご質問です MATLAB初心者です。 現在、以下の環境を使っています。 ------------------------------- OS:Windows XP MATLABのバージョン:R2007a ------------------------------- 以下の内容をプログラムでどう組み込めばよいのか分らないため、質問させて頂きました。 詳しい方、ご教授のほどお願いします。 (1)Windowsのペイントで、ドラッグ&ドロップすると +----------+ | | +----------+ このように、点線で枠ができると思います。それをMATLABで表現する方法 (始点座標と終点座標はマウスで操作するため、座標は可変になります) (2)MATLAB-GUIに画像データ(sample.tif)を表示する方法 (3)MATLAB-GUIを表示した時に、表示位置を常にパソコンのモニター中央にする方法 (4)MATLAB-GUIで画面A, Bとある場合、画面Aの[次へ]ボタンを押すと画面Aを消して画面Bを表示する方法 長くて申し訳ございませんが、ご回答よろしくお願いします。 WAV形式ファイルの作成について "ラ" (A: 440Hz)の音を1秒間発生させるプログラムを教えてください。 DTMでピアノの音源を減衰させない方法 DTMでピアノの打ち込みを行っているのですが、ピアノの音を減衰させずに常に一定の音量で鳴らし続けることはできるのでしょうか? ピアノの、出始めの力強い音をずっと保たせたいと思っております。 有識者の方はお教えいただけますと幸いです。 減衰率と電圧の関係について 減衰率と電圧の関係について デジタルオシロスコープで正弦波の振幅を測定しました。 例えば、周波数が40Hzで電圧が7Vで減衰率は0dBとします。 上記の条件のときテスターで電圧を測った結果7.01Vでした。 次に減衰率のみを-10dBに変えて電圧を測ったら2.21Vでした。 この場合なぜ減衰率を変えると、電圧に変化が生じるのでしょうか? 初歩的な質問であると思いますが、わからないので教えていただきたいです。お願いします。 問題は数学ですか理科ですか。何を調べればいいですか こんにちは。解答の式の意味も知りたいです。 一直線上の自動車のテストコースがあり、この一点にチェックポイントがある。一定の速さで走っているスポーツカーが、このチェックポイントを通過する前にある地点でサイレンを鳴らし始めてから10秒間鳴らし続けた。このチェックポイントではスポーツカーが通過する前に8秒間サイレンが聞こえた。音の速さは一定であるとして次の問いに答えよ。 (1)スポーツカーの速さと音の速さとの関係を比で表せ。 (2)スポーツカーがチェックポイントを通過してから、ある地点でサイレンを鳴らし、4秒間鳴らし続けたとき、このチェックポイントでは何秒間サイレンを聞くことになるか。 (1) 1/10-8 : 1/10 = 5:1 なぜこの式がでるのかわかりません。 (2) 4×4/5 =3.2 (秒) パソコン関係の文章です。添削お願いします! 音楽の電気信号にする場合、次のような2つの方法が考えられる。 1つ目の方法は、音の波形(時刻毎の音の強さを表したもの)をそのまま電気の交流の波形(電圧が音の強さにあたる)に変換する方法である。これは【アナログ】通信と呼ばれ、古くから使われている。 もう1つの方法は、音の波形を、交流の折れ線グラフで近似する方法である。これは【ディジタル】通信と呼ばれ、次のようにして通信を行う。 まず、一定時間間隔で音の波形の値を調べる。次に各時刻での音の強さを0と1の組み合わせに直して送信する(全然音がしないと0ばかり、最大の音量がしていれば1ばかり送信する)。この時、1秒間に何回計測するかを示す値を【標本化】の周波数といい、音の強さを細かな段階数で表現することを【符号化】、段階数で表現された結果を0と1の組み合わせで表すことを【暗号化】という。 例えば、音楽を1秒間に10回ずつ音の波形を計測し、音の強さを16段階に分けるとすると、1回の計測で4ビット、すなわち4つの0と1の組み合わせで音の強さを表すことになる。したがって、【標本化】の周波数は10Hz、【暗号化】(あるいは【符号化】)のビット数は4bitとなる。両者を掛け合わせたもの(この場合40)は、1秒間に必要なビット数となり、ビットレイト(伝送速度)と呼ばれる。 上の過程で、計測時間間隔を細かくすればするほど、また。音の強さの段階を細かくすればするほど元の波形をより正確に近似できる。したがって、音質が【よくなる】。 なお、実際のCDでは、【標本化】の周波数が、44,100Hz、【暗号化】(あるいは【符号化】)のビット数が16なので、ビットレイトは16×44,100=705,600bit/秒となる(モノラルの場合。ステレオの場合は左右片方それぞれのビットレイト)。 とくに【 】の部分を見てもらいたいです。お願いします! matlabでのコロン演算子を用いた処理 matlabを用いて音声処理のプログラミングを行っています handles.y(handles.sS : handles.sE) = 0; %指定区間を無音に置き換え handles.sS = 1;%無音部の開始位置1 handles.sE = (handles.sT * handles.Fs);%無音部の終了位置を計算 handles.sT = 0; %無音部の初期値0 handles.Fs = 44100; %サンプリング周波数44100Hz 上のような処理で正弦波handles.yの指定区間を無音に置換し handles.sT = handles.sT - (1/handles.f * 1/72); %無音部の値を5°分減少 上のような処理で無音時間の長さを操作しています しかし再生を行うと コロン演算子をインデックスとして使う場合、整数オペランドが必要です という警告が出てきてしまいます。コロン演算子のオペランドを整数にしたいのですが、うまい処理が思いつきません。 なにか方法があればご教授お願いします。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
補足
早速の回答ありがとうございます。 Fs = 48000; Freq = 440; Freq2= 880; time=Fs / 10; n = 1:time; tone(n) = 1*sin(2*pi*Freq*(n-1)/Fs); n = time:Fs; tone(n) = 0; n = 4*Fs+1:6*Fs; A = linspace(1,0,2/44100); tone(n) = A.*sin(2*pi*Freq2*(n-1)/Fs); soundsc(tone,Fs); と組んでみましたが -------------------------------------------- ??? エラー ==> times 行列の次元は一致しなければなりません。 エラー ==> Untitled3 at 17 tone(n) = A.*sin(2*pi*Freq2*(n-1)/Fs); -------------------------------------------- とエラーを吐いてしまいました。 どうすればこのエラーを回避できますか?