[Suzaku:01065] Re: SIDのサンプリング周波数
Keichi Kawaoka
email@hidden
2007年 11月 2日 (金) 19:43:25 JST
川岡と申します。
ご指摘のとおり、-1する必要がありました。
ドライバで、-1するほうをお勧めいたします。
(恒久対策として、近々修正版ドライバを公開したいと思っています。)
森戸 誠[MORITO Makoto] さんは書きました:
> 森戸と申します。
>
> 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 mailing list
> email@hidden
> http://lists.atmark-techno.com/mailman/listinfo/suzaku
>
--
____________________________________________________
川岡 圭一
(株)アットマークテクノ 開発部
札幌市中央区北5条東2丁目 AFTビル 6F
TEL: 011-207-6550 FAX: 011-207-6570
URL: http://www.atmark-techno.com/
E-mail: email@hidden
____________________________________________________
suzaku メーリングリストの案内