[Suzaku:01064] SIDのサンプリング周波数
森戸 誠[MORITO Makoto]
email@hidden
2007年 11月 1日 (木) 11:59:03 JST
森戸と申します。
SUZAKU-V と SID を用いて 音声入力を行っています。
音声の取り込みには HPから 提供されている
ドライバー と FPGA 開発環境 を使っています。
現象) サンプリング周波数がずれている。
サンプリング間隔を決めている ドライバー(sid.c)の部分は
sid->reg_sample_rate = sid->sample_clock / rate;
の演算です。
sid->reg_sample_rateの値が FPGA内のsampl_rateに書き込まれて
24Mhzを分周して サンプリングパルスを作っています。
所望のサンプリング周波数(たとえば16kHz)の場合には
rate=16000
となり、sampl_rateの値が FPGA内のsampl_rateは1500となります。
すなわち 24Mhzを1500分周するわけです。
ところが サンプリングのパルスを作っている vhdの記述を見ると
process (SMPL_CLK, SYS_Rst)
begin
if SYS_Rst = '1' then
smpl_count <= x"00000000";
smpl_shot <= '0';
elsif SMPL_CLK'event and SMPL_CLK = '1' then
if ad_start = '1' then
if smpl_count = sampl_rate then
smpl_count <= x"00000000";
smpl_shot <= '1';
else
smpl_count <= smpl_count + 1;
smpl_shot <= '0';
end if;
elsif ad_start = '0' and sys_count_en = '0' then
smpl_count <= x"00000000";
smpl_shot <= '0';
else
smpl_count <= smpl_count + 1;
smpl_shot <= '0';
end if;
end if;
end process ;
となっています。特に
if smpl_count = sampl_rate then
smpl_count <= x"00000000";
smpl_shot <= '1';
の部分を見ると smpl_count は sampl_rate(1500)になってから
0になります。ということは 1501分周しています。
ドライバで
sid->reg_sample_rate = sid->sample_clock / rate; -1;
とするか
FPGAで if smpl_count = sampl_rate-1
の対処が必要かと思います。
いかがでしょうか? 間違っています?
suzaku メーリングリストの案内