[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 メーリングリストの案内