MATLABでwavファイルの書き込みについて

このQ&Aのポイント
  • MATLABでwavファイルの書き込みについての質問です。現在勉強しているプログラミング初心者が、周波数1000Hz、0.5秒、サンプリング周波数22050Hzの設定でwavファイルを保存したいと考えています。
  • 具体的な設定としては、f=1000、A=0.5、Fs=22050、wavwrite(MyFunc_2(1000, 0.5, 22050), 'sin1000')という形で保存していますが、録音時に流れた音と録音された音が異なる問題が発生しています。
  • 問題の解決に協力をお願いします。ファンクションMファイルはMyFunc_2(f, A, Fs)という形で定義されており、サンプリング周波数や波形の生成方法などが含まれています。
回答を見る
  • ベストアンサー

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) このような設定にしています。 問題解決への協力よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

wavwriteでサンプリング周波数を指定していないからです。 wavwrite(MyFunc_2(1000,0.5,22050),22050,'sin1000'); http://www.mathworks.co.jp/access/helpdesk_archive_ja_JP/r2007/help/toolbox/matlab/ref/wavwrite.html

amemiyaryu
質問者

お礼

サンプリング周波数は、2度指定しなければならなかったのですね。 ありがとうございます!大変助かりました!

関連するQ&A

  • MATLABでの純音提示の時間制御

    MATLABで一定間隔をおいて純音を提示することを目指しています。 その際の時間制御に関して質問があります。 現在250msごとに純音提示と無音状態を反復するプログラムを作成しています。 ticとtocを用いて純音ー無音の1サイクルに要する時間を計測しますと,0.57-0.68secの間でばたついています。可能な限り1サイクルが0.50sec付近に落ち着くようにしたいのですがどのようにすればよいでしょうか? PCのスペックなどはいじることが困難なので,出来る限りプログラミングで対応したいと考えています。 よろしくおねがいいたします。 ・MATLABのバージョン:MATLABR2007b ・導入済みのツールボックス:psychotoolbox ・作成済みプログラム f=440;%ラ音 Fs=44100 ;%サンプリング周波数 T=0.25;  %信号の長さ t=0:1/Fs:T; %公差が1/Fsで0から1までの等差数列 y=sin(2*pi*f*t); t2=0:1/Fs:0.25 %公差が1/Fsで0から1までの等差数列 y2=sin(2*pi*0*t2); for t=1:4 ; sound(y2,Fs); sound(y,Fs); end;

  • 移動平均とローパスフィルタについて(matlab)

    入力信号10Hz(サンプリング周波数1000Hz)に対して、 1周期分(100点)のデータを取り出して平均値を算出し、1サンプル移動して同様に100点のデータの平均値を算出する、というような移動平均のプログラムを書きました(下に載せました)。 この移動平均プログラムと同様の結果が得られるようなローパスフィルタを設計したいのですが、方法がよくわかりません。 ご存じの方、教えて頂けると幸いです。 宜しくお願いします。 以下、移動平均プログラムになります。 clear all fs = 1000; % サンプリング周波数 t = 1/fs:1/fs:3; f = 10; % 入力信号の周波数 y = sin(2*pi*f*t); % 入力信号の生成 M = round(fs/f); % 一周期分のサンプル数(10Hzの場合、100点) for i = 1:1:length(y)-M+1 y2(i) = mean(y(i:1:i-1+M)); % 移動平均 end plot(t(M:end),y2);

  • matlabできる方教えてください

    matlab初心者です。 入力信号(sin波)に階段波形をかけるプログラムをかきたいのですが、うまくいきません。 以下は、私がかいたプログラムです。 わかる方がいらっしゃいましたら回答宜しくお願いします。 clear all;close all; fs= 250; t_l=[0 1]; t=t_l(1)+1/fs:1/fs:t_l(2); X = sin(2*pi*2*t); Y = sin(2*pi*10*t); Z = stairs(X).*Y; figure stairs(t,Z)

  • MATLABに詳しい方いらっしゃいますか?

    matlabで10Hz、20Hzなどの音響ファイルの作り方を教えてください。 それと、両耳、LとRが違う周波数の音響ファイルを作ることは可能でしょうか? たとえば、L:10Hz R:20Hz などの

  • MATLABでの左右で時間差をつけた正弦波の再生

    自分は現在MATLABを用いてプログラミングを行っています。 左右それぞれから時間差をつけて正弦波を再生して音像定位の実験を行いたいのですが、どのようにプログラミングをおこなえばいいのかよくわかりません。 現在は時間差をつける機構を実装していない状態で、 handles.x = 0.1*sin(2*pi*handles.f*t)*2.626891326; handles.y = handles.a*sin((2*pi*handles.f*handles.t)+handles.rad); z = [handles.x;handles.y]'; sound(z,handles.Fs); handles.fは周波数、handles.tは再生時間です このようにして再生しています。 このプログラムで、handles.xまたはhandles.yのどちらかを基準としてもう片方の再生開始時間を操作したいと考えています。 再生開始時間を遅らせるのにはdelayフィルタを用いようかと考えているのですが、再生開始時間を早くする方法がよくわかりません。 なにかいい方法があればご教授お願いします。

  • matlabでのwavwlet解析について

    matlabでのwavwlet解析を行いたいと思っているのですが、うまくできません。 式的には以下でいいと思うのですが、 wavelet = ifft[fft(g(t))*fft(fai(t)] g(t):信号、fai(t):複素モアレー関数。 複素モアレー関数をどうやってmatlabで関数にすればいいいのかわかりません。複素モアレー関数には変数としてt',a(1/aが周波数に相当)の二つがあると思うのですが'Function'を使って関数にする場合どうやってすればいいのでしょうか?

  • matlabでのlowpassについて

    matlabでのlowpass filterに関しての質問です。 複数のwavfile(10個程度,track1.wav~track10.wav)をwavreadして、それに1000Hz以上の周波数をカットするfilterをかけて,その後にfilterをかけ終えた音をwavwrite(track1_low.wav~track10_low.wav)して保存するコードをかけたいのですが、わかる方いませんか? ディレクトリを指定→wavread→lowpass→ディレクトリを指定→wavwriteの流れでコードを教えていただけると嬉しいです。 よろしくお願いします。

  • 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)

  • ode45(Matlab)のしくみ

    MATLABの関数ode45は  dy/dt=F(t,y) の型の微分方程式の解yを得るのにもちいりますが,基本的なプログラムの表記は [T,Y]=ode45('F',tspan,yo) と書きますよね.ここで得られるT,Yは T:to t1 t2 t3.....tend Y:yo y1 y2 y3.....yend であるわけですが,実際このYはどのようにして得られた値なのでしょうか? y2なら例えば   y2=dy/dt*(t2-t1)+y1 などのようにして得られているのでしょうか?

  • Matlab/SimulinkのChirp信号について

    Matlab/SimulinkのChirp信号について Matlab/SimulinkのChirp信号について教えてください。このChirp信号は時間と共に周波数が増加するものですが、20秒間で0.1~10Hzになるように設定した場合、時間と周波数の関係はどのようになるのでしょうか?周波数が一定に比例して増えていくのでしょうか?ちょっとピンときません。時間軸で段々増えていく状態を周波数で置き換えたいのです。よろしければお教えください。

専門家に質問してみよう