Top Banner
This web page has useful information about speech recognition, including some MATLAB examples for the bank of filters (BOF) and linear predictive coding (LPC) methods. NEW: For FFT in VHDL, use ieee.math_real.all and ieee.math_complex.all; Saving speech signal to a data file and reading the data into VHDL MATLAB Code (savespeech.m ) VHDL Code (readspeech.vhd ) MATLAB Code (Examples) 1. MATLAB Code to get time-domain speech signal from microphone and obtain its Fourier Transform (fft_example.m ) 2. Bank of Filters (BOF) o NOTE: The following two m-files use bof_feature.m which you will have to code yourself. This file should take in a speech signal and return the corresponding BOF features for that signal. b. MATLAB Code for Training (bof_training.m ) c. MATLAB Code for Recognition (bof_recognition.m ) 3. Linear Predictive Coding (LPC) o NOTE: The following two m-files use lpc_feature.m which you will have to code yourself. This file should take in a speech signal and return the corresponding LPC features for that signal. b. MATLAB Code for Training (lpc_training.m ) c. MATLAB Code for Recognition (lpc_recognition.m ) Savespeech.m : function e=savespeech(filename,y,word)
76

Speech Recognition

Nov 04, 2014

Download

Documents

Debolina Ghosh

speech
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Speech Recognition

This web page has useful information about speech recognition, including some MATLAB examples for the bank of filters (BOF) and linear predictive coding (LPC) methods.

NEW:For FFT in VHDL, use ieee.math_real.all and ieee.math_complex.all;Saving speech signal to a data file and reading the data into VHDLMATLAB Code (savespeech.m)VHDL Code (readspeech.vhd)MATLAB Code (Examples)

1. MATLAB Code to get time-domain speech signal from microphone and obtain its Fourier Transform (fft_example.m)

2. Bank of Filters (BOF)o NOTE: The following two m-files use bof_feature.m which you will have to code

yourself. This file should take in a speech signal and return the corresponding BOF features for that signal.

b. MATLAB Code for Training (bof_training.m)c. MATLAB Code for Recognition (bof_recognition.m)

Linear Predictive Coding (LPC)

o NOTE: The following two m-files use lpc_feature.m which you will have to code yourself. This file should take in a speech signal and return the corresponding LPC features for that signal.

b. MATLAB Code for Training (lpc_training.m)c. MATLAB Code for Recognition (lpc_recognition.m)

Savespeech.m :

function e=savespeech(filename,y,word)

e=0;fid = fopen(filename,'w');if (fid == -1) e = 1; error('Error writing y to %s\n',filename); returnend

fprintf(fid,'# Speech signal file (%s)\n',filename);fprintf(fid,'%d\n',length(y));for i=1:length(y) fprintf(fid,'%.8e\n',y(i));end

Page 2: Speech Recognition

r=fclose(fid);

if (r == -1) e = 1; error('Error closing file %s\n',filename); returnend

readspeech.vhd

library ieee, std, work;use ieee.std_logic_1164.all, std.textio.all, work.all;

entity readspeech is port (speech_length : out integer; speech_read : out std_logic := '0');end readspeech;

architecture only of readspeech is signal N : integer := 10000; -- make sure this number matches the number of samples in your speech data file type speechvector is array (1 to N) of real; signal speech : speechvector; begin READDATA: process

file data_file : text IS IN "down.dat"; variable buf : line; variable speech_length_t : integer := 0; variable real_data : real;

begin

readline(data_file,buf); -- read comment line (ignore) readline(data_file,buf); -- read line read(buf,speech_length_t); -- number of data points for i in 1 to speech_length_t loop readline(data_file,buf); -- read a line read(buf,real_data); -- get the data speech(i) <= real_data; -- store to speech vector end loop; file_close(data_file);

speech_read <= '1'; speech_length <= speech_length_t; wait; end process;end only;

function bof_training

Page 3: Speech Recognition

% This code is for creating the library of Bank of Filters (BOF) features.

% get a word from microphoneFs = 10000; % Sampling Frequency (Hz)n = 100; % Number of filters (frequency bands)Nseconds = 1; % Length of speech signal

% List of words (you can add more words to this list but make sure% each word has five characters (if less then pad it with spaces)words = [' up'; ' down'; ' left'; 'right']; % Matrix to store features for each word (rows correspond to words) fw = zeros(size(words,1),n);

fprintf('You will get one second to say each word.\n\n');

% For each word, get the word from microphone and compute its featuresfor i=1:size(words,1) fprintf('Hit enter and say immediately ''%s'':',words(i,:)); % pause for enter key junk=input(''); % get a word from microphone y = wavrecord(Nseconds*Fs, Fs, 'double'); % Calculate the features of the word f = bof_feature(y,n,Fs); % Save them in the features matrix fw(i,:) = f; % abs(f) % plot(1:Fs,fft(y));end

% Save features matrix to a file (this file will be loaded into Matlab during speech recognition)save words_bof.mat Fs n words fw;

function bof_recognition% Speech Recognition using Bank of Filters (BOF)

% load training dataload words_bof.mat;

% ask user to say a wordfprintf('You will get one second to say your word.\n\n');fprintf('Hit enter and say your word immediately:');% pause for enter keyjunk=input('');

% get the word from microphoney = wavrecord(1*Fs, Fs, 'double');

Page 4: Speech Recognition

% Calculate the features of the wordf = bof_feature(y,n,Fs);

% Calculate distances between the spoken word and each word in the libraryd = zeros(1,size(words,1));for i=1:size(words,1) d(i) = sqrt(sum((f-fw(i,:)).^2));end

% Print the word with minimum feature distance. This word was spoken.[temp1,indx1] = min(d);fprintf('You said: %s\n',words(indx1,:));

function lpc_training% This code is for creating the library of Linear Predictive Coding (LPC) features.

Fs = 10000; % Sampling Frequency (Hz)n = 20; % LPC orderNseconds = 1; % Length of speech signal

% List of words (you can add more words to this list but make sure% each word has five characters (if less then pad it with spaces)words = [' up'; ' down'; ' left'; 'right'];

% Matrix to store features for each word (rows correspond to words)fw = zeros(size(words,1),n);

fprintf('You will get one second to say each word.\n\n');

% For each word, get the word from microphone and compute its featuresfor i=1:size(words,1) fprintf('Hit enter and say immediately ''%s'':',words(i,:)); % pause for enter key junk=input(''); % get a word from microphone y = wavrecord(Nseconds*Fs, Fs, 'double');

% Calculate the features of the word f = lpc_feature(y,n); % Save them in the features matrix fw(i,:) = f; % abs(f) % plot(1:Fs,fft(y));end

% Save features matrix to a file (this file will be loaded into Matlab during speech recognition)save words_lpc.mat Fs n words fw;

Page 5: Speech Recognition

function lpc_recognition% Speech Recognition using Linear Predictive Coding (LPC)

% load training dataload words_lpc.mat;

% ask user to say a wordfprintf('You will get one second to say your word.\n\n');fprintf('Hit enter and say your word immediately:');% pause for enter keyjunk=input('');

% get the word from microphoney = wavrecord(1*Fs, Fs, 'double');

% Calculate the features of the wordf = lpc_feature(y,n);

% Calculate distances between the spoken word and each word in the libraryd = zeros(1,size(words,1));for i=1:size(words,1) d(i) = sqrt(sum((f-fw(i,:)).^2));end

% Print the word with minimum feature distance. This word was spoken.[temp1,indx1] = min(d);fprintf('You said: %s\n',words(indx1,:));

/////////////////////////////////////////////////////////////////////////// modified from the Terasic version:// eliminate all memory references// simplify interface to top-level module// add audio I/O from top-level module// modifed by Bruce Land, Cornell University 2007/////////////////////////////////////////////////////////////////////////

module AUDIO_DAC_ADC ( oAUD_BCK, oAUD_DATA, oAUD_LRCK, oAUD_inL, oAUD_inR, iAUD_ADCDAT, iAUD_extR, iAUD_extL, // Control Signals iCLK_18_4, iRST_N );

parameter REF_CLK = 18432000; // 18.432 MHzparameter SAMPLE_RATE = 32000; // 48 KHzparameter DATA_WIDTH = 16; // 16 Bits

Page 6: Speech Recognition

parameter CHANNEL_NUM = 2; // Dual Channel

// audio input FROM top-level moduleinput signed [DATA_WIDTH-1:0] iAUD_extR, iAUD_extL;// audio output TO top-level moduleoutput signed [DATA_WIDTH-1:0] oAUD_inL, oAUD_inR;

// Audio Sideoutput oAUD_DATA;output oAUD_LRCK;output reg oAUD_BCK;input iAUD_ADCDAT;// Control Signalsinput iCLK_18_4;input iRST_N;// Internal Registers and Wiresreg [3:0] BCK_DIV;reg [8:0] LRCK_1X_DIV;reg [7:0] LRCK_2X_DIV;reg [6:0] LRCK_4X_DIV;reg [3:0] SEL_Cont;

// to DAC and from ADCreg signed [DATA_WIDTH-1:0] AUD_outL, AUD_outR;reg signed [DATA_WIDTH-1:0] AUD_inL, AUD_inR;

reg LRCK_1X;reg LRCK_2X;reg LRCK_4X;wire [3:0] bit_in;

////////////////////////////////////////////////////////////// AUD_BCK Generator ///////////////////////////////////////////////////////////////always @ (posedge iCLK_18_4 or negedge iRST_N)begin if(!iRST_N) begin BCK_DIV <= 0; oAUD_BCK <= 0; end else begin if (BCK_DIV >= REF_CLK/(SAMPLE_RATE*DATA_WIDTH*CHANNEL_NUM*2)-1) begin BCK_DIV <= 0; oAUD_BCK <= ~oAUD_BCK; end else

BCK_DIV <= BCK_DIV + 4'd1; endend

////////////////////////////////////////////////////////////// AUD_LRCK Generator ////////////////oAUD_LRCK is high for left and low for right//////////////////////////////////////////////////////

Page 7: Speech Recognition

always @ (posedge iCLK_18_4 or negedge iRST_N)begin if(!iRST_N) begin LRCK_1X_DIV <= 0; LRCK_2X_DIV <= 0; LRCK_4X_DIV <= 0; LRCK_1X <= 0; LRCK_2X <= 0; LRCK_4X <= 0; end else begin // LRCK 1X if (LRCK_1X_DIV >= REF_CLK/(SAMPLE_RATE*2)-1) begin LRCK_1X_DIV <= 0; LRCK_1X <= ~LRCK_1X; end else

LRCK_1X_DIV <= LRCK_1X_DIV + 9'd1;

// LRCK 2X if (LRCK_2X_DIV >= REF_CLK/(SAMPLE_RATE*4)-1) begin LRCK_2X_DIV <= 0; LRCK_2X <= ~LRCK_2X; end else

LRCK_2X_DIV <= LRCK_2X_DIV + 8'd1;

// LRCK 4X if (LRCK_4X_DIV >= REF_CLK/(SAMPLE_RATE*8)-1) begin LRCK_4X_DIV <= 0; LRCK_4X <= ~LRCK_4X; end else

LRCK_4X_DIV <= LRCK_4X_DIV + 7'd1; endend

assign oAUD_LRCK = LRCK_1X;

//////////////////////////////////////////////////////////// 16 Bits - MSB First ///////////////////// Clocks in the ADC input/// and sets up the output bit selector/// and clocks out the DAC data//////////////////////////////////////////////////// first the ADCalways @ (negedge oAUD_BCK or negedge iRST_N)begin if (!iRST_N) SEL_Cont <= 0; else begin SEL_Cont <= SEL_Cont + 4'd1; // 4 bit counter, so it wraps at 16

Page 8: Speech Recognition

if (LRCK_1X) AUD_inL[~(SEL_Cont)] <= iAUD_ADCDAT; else AUD_inR[~(SEL_Cont)] <= iAUD_ADCDAT; endendassign oAUD_inL = AUD_inL;assign oAUD_inR = AUD_inR;

// now the DAC -- output the DAC bit-stream assign oAUD_DATA = (LRCK_1X) ? AUD_outL[~SEL_Cont] : AUD_outR[~SEL_Cont]; // register the inputs always @ (negedge LRCK_1X)begin AUD_outL <= iAUD_extL; end always @ (posedge LRCK_1X)begin AUD_outR <= iAUD_extR; end

endmodule

module AudioRAM ( input iReset, input iStartLoad, input iWriteClock, input [BITS-1:0] iSample, input iReadClock, input [LBITS-1:0] iReadAddr, input iWindow, output [BITS-1:0] oValue, output reg oLoadComplete, output reg state);

parameter BITS = 16;parameter LBITS = 10;

//reg state;parameter WAIT = 1'b0;parameter WRITE = 1'b1;

reg [LBITS:0] wraddr;reg wren, shot, reshot;

// look for start signalalways @ (posedge iStartLoad or posedge reshot)begin if (iStartLoad) shot <= 1'b1; else shot <= 1'b0;end

// write state machine

Page 9: Speech Recognition

always @ (posedge iWriteClock)begin if (iReset) begin state <= WAIT; wraddr <= 0; wren <= 1'b0; oLoadComplete <= 1'b0; end else begin case (state) WAIT: begin wren <= 1'b0; if (shot == 1'b1) begin reshot <= 1'b1; wraddr <= 0; state <= WRITE; end else state <= WAIT; end WRITE: begin reshot <= 1'b0; if (wraddr < 1024) begin wren <= 1'b1; wraddr <= wraddr + 11'b1; state <= WRITE; oLoadComplete <= 1'b0; end else begin wren <= 1'b0; state <= WAIT; oLoadComplete <= 1'b1; end end endcase endend

wire [31:0] hammval, hannval;wire [15:0] hamm, hann, hammtop, hanntop, datain;assign hammval = hamm * iSample;assign hannval = hann * iSample;assign hammtop = {hammval[31], hammval[27:13]};assign hanntop = {hannval[31], hannval[27:13]};assign datain = (iWindow == 1'b1) ? hanntop : hammtop;

hammingrom hammrom ( .iAddress(wraddr), .oHamming(hamm)

Page 10: Speech Recognition

);

hanningrom hannrom ( .iAddress(wraddr), .oHanning(hann));

ram1024x16 audsamp ( .data(iSample), .rdaddress(iReadAddr), .rdclock(iReadClock), .wraddress(wraddr), .wrclock(iWriteClock), .wren(wren), .q(oValue));

endmodule

module DE2_TOP (//////////////////////// Clock Input ////////////////////////input CLOCK_27, //27 MHzinput CLOCK_50, //50 MHzinput EXT_CLOCK, //External Clock//////////////////////// Push Button////////////////////////input [3:0] KEY, //Pushbutton[3:0]//////////////////////// DPDT Switch////////////////////////input [17:0] SW, //Toggle Switch[17:0]//////////////////////// 7-SEG Dispaly ////////////////////////output [6:0] HEX0, // Seven

Segment Digit 0output [6:0] HEX1, // Seven

Segment Digit 1output [6:0] HEX2, // Seven

Segment Digit 2output [6:0] HEX3, // Seven

Segment Digit 3output [6:0] HEX4, // Seven

Segment Digit 4output [6:0] HEX5, // Seven

Segment Digit 5output [6:0] HEX6, // Seven

Segment Digit 6output [6:0] HEX7, // Seven

Segment Digit 7//////////////////////////// LED////////////////////////////

Page 11: Speech Recognition

output [8:0] LEDG, // LED Green[8:0]

output [17:0] LEDR, // LED Red[17:0]

//////////////////////////// UART ////////////////////////////output UART_TXD, //UART Transmitterinput UART_RXD, //UART Receiver//////////////////////////// IRDA ////////////////////////////output IRDA_TXD, //IRDA Transmitterinput IRDA_RXD, //IRDA Receiver/////////////////////// SDRAM Interface////////////////////////inout [15:0] DRAM_DQ, // SDRAM

Data bus 16 Bitsoutput [11:0] DRAM_ADDR, // SDRAM

Address bus 12 Bitsoutput DRAM_LDQM, //SDRAM Low-byte Data Mask output DRAM_UDQM, //SDRAM High-byte Data Maskoutput DRAM_WE_N, //SDRAM Write Enableoutput DRAM_CAS_N, //SDRAM Column Address Strobeoutput DRAM_RAS_N, //SDRAM Row Address Strobeoutput DRAM_CS_N, //SDRAM Chip Selectoutput DRAM_BA_0, //SDRAM Bank Address 0output DRAM_BA_1, //SDRAM Bank Address 0output DRAM_CLK, //SDRAM Clockoutput DRAM_CKE, //SDRAM Clock Enable//////////////////////// Flash Interface////////////////////////inout [7:0] FL_DQ, // FLASH

Data bus 8 Bitsoutput [21:0] FL_ADDR, // FLASH

Address bus 22 Bitsoutput FL_WE_N, //FLASH Write Enableoutput FL_RST_N, //FLASH Resetoutput FL_OE_N, //FLASH Output Enableoutput FL_CE_N, //FLASH Chip Enable//////////////////////// SRAM Interface ////////////////////////inout [15:0] SRAM_DQ, // SRAM Data

bus 16 Bits

Page 12: Speech Recognition

output [17:0] SRAM_ADDR, // SRAM Address bus 18 Bits

output SRAM_UB_N, //SRAM High-byte Data Mask output SRAM_LB_N, //SRAM Low-byte Data Mask output SRAM_WE_N, //SRAM Write Enableoutput SRAM_CE_N, //SRAM Chip Enableoutput SRAM_OE_N, //SRAM Output Enable//////////////////// ISP1362 Interface ////////////////////////inout [15:0] OTG_DATA, // ISP1362

Data bus 16 Bitsoutput [1:0] OTG_ADDR, // ISP1362

Address 2 Bitsoutput OTG_CS_N, //ISP1362 Chip Selectoutput OTG_RD_N, //ISP1362 Writeoutput OTG_WR_N, //ISP1362 Readoutput OTG_RST_N, //ISP1362 Resetoutput OTG_FSPEED, //USB Full Speed,0 = Enable, Z = Disableoutput OTG_LSPEED, //USB Low Speed, 0 = Enable, Z = Disableinput OTG_INT0, //ISP1362 Interrupt 0input OTG_INT1, //ISP1362 Interrupt 1input OTG_DREQ0, //ISP1362 DMA Request 0input OTG_DREQ1, //ISP1362 DMA Request 1output OTG_DACK0_N, // ISP1362

DMA Acknowledge 0output OTG_DACK1_N, // ISP1362

DMA Acknowledge 1//////////////////// LCD Module 16X2////////////////////////////inout [7:0] LCD_DATA, // LCD Data

bus 8 bitsoutput LCD_ON, //LCD Power ON/OFFoutput LCD_BLON, //LCD Back Light ON/OFFoutput LCD_RW, //LCD Read/Write Select, 0 = Write, 1 = Readoutput LCD_EN, //LCD Enableoutput LCD_RS, //LCD Command/Data Select, 0 = Command, 1 = Data//////////////////// SD Card Interface ////////////////////////inout SD_DAT, //SD Card Data

Page 13: Speech Recognition

inout SD_DAT3, //SD Card Data 3inout SD_CMD, //SD Card Command Signaloutput SD_CLK, //SD Card Clock//////////////////////// I2C////////////////////////////////inout I2C_SDAT, //I2C Dataoutput I2C_SCLK, //I2C Clock//////////////////////// PS2////////////////////////////////input PS2_DAT, //PS2 Datainput PS2_CLK, //PS2 Clock//////////////////// USB JTAG link ////////////////////////////input TDI, // CPLD -

> FPGA (data in)input TCK, // CPLD -

> FPGA (clk)input TCS, // CPLD -

> FPGA (CS)output TDO, // FPGA -

> CPLD (data out)//////////////////////// VGA////////////////////////////output VGA_CLK, //VGA Clockoutput VGA_HS, //VGA H_SYNCoutput VGA_VS, //VGA V_SYNCoutput VGA_BLANK, //VGA BLANKoutput VGA_SYNC, //VGA SYNCoutput [9:0] VGA_R, // VGA

Red[9:0]output [9:0] VGA_G, // VGA

Green[9:0]output [9:0] VGA_B, // VGA

Blue[9:0]//////////////// Ethernet Interface////////////////////////////inout [15:0] ENET_DATA, // DM9000A

DATA bus 16Bitsoutput ENET_CMD, //DM9000A Command/Data Select, 0 = Command, 1 = Dataoutput ENET_CS_N, //DM9000A Chip Selectoutput ENET_WR_N, //DM9000A Writeoutput ENET_RD_N, //DM9000A Read

Page 14: Speech Recognition

output ENET_RST_N, //DM9000A Resetinput ENET_INT, //DM9000A Interruptoutput ENET_CLK, //DM9000A Clock 25 MHz//////////////////// Audio CODEC////////////////////////////inout AUD_ADCLRCK, // Audio

CODEC ADC LR Clockinput AUD_ADCDAT, //Audio CODEC ADC Datainout AUD_DACLRCK, // Audio

CODEC DAC LR Clockoutput AUD_DACDAT, //Audio CODEC DAC Datainout AUD_BCLK, //Audio CODEC Bit-Stream Clockoutput AUD_XCK, //Audio CODEC Chip Clock//////////////////// TV Devoder////////////////////////////input [7:0] TD_DATA, // TV Decoder Data

bus 8 bitsinput TD_HS, //TV Decoder H_SYNCinput TD_VS, //TV Decoder V_SYNCoutput TD_RESET, //TV Decoder Reset//////////////////////// GPIO ////////////////////////////////inout [35:0] GPIO_0, // GPIO

Connection 0inout [35:0] GPIO_1 // GPIO

Connection 1);

// Turn on all displayassign HEX0 = 7'h00;assign HEX1 = 7'h00;assign HEX2 = 7'h00;assign HEX3 = 7'h00;assign HEX4 = 7'h00;assign HEX5 = 7'h00;assign HEX6 = 7'h00;assign HEX7 = 7'h00;assign LCD_ON = 1'b1;assign LCD_BLON = 1'b1;

// All inout port turn to tri-stateassign DRAM_DQ = 16'hzzzz;assign FL_DQ = 8'hzz;assign SRAM_DQ = 16'hzzzz;assign OTG_DATA = 16'hzzzz;assign SD_DAT = 1'bz;assign ENET_DATA = 16'hzzzz;assign GPIO_0 = 36'hzzzzzzzzz;

Page 15: Speech Recognition

assign GPIO_1 = 36'hzzzzzzzzz;

//////////////////////////////////////////////////////////////////////// Filter Bank (I/O)//////////////////////////////////////////////////////////////////////

/// audio stuff /////////////////////////////////////////////////// output to audio DACwire signed [15:0] audio_outL, audio_outR;// input from audio ADCwire signed [15:0] audio_inL, audio_inR;

wire AUD_CTRL_CLK;wire DLY_RST;wire I2C_END;wire NIOS_CLK;wire CLK;

// Between NIOS and FFT controllerwire [9:0] fftaddr;wire fftstart;wire fftdone;wire [15:0] fftpower;wire [5:0] fftexp;

// Between NIOS and peak detectorwire peakstart;wire peakdone;wire [LBITS-2:0] peakindex;

assign TD_RESET = 1'b1; // Allow 27 MHzassign AUD_ADCLRCK = CLK;assign AUD_XCK = AUD_CTRL_CLK;assign AUD_DACLRCK = CLK;

Reset_Delay r0 (.iCLK(CLOCK_50),.oRESET(DLY_RST)

);

Audio_PLL p1 (.areset(~DLY_RST),.inclk0(CLOCK_27),.c0(AUD_CTRL_CLK)

);

I2C_AV_Config u3 (// Host Side.iCLK(CLOCK_50),.iRST_N(KEY[0]),//.o_I2C_END(I2C_END),// I2C Side.I2C_SCLK(I2C_SCLK),.I2C_SDAT(I2C_SDAT)

);

AUDIO_DAC_ADC u4 (

Page 16: Speech Recognition

// Audio Side.oAUD_BCK(AUD_BCLK),.oAUD_DATA(AUD_DACDAT),.oAUD_LRCK(CLK),.oAUD_inL(audio_inL), // audio data from ADC .oAUD_inR(audio_inR), // audio data from ADC .iAUD_ADCDAT(AUD_ADCDAT),.iAUD_extL(audio_outL), // audio data to DAC.iAUD_extR(audio_outR), // audio data to DAC// Control Signals.iCLK_18_4(AUD_CTRL_CLK),.iRST_N(DLY_RST)

);

NiosMemPLL p2 (.inclk0(CLOCK_50),.c0(NIOS_CLK),.c1(DRAM_CLK)

);

VoiceRecognizer cpu (// 1) global signals:.clk_0(NIOS_CLK),.reset_n(KEY[0]),

// the_FFTAddr.out_port_from_the_FFTAddr(fftaddr),

// the_FFTDone.in_port_to_the_FFTDone(fftdone),

// the_FFTImag.in_port_to_the_FFTPower(fftpower),

// the_FFTStart.out_port_from_the_FFTStart(fftstart),

// the_FFTExp.in_port_to_the_FFTExp(fftexp),

// the_Train.in_port_to_the_Train(~KEY[3]),

// the_AppSwitches.in_port_to_the_AppSwitches(SW[1:0]),

// the_GreenLED.out_port_from_the_GreenLED(LEDG[7]),

// the_RedLED.out_port_from_the_RedLED(LEDR[0]),

// the_VowelID.in_port_to_the_VowelID(SW[17:14]),

// the_VowelLEDs.out_port_from_the_VowelLEDs(LEDR[17:14]),

Page 17: Speech Recognition

// the_lcd.LCD_E_from_the_lcd_0(LCD_EN),.LCD_RS_from_the_lcd_0(LCD_RS),.LCD_RW_from_the_lcd_0(LCD_RW),.LCD_data_to_and_from_the_lcd_0(LCD_DATA),

// the_sdram_0.zs_addr_from_the_sdram_0(DRAM_ADDR),.zs_ba_from_the_sdram_0({DRAM_BA_1, DRAM_BA_0}),.zs_cas_n_from_the_sdram_0(DRAM_CAS_N),.zs_cke_from_the_sdram_0(DRAM_CKE),.zs_cs_n_from_the_sdram_0(DRAM_CS_N),.zs_dq_to_and_from_the_sdram_0(DRAM_DQ),.zs_dqm_from_the_sdram_0({DRAM_UDQM, DRAM_LDQM}),.zs_ras_n_from_the_sdram_0(DRAM_RAS_N),.zs_we_n_from_the_sdram_0(DRAM_WE_N)

);

// FFT controller stuffparameter LEN = 1024;parameter LBITS = 10;parameter EBITS = 6;parameter BITS = 16;

wire lc;wire [LBITS-1:0] sampleAddr;wire [BITS-1:0] sample;

FFTController fftc (.iReset(~KEY[0]),.iStart(lc),.iStateClk(NIOS_CLK),.oSampAddr(sampleAddr),.iSamp(sample),.iReadAddr(fftaddr),.iReadClock(NIOS_CLK),.oPower(fftpower),.oExp(fftexp),.oDone(fftdone)

);

AudioRAM audRAM (.iReset(~KEY[0]),.iStartLoad(fftstart),.iWriteClock(CLK),.iSample(audio_inL),.iReadClock(NIOS_CLK),.iReadAddr(sampleAddr),.iWindow(KEY[2]),.oValue(sample),.oLoadComplete(lc)

);

assign LEDG[8] = fftstart;

endmodule

Page 18: Speech Recognition

module FFTController ( input iReset, input iStart, input iStateClk, output [LBITS-1:0] oSampAddr, input signed [BITS-1:0] iSamp, input [LBITS-2:0] iReadAddr, input iReadClock, output signed [BITS-1:0] oPower, output reg signed [EBITS-1:0] oExp, output reg oDone, output reg [2:0] instate);

parameter BITS = 16;parameter EBITS = 6;parameter LEN = 1024;parameter LBITS = 10;

reg sink_valid;wire sink_ready;reg sink_sop;reg sink_eop;reg [BITS-1:0] sink_real;wire [BITS-1:0] sink_imag;wire [BITS-1:0] source_real;wire [BITS-1:0] source_imag;wire [EBITS-1:0] source_exp;wire source_ready;wire source_valid;wire source_sop;wire source_eop;wire [1:0] source_error;wire [1:0] sink_error;

// always ready to receive dataassign source_ready = 1'b1;// no input sinkassign sink_error = 2'b00;// no imaginary inputassign sink_imag = 16'b0;

//reg [2:0] instate;reg [LBITS-1:0] incount, outcount;reg inshot, reshot;

assign oSampAddr = incount;

parameter INWAIT = 3'd0;parameter INSOP = 3'd1;parameter INMID = 3'd2;parameter INEOP = 3'd3;

// look for start signal

Page 19: Speech Recognition

always @ (posedge iStart or posedge reshot)begin if (iStart) inshot <= 1'b1; else inshot <= 1'b0;end

// Input TO FFT state machinealways @ (posedge iStateClk)begin if (iReset) begin sink_real <= 16'b0; sink_valid <= 1'b0; incount <= 0; instate <= INSOP; end else begin case (instate) INSOP: begin reshot <= 1'b0; // this is the start of a packet sink_sop <= 1'b1; // indicate to FFT that valid data is ready sink_valid <= 1'b1; // load up the first (real, imag) pair sink_real <= iSamp; // initialize index counter incount <= 1; instate <= INMID; end INMID: begin // de-assert sop flag sink_sop <= 1'b0; // load up next (real, imag) pair sink_real <= iSamp; // if this is the second to last pair in the input vector, move to end of packet incount <= incount + 1; if (incount == LEN-2) instate <= INEOP; else instate <= INMID; end INEOP: begin // this is the end of a packet sink_eop <= 1'b1; // load up last (real, imag) pair sink_real <= iSamp; instate <= INWAIT; end

Page 20: Speech Recognition

INWAIT: begin sink_real <= 16'b0; sink_eop <= 1'b0; sink_valid <= 1'b0; if (inshot == 1'b1) begin reshot <= 1'b1; incount <= 0; instate <= INSOP; end else instate <= INWAIT; end endcase endend

// Output FROM FFT state machinewire signed [BITS-1:0] power, realAbs, imagAbs;

assign realAbs = (source_real[BITS-1] == 1'b1) ? ~source_real : source_real;assign imagAbs = (source_imag[BITS-1] == 1'b1) ? ~source_imag : source_imag;assign power = (realAbs > imagAbs) ? (realAbs + (imagAbs >> 1)) : (imagAbs + (realAbs >> 1));

reg wren;

always @ (posedge iStateClk)begin if (sink_sop == 1'b1 || iReset == 1'b1) oDone <= 1'b0; else if (source_eop == 1'b1) oDone <= 1'b1; if (source_valid == 1'b1) begin if (outcount < 512) wren <= 1'b1; else wren <= 1'b0; if (source_eop == 1'b1) outcount <= 0; else outcount <= outcount + 1; oExp <= source_exp; end else wren <= 1'b0;end

ram512x16 fftpow ( .data(power), .rdaddress(iReadAddr), .rdclock(iReadClock), .wraddress(outcount),

Page 21: Speech Recognition

.wrclock(iStateClk), .wren(wren), .q(oPower));

FFT2 afft ( .clk(iStateClk), .reset_n(~iReset), .inverse(1'b0), .sink_valid(sink_valid), .sink_sop(sink_sop), .sink_eop(sink_eop), .sink_real(sink_real), .sink_imag(sink_imag), .sink_error(sink_error), .source_ready(source_ready), .sink_ready(sink_ready), .source_error(source_error), .source_sop(source_sop), .source_eop(source_eop), .source_valid(source_valid), .source_exp(source_exp), .source_real(source_real), .source_imag(source_imag));

endmodule

// Infer ROM storage for a hamming windowmodule hammingrom ( input [9:0] iAddress, output reg [15:0] oHamming);

always @ (iAddress)begin case (iAddress) 10'h00: oHamming = 16'h28f; 10'h01: oHamming = 16'h28f; 10'h02: oHamming = 16'h28f; 10'h03: oHamming = 16'h28f; 10'h04: oHamming = 16'h290; 10'h05: oHamming = 16'h291; 10'h06: oHamming = 16'h291; 10'h07: oHamming = 16'h292; 10'h08: oHamming = 16'h293; 10'h09: oHamming = 16'h295; 10'h0a: oHamming = 16'h296; 10'h0b: oHamming = 16'h297; 10'h0c: oHamming = 16'h299; 10'h0d: oHamming = 16'h29b; 10'h0e: oHamming = 16'h29d; 10'h0f: oHamming = 16'h29f; 10'h10: oHamming = 16'h2a1; 10'h11: oHamming = 16'h2a3;

Page 22: Speech Recognition

10'h12: oHamming = 16'h2a6; 10'h13: oHamming = 16'h2a8; 10'h14: oHamming = 16'h2ab; 10'h15: oHamming = 16'h2ae; 10'h16: oHamming = 16'h2b1; 10'h17: oHamming = 16'h2b4; 10'h18: oHamming = 16'h2b8; 10'h19: oHamming = 16'h2bb; 10'h1a: oHamming = 16'h2bf; 10'h1b: oHamming = 16'h2c3; 10'h1c: oHamming = 16'h2c6; 10'h1d: oHamming = 16'h2ca; 10'h1e: oHamming = 16'h2cf; 10'h1f: oHamming = 16'h2d3; 10'h20: oHamming = 16'h2d7; 10'h21: oHamming = 16'h2dc; 10'h22: oHamming = 16'h2e1; 10'h23: oHamming = 16'h2e6; 10'h24: oHamming = 16'h2eb; 10'h25: oHamming = 16'h2f0; 10'h26: oHamming = 16'h2f5; 10'h27: oHamming = 16'h2fa; 10'h28: oHamming = 16'h300; 10'h29: oHamming = 16'h306; 10'h2a: oHamming = 16'h30c; 10'h2b: oHamming = 16'h312; 10'h2c: oHamming = 16'h318; 10'h2d: oHamming = 16'h31e; 10'h2e: oHamming = 16'h324; 10'h2f: oHamming = 16'h32b; 10'h30: oHamming = 16'h331; 10'h31: oHamming = 16'h338; 10'h32: oHamming = 16'h33f; 10'h33: oHamming = 16'h346; 10'h34: oHamming = 16'h34d; 10'h35: oHamming = 16'h355; 10'h36: oHamming = 16'h35c; 10'h37: oHamming = 16'h364; 10'h38: oHamming = 16'h36c; 10'h39: oHamming = 16'h373; 10'h3a: oHamming = 16'h37b; 10'h3b: oHamming = 16'h384; 10'h3c: oHamming = 16'h38c; 10'h3d: oHamming = 16'h394; 10'h3e: oHamming = 16'h39d; 10'h3f: oHamming = 16'h3a5; 10'h40: oHamming = 16'h3ae; 10'h41: oHamming = 16'h3b7; 10'h42: oHamming = 16'h3c0; 10'h43: oHamming = 16'h3c9; 10'h44: oHamming = 16'h3d3; 10'h45: oHamming = 16'h3dc; 10'h46: oHamming = 16'h3e6; 10'h47: oHamming = 16'h3f0; 10'h48: oHamming = 16'h3f9; 10'h49: oHamming = 16'h403; 10'h4a: oHamming = 16'h40d;

Page 23: Speech Recognition

10'h4b: oHamming = 16'h418; 10'h4c: oHamming = 16'h422; 10'h4d: oHamming = 16'h42c; 10'h4e: oHamming = 16'h437; 10'h4f: oHamming = 16'h442; 10'h50: oHamming = 16'h44d; 10'h51: oHamming = 16'h458; 10'h52: oHamming = 16'h463; 10'h53: oHamming = 16'h46e; 10'h54: oHamming = 16'h479; 10'h55: oHamming = 16'h485; 10'h56: oHamming = 16'h490; 10'h57: oHamming = 16'h49c; 10'h58: oHamming = 16'h4a8; 10'h59: oHamming = 16'h4b4; 10'h5a: oHamming = 16'h4c0; 10'h5b: oHamming = 16'h4cc; 10'h5c: oHamming = 16'h4d9; 10'h5d: oHamming = 16'h4e5; 10'h5e: oHamming = 16'h4f2; 10'h5f: oHamming = 16'h4fe; 10'h60: oHamming = 16'h50b; 10'h61: oHamming = 16'h518; 10'h62: oHamming = 16'h525; 10'h63: oHamming = 16'h532; 10'h64: oHamming = 16'h540; 10'h65: oHamming = 16'h54d; 10'h66: oHamming = 16'h55a; 10'h67: oHamming = 16'h568; 10'h68: oHamming = 16'h576; 10'h69: oHamming = 16'h584; 10'h6a: oHamming = 16'h592; 10'h6b: oHamming = 16'h5a0; 10'h6c: oHamming = 16'h5ae; 10'h6d: oHamming = 16'h5bc; 10'h6e: oHamming = 16'h5cb; 10'h6f: oHamming = 16'h5d9; 10'h70: oHamming = 16'h5e8; 10'h71: oHamming = 16'h5f7; 10'h72: oHamming = 16'h605; 10'h73: oHamming = 16'h614; 10'h74: oHamming = 16'h623; 10'h75: oHamming = 16'h633; 10'h76: oHamming = 16'h642; 10'h77: oHamming = 16'h651; 10'h78: oHamming = 16'h661; 10'h79: oHamming = 16'h670; 10'h7a: oHamming = 16'h680; 10'h7b: oHamming = 16'h690; 10'h7c: oHamming = 16'h6a0; 10'h7d: oHamming = 16'h6b0; 10'h7e: oHamming = 16'h6c0; 10'h7f: oHamming = 16'h6d0; 10'h80: oHamming = 16'h6e1; 10'h81: oHamming = 16'h6f1; 10'h82: oHamming = 16'h702; 10'h83: oHamming = 16'h712;

Page 24: Speech Recognition

10'h84: oHamming = 16'h723; 10'h85: oHamming = 16'h734; 10'h86: oHamming = 16'h745; 10'h87: oHamming = 16'h756; 10'h88: oHamming = 16'h767; 10'h89: oHamming = 16'h778; 10'h8a: oHamming = 16'h789; 10'h8b: oHamming = 16'h79b; 10'h8c: oHamming = 16'h7ac; 10'h8d: oHamming = 16'h7be; 10'h8e: oHamming = 16'h7cf; 10'h8f: oHamming = 16'h7e1; 10'h90: oHamming = 16'h7f3; 10'h91: oHamming = 16'h805; 10'h92: oHamming = 16'h817; 10'h93: oHamming = 16'h829; 10'h94: oHamming = 16'h83b; 10'h95: oHamming = 16'h84e; 10'h96: oHamming = 16'h860; 10'h97: oHamming = 16'h873; 10'h98: oHamming = 16'h885; 10'h99: oHamming = 16'h898; 10'h9a: oHamming = 16'h8ab; 10'h9b: oHamming = 16'h8bd; 10'h9c: oHamming = 16'h8d0; 10'h9d: oHamming = 16'h8e3; 10'h9e: oHamming = 16'h8f6; 10'h9f: oHamming = 16'h909; 10'ha0: oHamming = 16'h91d; 10'ha1: oHamming = 16'h930; 10'ha2: oHamming = 16'h943; 10'ha3: oHamming = 16'h957; 10'ha4: oHamming = 16'h96a; 10'ha5: oHamming = 16'h97e; 10'ha6: oHamming = 16'h992; 10'ha7: oHamming = 16'h9a5; 10'ha8: oHamming = 16'h9b9; 10'ha9: oHamming = 16'h9cd; 10'haa: oHamming = 16'h9e1; 10'hab: oHamming = 16'h9f5; 10'hac: oHamming = 16'ha09; 10'had: oHamming = 16'ha1d; 10'hae: oHamming = 16'ha32; 10'haf: oHamming = 16'ha46; 10'hb0: oHamming = 16'ha5a; 10'hb1: oHamming = 16'ha6f; 10'hb2: oHamming = 16'ha83; 10'hb3: oHamming = 16'ha98; 10'hb4: oHamming = 16'haad; 10'hb5: oHamming = 16'hac1; 10'hb6: oHamming = 16'had6; 10'hb7: oHamming = 16'haeb; 10'hb8: oHamming = 16'hb00; 10'hb9: oHamming = 16'hb15; 10'hba: oHamming = 16'hb2a; 10'hbb: oHamming = 16'hb3f; 10'hbc: oHamming = 16'hb54;

Page 25: Speech Recognition

10'hbd: oHamming = 16'hb69; 10'hbe: oHamming = 16'hb7e; 10'hbf: oHamming = 16'hb94; 10'hc0: oHamming = 16'hba9; 10'hc1: oHamming = 16'hbbf; 10'hc2: oHamming = 16'hbd4; 10'hc3: oHamming = 16'hbea; 10'hc4: oHamming = 16'hbff; 10'hc5: oHamming = 16'hc15; 10'hc6: oHamming = 16'hc2a; 10'hc7: oHamming = 16'hc40; 10'hc8: oHamming = 16'hc56; 10'hc9: oHamming = 16'hc6c; 10'hca: oHamming = 16'hc82; 10'hcb: oHamming = 16'hc98; 10'hcc: oHamming = 16'hcae; 10'hcd: oHamming = 16'hcc4; 10'hce: oHamming = 16'hcda; 10'hcf: oHamming = 16'hcf0; 10'hd0: oHamming = 16'hd06; 10'hd1: oHamming = 16'hd1c; 10'hd2: oHamming = 16'hd32; 10'hd3: oHamming = 16'hd48; 10'hd4: oHamming = 16'hd5f; 10'hd5: oHamming = 16'hd75; 10'hd6: oHamming = 16'hd8b; 10'hd7: oHamming = 16'hda2; 10'hd8: oHamming = 16'hdb8; 10'hd9: oHamming = 16'hdcf; 10'hda: oHamming = 16'hde5; 10'hdb: oHamming = 16'hdfc; 10'hdc: oHamming = 16'he12; 10'hdd: oHamming = 16'he29; 10'hde: oHamming = 16'he40; 10'hdf: oHamming = 16'he56; 10'he0: oHamming = 16'he6d; 10'he1: oHamming = 16'he84; 10'he2: oHamming = 16'he9a; 10'he3: oHamming = 16'heb1; 10'he4: oHamming = 16'hec8; 10'he5: oHamming = 16'hedf; 10'he6: oHamming = 16'hef6; 10'he7: oHamming = 16'hf0d; 10'he8: oHamming = 16'hf23; 10'he9: oHamming = 16'hf3a; 10'hea: oHamming = 16'hf51; 10'heb: oHamming = 16'hf68; 10'hec: oHamming = 16'hf7f; 10'hed: oHamming = 16'hf96; 10'hee: oHamming = 16'hfad; 10'hef: oHamming = 16'hfc4; 10'hf0: oHamming = 16'hfdb; 10'hf1: oHamming = 16'hff2; 10'hf2: oHamming = 16'h1009; 10'hf3: oHamming = 16'h1020; 10'hf4: oHamming = 16'h1037; 10'hf5: oHamming = 16'h104f;

Page 26: Speech Recognition

10'hf6: oHamming = 16'h1066; 10'hf7: oHamming = 16'h107d; 10'hf8: oHamming = 16'h1094; 10'hf9: oHamming = 16'h10ab; 10'hfa: oHamming = 16'h10c2; 10'hfb: oHamming = 16'h10d9; 10'hfc: oHamming = 16'h10f0; 10'hfd: oHamming = 16'h1108; 10'hfe: oHamming = 16'h111f; 10'hff: oHamming = 16'h1136; 10'h100: oHamming = 16'h114d; 10'h101: oHamming = 16'h1164; 10'h102: oHamming = 16'h117b; 10'h103: oHamming = 16'h1192; 10'h104: oHamming = 16'h11aa; 10'h105: oHamming = 16'h11c1; 10'h106: oHamming = 16'h11d8; 10'h107: oHamming = 16'h11ef; 10'h108: oHamming = 16'h1206; 10'h109: oHamming = 16'h121d; 10'h10a: oHamming = 16'h1234; 10'h10b: oHamming = 16'h124b; 10'h10c: oHamming = 16'h1262; 10'h10d: oHamming = 16'h127a; 10'h10e: oHamming = 16'h1291; 10'h10f: oHamming = 16'h12a8; 10'h110: oHamming = 16'h12bf; 10'h111: oHamming = 16'h12d6; 10'h112: oHamming = 16'h12ed; 10'h113: oHamming = 16'h1304; 10'h114: oHamming = 16'h131b; 10'h115: oHamming = 16'h1332; 10'h116: oHamming = 16'h1349; 10'h117: oHamming = 16'h135f; 10'h118: oHamming = 16'h1376; 10'h119: oHamming = 16'h138d; 10'h11a: oHamming = 16'h13a4; 10'h11b: oHamming = 16'h13bb; 10'h11c: oHamming = 16'h13d2; 10'h11d: oHamming = 16'h13e9; 10'h11e: oHamming = 16'h13ff; 10'h11f: oHamming = 16'h1416; 10'h120: oHamming = 16'h142d; 10'h121: oHamming = 16'h1443; 10'h122: oHamming = 16'h145a; 10'h123: oHamming = 16'h1471; 10'h124: oHamming = 16'h1487; 10'h125: oHamming = 16'h149e; 10'h126: oHamming = 16'h14b4; 10'h127: oHamming = 16'h14cb; 10'h128: oHamming = 16'h14e1; 10'h129: oHamming = 16'h14f8; 10'h12a: oHamming = 16'h150e; 10'h12b: oHamming = 16'h1524; 10'h12c: oHamming = 16'h153b; 10'h12d: oHamming = 16'h1551; 10'h12e: oHamming = 16'h1567;

Page 27: Speech Recognition

10'h12f: oHamming = 16'h157d; 10'h130: oHamming = 16'h1594; 10'h131: oHamming = 16'h15aa; 10'h132: oHamming = 16'h15c0; 10'h133: oHamming = 16'h15d6; 10'h134: oHamming = 16'h15ec; 10'h135: oHamming = 16'h1602; 10'h136: oHamming = 16'h1618; 10'h137: oHamming = 16'h162e; 10'h138: oHamming = 16'h1643; 10'h139: oHamming = 16'h1659; 10'h13a: oHamming = 16'h166f; 10'h13b: oHamming = 16'h1684; 10'h13c: oHamming = 16'h169a; 10'h13d: oHamming = 16'h16b0; 10'h13e: oHamming = 16'h16c5; 10'h13f: oHamming = 16'h16db; 10'h140: oHamming = 16'h16f0; 10'h141: oHamming = 16'h1705; 10'h142: oHamming = 16'h171b; 10'h143: oHamming = 16'h1730; 10'h144: oHamming = 16'h1745; 10'h145: oHamming = 16'h175a; 10'h146: oHamming = 16'h176f; 10'h147: oHamming = 16'h1784; 10'h148: oHamming = 16'h1799; 10'h149: oHamming = 16'h17ae; 10'h14a: oHamming = 16'h17c3; 10'h14b: oHamming = 16'h17d7; 10'h14c: oHamming = 16'h17ec; 10'h14d: oHamming = 16'h1801; 10'h14e: oHamming = 16'h1815; 10'h14f: oHamming = 16'h182a; 10'h150: oHamming = 16'h183e; 10'h151: oHamming = 16'h1853; 10'h152: oHamming = 16'h1867; 10'h153: oHamming = 16'h187b; 10'h154: oHamming = 16'h188f; 10'h155: oHamming = 16'h18a3; 10'h156: oHamming = 16'h18b7; 10'h157: oHamming = 16'h18cb; 10'h158: oHamming = 16'h18df; 10'h159: oHamming = 16'h18f3; 10'h15a: oHamming = 16'h1907; 10'h15b: oHamming = 16'h191a; 10'h15c: oHamming = 16'h192e; 10'h15d: oHamming = 16'h1941; 10'h15e: oHamming = 16'h1955; 10'h15f: oHamming = 16'h1968; 10'h160: oHamming = 16'h197b; 10'h161: oHamming = 16'h198f; 10'h162: oHamming = 16'h19a2; 10'h163: oHamming = 16'h19b5; 10'h164: oHamming = 16'h19c8; 10'h165: oHamming = 16'h19da; 10'h166: oHamming = 16'h19ed; 10'h167: oHamming = 16'h1a00;

Page 28: Speech Recognition

10'h168: oHamming = 16'h1a12; 10'h169: oHamming = 16'h1a25; 10'h16a: oHamming = 16'h1a37; 10'h16b: oHamming = 16'h1a4a; 10'h16c: oHamming = 16'h1a5c; 10'h16d: oHamming = 16'h1a6e; 10'h16e: oHamming = 16'h1a80; 10'h16f: oHamming = 16'h1a92; 10'h170: oHamming = 16'h1aa4; 10'h171: oHamming = 16'h1ab6; 10'h172: oHamming = 16'h1ac8; 10'h173: oHamming = 16'h1ad9; 10'h174: oHamming = 16'h1aeb; 10'h175: oHamming = 16'h1afc; 10'h176: oHamming = 16'h1b0e; 10'h177: oHamming = 16'h1b1f; 10'h178: oHamming = 16'h1b30; 10'h179: oHamming = 16'h1b41; 10'h17a: oHamming = 16'h1b52; 10'h17b: oHamming = 16'h1b63; 10'h17c: oHamming = 16'h1b74; 10'h17d: oHamming = 16'h1b84; 10'h17e: oHamming = 16'h1b95; 10'h17f: oHamming = 16'h1ba6; 10'h180: oHamming = 16'h1bb6; 10'h181: oHamming = 16'h1bc6; 10'h182: oHamming = 16'h1bd6; 10'h183: oHamming = 16'h1be6; 10'h184: oHamming = 16'h1bf6; 10'h185: oHamming = 16'h1c06; 10'h186: oHamming = 16'h1c16; 10'h187: oHamming = 16'h1c26; 10'h188: oHamming = 16'h1c35; 10'h189: oHamming = 16'h1c45; 10'h18a: oHamming = 16'h1c54; 10'h18b: oHamming = 16'h1c63; 10'h18c: oHamming = 16'h1c72; 10'h18d: oHamming = 16'h1c81; 10'h18e: oHamming = 16'h1c90; 10'h18f: oHamming = 16'h1c9f; 10'h190: oHamming = 16'h1cae; 10'h191: oHamming = 16'h1cbc; 10'h192: oHamming = 16'h1ccb; 10'h193: oHamming = 16'h1cd9; 10'h194: oHamming = 16'h1ce8; 10'h195: oHamming = 16'h1cf6; 10'h196: oHamming = 16'h1d04; 10'h197: oHamming = 16'h1d12; 10'h198: oHamming = 16'h1d1f; 10'h199: oHamming = 16'h1d2d; 10'h19a: oHamming = 16'h1d3b; 10'h19b: oHamming = 16'h1d48; 10'h19c: oHamming = 16'h1d55; 10'h19d: oHamming = 16'h1d63; 10'h19e: oHamming = 16'h1d70; 10'h19f: oHamming = 16'h1d7d; 10'h1a0: oHamming = 16'h1d8a;

Page 29: Speech Recognition

10'h1a1: oHamming = 16'h1d96; 10'h1a2: oHamming = 16'h1da3; 10'h1a3: oHamming = 16'h1db0; 10'h1a4: oHamming = 16'h1dbc; 10'h1a5: oHamming = 16'h1dc8; 10'h1a6: oHamming = 16'h1dd4; 10'h1a7: oHamming = 16'h1de0; 10'h1a8: oHamming = 16'h1dec; 10'h1a9: oHamming = 16'h1df8; 10'h1aa: oHamming = 16'h1e04; 10'h1ab: oHamming = 16'h1e0f; 10'h1ac: oHamming = 16'h1e1b; 10'h1ad: oHamming = 16'h1e26; 10'h1ae: oHamming = 16'h1e31; 10'h1af: oHamming = 16'h1e3c; 10'h1b0: oHamming = 16'h1e47; 10'h1b1: oHamming = 16'h1e52; 10'h1b2: oHamming = 16'h1e5d; 10'h1b3: oHamming = 16'h1e67; 10'h1b4: oHamming = 16'h1e72; 10'h1b5: oHamming = 16'h1e7c; 10'h1b6: oHamming = 16'h1e86; 10'h1b7: oHamming = 16'h1e90; 10'h1b8: oHamming = 16'h1e9a; 10'h1b9: oHamming = 16'h1ea4; 10'h1ba: oHamming = 16'h1ead; 10'h1bb: oHamming = 16'h1eb7; 10'h1bc: oHamming = 16'h1ec0; 10'h1bd: oHamming = 16'h1eca; 10'h1be: oHamming = 16'h1ed3; 10'h1bf: oHamming = 16'h1edc; 10'h1c0: oHamming = 16'h1ee5; 10'h1c1: oHamming = 16'h1eed; 10'h1c2: oHamming = 16'h1ef6; 10'h1c3: oHamming = 16'h1efe; 10'h1c4: oHamming = 16'h1f07; 10'h1c5: oHamming = 16'h1f0f; 10'h1c6: oHamming = 16'h1f17; 10'h1c7: oHamming = 16'h1f1f; 10'h1c8: oHamming = 16'h1f27; 10'h1c9: oHamming = 16'h1f2e; 10'h1ca: oHamming = 16'h1f36; 10'h1cb: oHamming = 16'h1f3d; 10'h1cc: oHamming = 16'h1f45; 10'h1cd: oHamming = 16'h1f4c; 10'h1ce: oHamming = 16'h1f53; 10'h1cf: oHamming = 16'h1f5a; 10'h1d0: oHamming = 16'h1f60; 10'h1d1: oHamming = 16'h1f67; 10'h1d2: oHamming = 16'h1f6d; 10'h1d3: oHamming = 16'h1f74; 10'h1d4: oHamming = 16'h1f7a; 10'h1d5: oHamming = 16'h1f80; 10'h1d6: oHamming = 16'h1f86; 10'h1d7: oHamming = 16'h1f8c; 10'h1d8: oHamming = 16'h1f91; 10'h1d9: oHamming = 16'h1f97;

Page 30: Speech Recognition

10'h1da: oHamming = 16'h1f9c; 10'h1db: oHamming = 16'h1fa1; 10'h1dc: oHamming = 16'h1fa6; 10'h1dd: oHamming = 16'h1fab; 10'h1de: oHamming = 16'h1fb0; 10'h1df: oHamming = 16'h1fb5; 10'h1e0: oHamming = 16'h1fb9; 10'h1e1: oHamming = 16'h1fbe; 10'h1e2: oHamming = 16'h1fc2; 10'h1e3: oHamming = 16'h1fc6; 10'h1e4: oHamming = 16'h1fca; 10'h1e5: oHamming = 16'h1fce; 10'h1e6: oHamming = 16'h1fd1; 10'h1e7: oHamming = 16'h1fd5; 10'h1e8: oHamming = 16'h1fd8; 10'h1e9: oHamming = 16'h1fdc; 10'h1ea: oHamming = 16'h1fdf; 10'h1eb: oHamming = 16'h1fe2; 10'h1ec: oHamming = 16'h1fe5; 10'h1ed: oHamming = 16'h1fe7; 10'h1ee: oHamming = 16'h1fea; 10'h1ef: oHamming = 16'h1fec; 10'h1f0: oHamming = 16'h1fee; 10'h1f1: oHamming = 16'h1ff1; 10'h1f2: oHamming = 16'h1ff3; 10'h1f3: oHamming = 16'h1ff4; 10'h1f4: oHamming = 16'h1ff6; 10'h1f5: oHamming = 16'h1ff8; 10'h1f6: oHamming = 16'h1ff9; 10'h1f7: oHamming = 16'h1ffa; 10'h1f8: oHamming = 16'h1ffc; 10'h1f9: oHamming = 16'h1ffc; 10'h1fa: oHamming = 16'h1ffd; 10'h1fb: oHamming = 16'h1ffe; 10'h1fc: oHamming = 16'h1fff; 10'h1fd: oHamming = 16'h1fff; 10'h1fe: oHamming = 16'h1fff; 10'h1ff: oHamming = 16'h1fff; 10'h200: oHamming = 16'h1fff; 10'h201: oHamming = 16'h1fff; 10'h202: oHamming = 16'h1fff; 10'h203: oHamming = 16'h1fff; 10'h204: oHamming = 16'h1ffe; 10'h205: oHamming = 16'h1ffd; 10'h206: oHamming = 16'h1ffc; 10'h207: oHamming = 16'h1ffc; 10'h208: oHamming = 16'h1ffa; 10'h209: oHamming = 16'h1ff9; 10'h20a: oHamming = 16'h1ff8; 10'h20b: oHamming = 16'h1ff6; 10'h20c: oHamming = 16'h1ff4; 10'h20d: oHamming = 16'h1ff3; 10'h20e: oHamming = 16'h1ff1; 10'h20f: oHamming = 16'h1fee; 10'h210: oHamming = 16'h1fec; 10'h211: oHamming = 16'h1fea; 10'h212: oHamming = 16'h1fe7;

Page 31: Speech Recognition

10'h213: oHamming = 16'h1fe5; 10'h214: oHamming = 16'h1fe2; 10'h215: oHamming = 16'h1fdf; 10'h216: oHamming = 16'h1fdc; 10'h217: oHamming = 16'h1fd8; 10'h218: oHamming = 16'h1fd5; 10'h219: oHamming = 16'h1fd1; 10'h21a: oHamming = 16'h1fce; 10'h21b: oHamming = 16'h1fca; 10'h21c: oHamming = 16'h1fc6; 10'h21d: oHamming = 16'h1fc2; 10'h21e: oHamming = 16'h1fbe; 10'h21f: oHamming = 16'h1fb9; 10'h220: oHamming = 16'h1fb5; 10'h221: oHamming = 16'h1fb0; 10'h222: oHamming = 16'h1fab; 10'h223: oHamming = 16'h1fa6; 10'h224: oHamming = 16'h1fa1; 10'h225: oHamming = 16'h1f9c; 10'h226: oHamming = 16'h1f97; 10'h227: oHamming = 16'h1f91; 10'h228: oHamming = 16'h1f8c; 10'h229: oHamming = 16'h1f86; 10'h22a: oHamming = 16'h1f80; 10'h22b: oHamming = 16'h1f7a; 10'h22c: oHamming = 16'h1f74; 10'h22d: oHamming = 16'h1f6d; 10'h22e: oHamming = 16'h1f67; 10'h22f: oHamming = 16'h1f60; 10'h230: oHamming = 16'h1f5a; 10'h231: oHamming = 16'h1f53; 10'h232: oHamming = 16'h1f4c; 10'h233: oHamming = 16'h1f45; 10'h234: oHamming = 16'h1f3d; 10'h235: oHamming = 16'h1f36; 10'h236: oHamming = 16'h1f2e; 10'h237: oHamming = 16'h1f27; 10'h238: oHamming = 16'h1f1f; 10'h239: oHamming = 16'h1f17; 10'h23a: oHamming = 16'h1f0f; 10'h23b: oHamming = 16'h1f07; 10'h23c: oHamming = 16'h1efe; 10'h23d: oHamming = 16'h1ef6; 10'h23e: oHamming = 16'h1eed; 10'h23f: oHamming = 16'h1ee5; 10'h240: oHamming = 16'h1edc; 10'h241: oHamming = 16'h1ed3; 10'h242: oHamming = 16'h1eca; 10'h243: oHamming = 16'h1ec0; 10'h244: oHamming = 16'h1eb7; 10'h245: oHamming = 16'h1ead; 10'h246: oHamming = 16'h1ea4; 10'h247: oHamming = 16'h1e9a; 10'h248: oHamming = 16'h1e90; 10'h249: oHamming = 16'h1e86; 10'h24a: oHamming = 16'h1e7c; 10'h24b: oHamming = 16'h1e72;

Page 32: Speech Recognition

10'h24c: oHamming = 16'h1e67; 10'h24d: oHamming = 16'h1e5d; 10'h24e: oHamming = 16'h1e52; 10'h24f: oHamming = 16'h1e47; 10'h250: oHamming = 16'h1e3c; 10'h251: oHamming = 16'h1e31; 10'h252: oHamming = 16'h1e26; 10'h253: oHamming = 16'h1e1b; 10'h254: oHamming = 16'h1e0f; 10'h255: oHamming = 16'h1e04; 10'h256: oHamming = 16'h1df8; 10'h257: oHamming = 16'h1dec; 10'h258: oHamming = 16'h1de0; 10'h259: oHamming = 16'h1dd4; 10'h25a: oHamming = 16'h1dc8; 10'h25b: oHamming = 16'h1dbc; 10'h25c: oHamming = 16'h1db0; 10'h25d: oHamming = 16'h1da3; 10'h25e: oHamming = 16'h1d96; 10'h25f: oHamming = 16'h1d8a; 10'h260: oHamming = 16'h1d7d; 10'h261: oHamming = 16'h1d70; 10'h262: oHamming = 16'h1d63; 10'h263: oHamming = 16'h1d55; 10'h264: oHamming = 16'h1d48; 10'h265: oHamming = 16'h1d3b; 10'h266: oHamming = 16'h1d2d; 10'h267: oHamming = 16'h1d1f; 10'h268: oHamming = 16'h1d12; 10'h269: oHamming = 16'h1d04; 10'h26a: oHamming = 16'h1cf6; 10'h26b: oHamming = 16'h1ce8; 10'h26c: oHamming = 16'h1cd9; 10'h26d: oHamming = 16'h1ccb; 10'h26e: oHamming = 16'h1cbc; 10'h26f: oHamming = 16'h1cae; 10'h270: oHamming = 16'h1c9f; 10'h271: oHamming = 16'h1c90; 10'h272: oHamming = 16'h1c81; 10'h273: oHamming = 16'h1c72; 10'h274: oHamming = 16'h1c63; 10'h275: oHamming = 16'h1c54; 10'h276: oHamming = 16'h1c45; 10'h277: oHamming = 16'h1c35; 10'h278: oHamming = 16'h1c26; 10'h279: oHamming = 16'h1c16; 10'h27a: oHamming = 16'h1c06; 10'h27b: oHamming = 16'h1bf6; 10'h27c: oHamming = 16'h1be6; 10'h27d: oHamming = 16'h1bd6; 10'h27e: oHamming = 16'h1bc6; 10'h27f: oHamming = 16'h1bb6; 10'h280: oHamming = 16'h1ba6; 10'h281: oHamming = 16'h1b95; 10'h282: oHamming = 16'h1b84; 10'h283: oHamming = 16'h1b74; 10'h284: oHamming = 16'h1b63;

Page 33: Speech Recognition

10'h285: oHamming = 16'h1b52; 10'h286: oHamming = 16'h1b41; 10'h287: oHamming = 16'h1b30; 10'h288: oHamming = 16'h1b1f; 10'h289: oHamming = 16'h1b0e; 10'h28a: oHamming = 16'h1afc; 10'h28b: oHamming = 16'h1aeb; 10'h28c: oHamming = 16'h1ad9; 10'h28d: oHamming = 16'h1ac8; 10'h28e: oHamming = 16'h1ab6; 10'h28f: oHamming = 16'h1aa4; 10'h290: oHamming = 16'h1a92; 10'h291: oHamming = 16'h1a80; 10'h292: oHamming = 16'h1a6e; 10'h293: oHamming = 16'h1a5c; 10'h294: oHamming = 16'h1a4a; 10'h295: oHamming = 16'h1a37; 10'h296: oHamming = 16'h1a25; 10'h297: oHamming = 16'h1a12; 10'h298: oHamming = 16'h1a00; 10'h299: oHamming = 16'h19ed; 10'h29a: oHamming = 16'h19da; 10'h29b: oHamming = 16'h19c8; 10'h29c: oHamming = 16'h19b5; 10'h29d: oHamming = 16'h19a2; 10'h29e: oHamming = 16'h198f; 10'h29f: oHamming = 16'h197b; 10'h2a0: oHamming = 16'h1968; 10'h2a1: oHamming = 16'h1955; 10'h2a2: oHamming = 16'h1941; 10'h2a3: oHamming = 16'h192e; 10'h2a4: oHamming = 16'h191a; 10'h2a5: oHamming = 16'h1907; 10'h2a6: oHamming = 16'h18f3; 10'h2a7: oHamming = 16'h18df; 10'h2a8: oHamming = 16'h18cb; 10'h2a9: oHamming = 16'h18b7; 10'h2aa: oHamming = 16'h18a3; 10'h2ab: oHamming = 16'h188f; 10'h2ac: oHamming = 16'h187b; 10'h2ad: oHamming = 16'h1867; 10'h2ae: oHamming = 16'h1853; 10'h2af: oHamming = 16'h183e; 10'h2b0: oHamming = 16'h182a; 10'h2b1: oHamming = 16'h1815; 10'h2b2: oHamming = 16'h1801; 10'h2b3: oHamming = 16'h17ec; 10'h2b4: oHamming = 16'h17d7; 10'h2b5: oHamming = 16'h17c3; 10'h2b6: oHamming = 16'h17ae; 10'h2b7: oHamming = 16'h1799; 10'h2b8: oHamming = 16'h1784; 10'h2b9: oHamming = 16'h176f; 10'h2ba: oHamming = 16'h175a; 10'h2bb: oHamming = 16'h1745; 10'h2bc: oHamming = 16'h1730; 10'h2bd: oHamming = 16'h171b;

Page 34: Speech Recognition

10'h2be: oHamming = 16'h1705; 10'h2bf: oHamming = 16'h16f0; 10'h2c0: oHamming = 16'h16db; 10'h2c1: oHamming = 16'h16c5; 10'h2c2: oHamming = 16'h16b0; 10'h2c3: oHamming = 16'h169a; 10'h2c4: oHamming = 16'h1684; 10'h2c5: oHamming = 16'h166f; 10'h2c6: oHamming = 16'h1659; 10'h2c7: oHamming = 16'h1643; 10'h2c8: oHamming = 16'h162e; 10'h2c9: oHamming = 16'h1618; 10'h2ca: oHamming = 16'h1602; 10'h2cb: oHamming = 16'h15ec; 10'h2cc: oHamming = 16'h15d6; 10'h2cd: oHamming = 16'h15c0; 10'h2ce: oHamming = 16'h15aa; 10'h2cf: oHamming = 16'h1594; 10'h2d0: oHamming = 16'h157d; 10'h2d1: oHamming = 16'h1567; 10'h2d2: oHamming = 16'h1551; 10'h2d3: oHamming = 16'h153b; 10'h2d4: oHamming = 16'h1524; 10'h2d5: oHamming = 16'h150e; 10'h2d6: oHamming = 16'h14f8; 10'h2d7: oHamming = 16'h14e1; 10'h2d8: oHamming = 16'h14cb; 10'h2d9: oHamming = 16'h14b4; 10'h2da: oHamming = 16'h149e; 10'h2db: oHamming = 16'h1487; 10'h2dc: oHamming = 16'h1471; 10'h2dd: oHamming = 16'h145a; 10'h2de: oHamming = 16'h1443; 10'h2df: oHamming = 16'h142d; 10'h2e0: oHamming = 16'h1416; 10'h2e1: oHamming = 16'h13ff; 10'h2e2: oHamming = 16'h13e9; 10'h2e3: oHamming = 16'h13d2; 10'h2e4: oHamming = 16'h13bb; 10'h2e5: oHamming = 16'h13a4; 10'h2e6: oHamming = 16'h138d; 10'h2e7: oHamming = 16'h1376; 10'h2e8: oHamming = 16'h135f; 10'h2e9: oHamming = 16'h1349; 10'h2ea: oHamming = 16'h1332; 10'h2eb: oHamming = 16'h131b; 10'h2ec: oHamming = 16'h1304; 10'h2ed: oHamming = 16'h12ed; 10'h2ee: oHamming = 16'h12d6; 10'h2ef: oHamming = 16'h12bf; 10'h2f0: oHamming = 16'h12a8; 10'h2f1: oHamming = 16'h1291; 10'h2f2: oHamming = 16'h127a; 10'h2f3: oHamming = 16'h1262; 10'h2f4: oHamming = 16'h124b; 10'h2f5: oHamming = 16'h1234; 10'h2f6: oHamming = 16'h121d;

Page 35: Speech Recognition

10'h2f7: oHamming = 16'h1206; 10'h2f8: oHamming = 16'h11ef; 10'h2f9: oHamming = 16'h11d8; 10'h2fa: oHamming = 16'h11c1; 10'h2fb: oHamming = 16'h11aa; 10'h2fc: oHamming = 16'h1192; 10'h2fd: oHamming = 16'h117b; 10'h2fe: oHamming = 16'h1164; 10'h2ff: oHamming = 16'h114d; 10'h300: oHamming = 16'h1136; 10'h301: oHamming = 16'h111f; 10'h302: oHamming = 16'h1108; 10'h303: oHamming = 16'h10f0; 10'h304: oHamming = 16'h10d9; 10'h305: oHamming = 16'h10c2; 10'h306: oHamming = 16'h10ab; 10'h307: oHamming = 16'h1094; 10'h308: oHamming = 16'h107d; 10'h309: oHamming = 16'h1066; 10'h30a: oHamming = 16'h104f; 10'h30b: oHamming = 16'h1037; 10'h30c: oHamming = 16'h1020; 10'h30d: oHamming = 16'h1009; 10'h30e: oHamming = 16'hff2; 10'h30f: oHamming = 16'hfdb; 10'h310: oHamming = 16'hfc4; 10'h311: oHamming = 16'hfad; 10'h312: oHamming = 16'hf96; 10'h313: oHamming = 16'hf7f; 10'h314: oHamming = 16'hf68; 10'h315: oHamming = 16'hf51; 10'h316: oHamming = 16'hf3a; 10'h317: oHamming = 16'hf23; 10'h318: oHamming = 16'hf0d; 10'h319: oHamming = 16'hef6; 10'h31a: oHamming = 16'hedf; 10'h31b: oHamming = 16'hec8; 10'h31c: oHamming = 16'heb1; 10'h31d: oHamming = 16'he9a; 10'h31e: oHamming = 16'he84; 10'h31f: oHamming = 16'he6d; 10'h320: oHamming = 16'he56; 10'h321: oHamming = 16'he40; 10'h322: oHamming = 16'he29; 10'h323: oHamming = 16'he12; 10'h324: oHamming = 16'hdfc; 10'h325: oHamming = 16'hde5; 10'h326: oHamming = 16'hdcf; 10'h327: oHamming = 16'hdb8; 10'h328: oHamming = 16'hda2; 10'h329: oHamming = 16'hd8b; 10'h32a: oHamming = 16'hd75; 10'h32b: oHamming = 16'hd5f; 10'h32c: oHamming = 16'hd48; 10'h32d: oHamming = 16'hd32; 10'h32e: oHamming = 16'hd1c; 10'h32f: oHamming = 16'hd06;

Page 36: Speech Recognition

10'h330: oHamming = 16'hcf0; 10'h331: oHamming = 16'hcda; 10'h332: oHamming = 16'hcc4; 10'h333: oHamming = 16'hcae; 10'h334: oHamming = 16'hc98; 10'h335: oHamming = 16'hc82; 10'h336: oHamming = 16'hc6c; 10'h337: oHamming = 16'hc56; 10'h338: oHamming = 16'hc40; 10'h339: oHamming = 16'hc2a; 10'h33a: oHamming = 16'hc15; 10'h33b: oHamming = 16'hbff; 10'h33c: oHamming = 16'hbea; 10'h33d: oHamming = 16'hbd4; 10'h33e: oHamming = 16'hbbf; 10'h33f: oHamming = 16'hba9; 10'h340: oHamming = 16'hb94; 10'h341: oHamming = 16'hb7e; 10'h342: oHamming = 16'hb69; 10'h343: oHamming = 16'hb54; 10'h344: oHamming = 16'hb3f; 10'h345: oHamming = 16'hb2a; 10'h346: oHamming = 16'hb15; 10'h347: oHamming = 16'hb00; 10'h348: oHamming = 16'haeb; 10'h349: oHamming = 16'had6; 10'h34a: oHamming = 16'hac1; 10'h34b: oHamming = 16'haad; 10'h34c: oHamming = 16'ha98; 10'h34d: oHamming = 16'ha83; 10'h34e: oHamming = 16'ha6f; 10'h34f: oHamming = 16'ha5a; 10'h350: oHamming = 16'ha46; 10'h351: oHamming = 16'ha32; 10'h352: oHamming = 16'ha1d; 10'h353: oHamming = 16'ha09; 10'h354: oHamming = 16'h9f5; 10'h355: oHamming = 16'h9e1; 10'h356: oHamming = 16'h9cd; 10'h357: oHamming = 16'h9b9; 10'h358: oHamming = 16'h9a5; 10'h359: oHamming = 16'h992; 10'h35a: oHamming = 16'h97e; 10'h35b: oHamming = 16'h96a; 10'h35c: oHamming = 16'h957; 10'h35d: oHamming = 16'h943; 10'h35e: oHamming = 16'h930; 10'h35f: oHamming = 16'h91d; 10'h360: oHamming = 16'h909; 10'h361: oHamming = 16'h8f6; 10'h362: oHamming = 16'h8e3; 10'h363: oHamming = 16'h8d0; 10'h364: oHamming = 16'h8bd; 10'h365: oHamming = 16'h8ab; 10'h366: oHamming = 16'h898; 10'h367: oHamming = 16'h885; 10'h368: oHamming = 16'h873;

Page 37: Speech Recognition

10'h369: oHamming = 16'h860; 10'h36a: oHamming = 16'h84e; 10'h36b: oHamming = 16'h83b; 10'h36c: oHamming = 16'h829; 10'h36d: oHamming = 16'h817; 10'h36e: oHamming = 16'h805; 10'h36f: oHamming = 16'h7f3; 10'h370: oHamming = 16'h7e1; 10'h371: oHamming = 16'h7cf; 10'h372: oHamming = 16'h7be; 10'h373: oHamming = 16'h7ac; 10'h374: oHamming = 16'h79b; 10'h375: oHamming = 16'h789; 10'h376: oHamming = 16'h778; 10'h377: oHamming = 16'h767; 10'h378: oHamming = 16'h756; 10'h379: oHamming = 16'h745; 10'h37a: oHamming = 16'h734; 10'h37b: oHamming = 16'h723; 10'h37c: oHamming = 16'h712; 10'h37d: oHamming = 16'h702; 10'h37e: oHamming = 16'h6f1; 10'h37f: oHamming = 16'h6e1; 10'h380: oHamming = 16'h6d0; 10'h381: oHamming = 16'h6c0; 10'h382: oHamming = 16'h6b0; 10'h383: oHamming = 16'h6a0; 10'h384: oHamming = 16'h690; 10'h385: oHamming = 16'h680; 10'h386: oHamming = 16'h670; 10'h387: oHamming = 16'h661; 10'h388: oHamming = 16'h651; 10'h389: oHamming = 16'h642; 10'h38a: oHamming = 16'h633; 10'h38b: oHamming = 16'h623; 10'h38c: oHamming = 16'h614; 10'h38d: oHamming = 16'h605; 10'h38e: oHamming = 16'h5f7; 10'h38f: oHamming = 16'h5e8; 10'h390: oHamming = 16'h5d9; 10'h391: oHamming = 16'h5cb; 10'h392: oHamming = 16'h5bc; 10'h393: oHamming = 16'h5ae; 10'h394: oHamming = 16'h5a0; 10'h395: oHamming = 16'h592; 10'h396: oHamming = 16'h584; 10'h397: oHamming = 16'h576; 10'h398: oHamming = 16'h568; 10'h399: oHamming = 16'h55a; 10'h39a: oHamming = 16'h54d; 10'h39b: oHamming = 16'h540; 10'h39c: oHamming = 16'h532; 10'h39d: oHamming = 16'h525; 10'h39e: oHamming = 16'h518; 10'h39f: oHamming = 16'h50b; 10'h3a0: oHamming = 16'h4fe; 10'h3a1: oHamming = 16'h4f2;

Page 38: Speech Recognition

10'h3a2: oHamming = 16'h4e5; 10'h3a3: oHamming = 16'h4d9; 10'h3a4: oHamming = 16'h4cc; 10'h3a5: oHamming = 16'h4c0; 10'h3a6: oHamming = 16'h4b4; 10'h3a7: oHamming = 16'h4a8; 10'h3a8: oHamming = 16'h49c; 10'h3a9: oHamming = 16'h490; 10'h3aa: oHamming = 16'h485; 10'h3ab: oHamming = 16'h479; 10'h3ac: oHamming = 16'h46e; 10'h3ad: oHamming = 16'h463; 10'h3ae: oHamming = 16'h458; 10'h3af: oHamming = 16'h44d; 10'h3b0: oHamming = 16'h442; 10'h3b1: oHamming = 16'h437; 10'h3b2: oHamming = 16'h42c; 10'h3b3: oHamming = 16'h422; 10'h3b4: oHamming = 16'h418; 10'h3b5: oHamming = 16'h40d; 10'h3b6: oHamming = 16'h403; 10'h3b7: oHamming = 16'h3f9; 10'h3b8: oHamming = 16'h3f0; 10'h3b9: oHamming = 16'h3e6; 10'h3ba: oHamming = 16'h3dc; 10'h3bb: oHamming = 16'h3d3; 10'h3bc: oHamming = 16'h3c9; 10'h3bd: oHamming = 16'h3c0; 10'h3be: oHamming = 16'h3b7; 10'h3bf: oHamming = 16'h3ae; 10'h3c0: oHamming = 16'h3a5; 10'h3c1: oHamming = 16'h39d; 10'h3c2: oHamming = 16'h394; 10'h3c3: oHamming = 16'h38c; 10'h3c4: oHamming = 16'h384; 10'h3c5: oHamming = 16'h37b; 10'h3c6: oHamming = 16'h373; 10'h3c7: oHamming = 16'h36c; 10'h3c8: oHamming = 16'h364; 10'h3c9: oHamming = 16'h35c; 10'h3ca: oHamming = 16'h355; 10'h3cb: oHamming = 16'h34d; 10'h3cc: oHamming = 16'h346; 10'h3cd: oHamming = 16'h33f; 10'h3ce: oHamming = 16'h338; 10'h3cf: oHamming = 16'h331; 10'h3d0: oHamming = 16'h32b; 10'h3d1: oHamming = 16'h324; 10'h3d2: oHamming = 16'h31e; 10'h3d3: oHamming = 16'h318; 10'h3d4: oHamming = 16'h312; 10'h3d5: oHamming = 16'h30c; 10'h3d6: oHamming = 16'h306; 10'h3d7: oHamming = 16'h300; 10'h3d8: oHamming = 16'h2fa; 10'h3d9: oHamming = 16'h2f5; 10'h3da: oHamming = 16'h2f0;

Page 39: Speech Recognition

10'h3db: oHamming = 16'h2eb; 10'h3dc: oHamming = 16'h2e6; 10'h3dd: oHamming = 16'h2e1; 10'h3de: oHamming = 16'h2dc; 10'h3df: oHamming = 16'h2d7; 10'h3e0: oHamming = 16'h2d3; 10'h3e1: oHamming = 16'h2cf; 10'h3e2: oHamming = 16'h2ca; 10'h3e3: oHamming = 16'h2c6; 10'h3e4: oHamming = 16'h2c3; 10'h3e5: oHamming = 16'h2bf; 10'h3e6: oHamming = 16'h2bb; 10'h3e7: oHamming = 16'h2b8; 10'h3e8: oHamming = 16'h2b4; 10'h3e9: oHamming = 16'h2b1; 10'h3ea: oHamming = 16'h2ae; 10'h3eb: oHamming = 16'h2ab; 10'h3ec: oHamming = 16'h2a8; 10'h3ed: oHamming = 16'h2a6; 10'h3ee: oHamming = 16'h2a3; 10'h3ef: oHamming = 16'h2a1; 10'h3f0: oHamming = 16'h29f; 10'h3f1: oHamming = 16'h29d; 10'h3f2: oHamming = 16'h29b; 10'h3f3: oHamming = 16'h299; 10'h3f4: oHamming = 16'h297; 10'h3f5: oHamming = 16'h296; 10'h3f6: oHamming = 16'h295; 10'h3f7: oHamming = 16'h293; 10'h3f8: oHamming = 16'h292; 10'h3f9: oHamming = 16'h291; 10'h3fa: oHamming = 16'h291; 10'h3fb: oHamming = 16'h290; 10'h3fc: oHamming = 16'h28f; 10'h3fd: oHamming = 16'h28f; 10'h3fe: oHamming = 16'h28f; 10'h3ff: oHamming = 16'h28f; endcaseend

endmodule

// Infer ROM storage for a hanning windowmodule hanningrom ( input [9:0] iAddress, output reg [15:0] oHanning);

always @ (iAddress)begin case (iAddress) 10'h00: oHanning = 16'h000; 10'h01: oHanning = 16'h000; 10'h02: oHanning = 16'h000; 10'h03: oHanning = 16'h001;

Page 40: Speech Recognition

10'h04: oHanning = 16'h001; 10'h05: oHanning = 16'h002; 10'h06: oHanning = 16'h003; 10'h07: oHanning = 16'h004; 10'h08: oHanning = 16'h006; 10'h09: oHanning = 16'h007; 10'h0a: oHanning = 16'h009; 10'h0b: oHanning = 16'h00b; 10'h0c: oHanning = 16'h00c; 10'h0d: oHanning = 16'h00f; 10'h0e: oHanning = 16'h011; 10'h0f: oHanning = 16'h013; 10'h10: oHanning = 16'h016; 10'h11: oHanning = 16'h018; 10'h12: oHanning = 16'h01b; 10'h13: oHanning = 16'h01e; 10'h14: oHanning = 16'h021; 10'h15: oHanning = 16'h025; 10'h16: oHanning = 16'h028; 10'h17: oHanning = 16'h02c; 10'h18: oHanning = 16'h030; 10'h19: oHanning = 16'h033; 10'h1a: oHanning = 16'h037; 10'h1b: oHanning = 16'h03c; 10'h1c: oHanning = 16'h040; 10'h1d: oHanning = 16'h045; 10'h1e: oHanning = 16'h049; 10'h1f: oHanning = 16'h04e; 10'h20: oHanning = 16'h053; 10'h21: oHanning = 16'h058; 10'h22: oHanning = 16'h05d; 10'h23: oHanning = 16'h063; 10'h24: oHanning = 16'h068; 10'h25: oHanning = 16'h06e; 10'h26: oHanning = 16'h074; 10'h27: oHanning = 16'h07a; 10'h28: oHanning = 16'h080; 10'h29: oHanning = 16'h087; 10'h2a: oHanning = 16'h08d; 10'h2b: oHanning = 16'h094; 10'h2c: oHanning = 16'h09a; 10'h2d: oHanning = 16'h0a1; 10'h2e: oHanning = 16'h0a8; 10'h2f: oHanning = 16'h0b0; 10'h30: oHanning = 16'h0b7; 10'h31: oHanning = 16'h0be; 10'h32: oHanning = 16'h0c6; 10'h33: oHanning = 16'h0ce; 10'h34: oHanning = 16'h0d6; 10'h35: oHanning = 16'h0de; 10'h36: oHanning = 16'h0e6; 10'h37: oHanning = 16'h0ee; 10'h38: oHanning = 16'h0f7; 10'h39: oHanning = 16'h100; 10'h3a: oHanning = 16'h108; 10'h3b: oHanning = 16'h111; 10'h3c: oHanning = 16'h11b;

Page 41: Speech Recognition

10'h3d: oHanning = 16'h124; 10'h3e: oHanning = 16'h12d; 10'h3f: oHanning = 16'h137; 10'h40: oHanning = 16'h140; 10'h41: oHanning = 16'h14a; 10'h42: oHanning = 16'h154; 10'h43: oHanning = 16'h15e; 10'h44: oHanning = 16'h168; 10'h45: oHanning = 16'h173; 10'h46: oHanning = 16'h17d; 10'h47: oHanning = 16'h188; 10'h48: oHanning = 16'h193; 10'h49: oHanning = 16'h19e; 10'h4a: oHanning = 16'h1a9; 10'h4b: oHanning = 16'h1b4; 10'h4c: oHanning = 16'h1bf; 10'h4d: oHanning = 16'h1cb; 10'h4e: oHanning = 16'h1d6; 10'h4f: oHanning = 16'h1e2; 10'h50: oHanning = 16'h1ee; 10'h51: oHanning = 16'h1fa; 10'h52: oHanning = 16'h206; 10'h53: oHanning = 16'h213; 10'h54: oHanning = 16'h21f; 10'h55: oHanning = 16'h22c; 10'h56: oHanning = 16'h238; 10'h57: oHanning = 16'h245; 10'h58: oHanning = 16'h252; 10'h59: oHanning = 16'h25f; 10'h5a: oHanning = 16'h26c; 10'h5b: oHanning = 16'h27a; 10'h5c: oHanning = 16'h287; 10'h5d: oHanning = 16'h295; 10'h5e: oHanning = 16'h2a3; 10'h5f: oHanning = 16'h2b0; 10'h60: oHanning = 16'h2be; 10'h61: oHanning = 16'h2cd; 10'h62: oHanning = 16'h2db; 10'h63: oHanning = 16'h2e9; 10'h64: oHanning = 16'h2f8; 10'h65: oHanning = 16'h306; 10'h66: oHanning = 16'h315; 10'h67: oHanning = 16'h324; 10'h68: oHanning = 16'h333; 10'h69: oHanning = 16'h342; 10'h6a: oHanning = 16'h351; 10'h6b: oHanning = 16'h361; 10'h6c: oHanning = 16'h370; 10'h6d: oHanning = 16'h380; 10'h6e: oHanning = 16'h390; 10'h6f: oHanning = 16'h3a0; 10'h70: oHanning = 16'h3af; 10'h71: oHanning = 16'h3c0; 10'h72: oHanning = 16'h3d0; 10'h73: oHanning = 16'h3e0; 10'h74: oHanning = 16'h3f1; 10'h75: oHanning = 16'h401;

Page 42: Speech Recognition

10'h76: oHanning = 16'h412; 10'h77: oHanning = 16'h423; 10'h78: oHanning = 16'h433; 10'h79: oHanning = 16'h445; 10'h7a: oHanning = 16'h456; 10'h7b: oHanning = 16'h467; 10'h7c: oHanning = 16'h478; 10'h7d: oHanning = 16'h48a; 10'h7e: oHanning = 16'h49b; 10'h7f: oHanning = 16'h4ad; 10'h80: oHanning = 16'h4bf; 10'h81: oHanning = 16'h4d1; 10'h82: oHanning = 16'h4e3; 10'h83: oHanning = 16'h4f5; 10'h84: oHanning = 16'h507; 10'h85: oHanning = 16'h519; 10'h86: oHanning = 16'h52c; 10'h87: oHanning = 16'h53e; 10'h88: oHanning = 16'h551; 10'h89: oHanning = 16'h564; 10'h8a: oHanning = 16'h577; 10'h8b: oHanning = 16'h58a; 10'h8c: oHanning = 16'h59d; 10'h8d: oHanning = 16'h5b0; 10'h8e: oHanning = 16'h5c3; 10'h8f: oHanning = 16'h5d6; 10'h90: oHanning = 16'h5ea; 10'h91: oHanning = 16'h5fd; 10'h92: oHanning = 16'h611; 10'h93: oHanning = 16'h625; 10'h94: oHanning = 16'h638; 10'h95: oHanning = 16'h64c; 10'h96: oHanning = 16'h660; 10'h97: oHanning = 16'h675; 10'h98: oHanning = 16'h689; 10'h99: oHanning = 16'h69d; 10'h9a: oHanning = 16'h6b1; 10'h9b: oHanning = 16'h6c6; 10'h9c: oHanning = 16'h6da; 10'h9d: oHanning = 16'h6ef; 10'h9e: oHanning = 16'h704; 10'h9f: oHanning = 16'h719; 10'ha0: oHanning = 16'h72e; 10'ha1: oHanning = 16'h743; 10'ha2: oHanning = 16'h758; 10'ha3: oHanning = 16'h76d; 10'ha4: oHanning = 16'h782; 10'ha5: oHanning = 16'h797; 10'ha6: oHanning = 16'h7ad; 10'ha7: oHanning = 16'h7c2; 10'ha8: oHanning = 16'h7d8; 10'ha9: oHanning = 16'h7ed; 10'haa: oHanning = 16'h803; 10'hab: oHanning = 16'h819; 10'hac: oHanning = 16'h82f; 10'had: oHanning = 16'h845; 10'hae: oHanning = 16'h85b;

Page 43: Speech Recognition

10'haf: oHanning = 16'h871; 10'hb0: oHanning = 16'h887; 10'hb1: oHanning = 16'h89d; 10'hb2: oHanning = 16'h8b4; 10'hb3: oHanning = 16'h8ca; 10'hb4: oHanning = 16'h8e0; 10'hb5: oHanning = 16'h8f7; 10'hb6: oHanning = 16'h90e; 10'hb7: oHanning = 16'h924; 10'hb8: oHanning = 16'h93b; 10'hb9: oHanning = 16'h952; 10'hba: oHanning = 16'h969; 10'hbb: oHanning = 16'h97f; 10'hbc: oHanning = 16'h996; 10'hbd: oHanning = 16'h9ad; 10'hbe: oHanning = 16'h9c5; 10'hbf: oHanning = 16'h9dc; 10'hc0: oHanning = 16'h9f3; 10'hc1: oHanning = 16'ha0a; 10'hc2: oHanning = 16'ha21; 10'hc3: oHanning = 16'ha39; 10'hc4: oHanning = 16'ha50; 10'hc5: oHanning = 16'ha68; 10'hc6: oHanning = 16'ha7f; 10'hc7: oHanning = 16'ha97; 10'hc8: oHanning = 16'haaf; 10'hc9: oHanning = 16'hac6; 10'hca: oHanning = 16'hade; 10'hcb: oHanning = 16'haf6; 10'hcc: oHanning = 16'hb0e; 10'hcd: oHanning = 16'hb26; 10'hce: oHanning = 16'hb3e; 10'hcf: oHanning = 16'hb56; 10'hd0: oHanning = 16'hb6e; 10'hd1: oHanning = 16'hb86; 10'hd2: oHanning = 16'hb9e; 10'hd3: oHanning = 16'hbb6; 10'hd4: oHanning = 16'hbce; 10'hd5: oHanning = 16'hbe6; 10'hd6: oHanning = 16'hbff; 10'hd7: oHanning = 16'hc17; 10'hd8: oHanning = 16'hc2f; 10'hd9: oHanning = 16'hc48; 10'hda: oHanning = 16'hc60; 10'hdb: oHanning = 16'hc79; 10'hdc: oHanning = 16'hc91; 10'hdd: oHanning = 16'hcaa; 10'hde: oHanning = 16'hcc2; 10'hdf: oHanning = 16'hcdb; 10'he0: oHanning = 16'hcf4; 10'he1: oHanning = 16'hd0c; 10'he2: oHanning = 16'hd25; 10'he3: oHanning = 16'hd3e; 10'he4: oHanning = 16'hd56; 10'he5: oHanning = 16'hd6f; 10'he6: oHanning = 16'hd88; 10'he7: oHanning = 16'hda1;

Page 44: Speech Recognition

10'he8: oHanning = 16'hdba; 10'he9: oHanning = 16'hdd3; 10'hea: oHanning = 16'hdeb; 10'heb: oHanning = 16'he04; 10'hec: oHanning = 16'he1d; 10'hed: oHanning = 16'he36; 10'hee: oHanning = 16'he4f; 10'hef: oHanning = 16'he68; 10'hf0: oHanning = 16'he81; 10'hf1: oHanning = 16'he9a; 10'hf2: oHanning = 16'heb3; 10'hf3: oHanning = 16'hecc; 10'hf4: oHanning = 16'hee5; 10'hf5: oHanning = 16'hefe; 10'hf6: oHanning = 16'hf17; 10'hf7: oHanning = 16'hf30; 10'hf8: oHanning = 16'hf4a; 10'hf9: oHanning = 16'hf63; 10'hfa: oHanning = 16'hf7c; 10'hfb: oHanning = 16'hf95; 10'hfc: oHanning = 16'hfae; 10'hfd: oHanning = 16'hfc7; 10'hfe: oHanning = 16'hfe0; 10'hff: oHanning = 16'hff9; 10'h100: oHanning = 16'h1012; 10'h101: oHanning = 16'h102b; 10'h102: oHanning = 16'h1045; 10'h103: oHanning = 16'h105e; 10'h104: oHanning = 16'h1077; 10'h105: oHanning = 16'h1090; 10'h106: oHanning = 16'h10a9; 10'h107: oHanning = 16'h10c2; 10'h108: oHanning = 16'h10db; 10'h109: oHanning = 16'h10f4; 10'h10a: oHanning = 16'h110d; 10'h10b: oHanning = 16'h1126; 10'h10c: oHanning = 16'h113f; 10'h10d: oHanning = 16'h1158; 10'h10e: oHanning = 16'h1171; 10'h10f: oHanning = 16'h118a; 10'h110: oHanning = 16'h11a3; 10'h111: oHanning = 16'h11bc; 10'h112: oHanning = 16'h11d5; 10'h113: oHanning = 16'h11ee; 10'h114: oHanning = 16'h1207; 10'h115: oHanning = 16'h1220; 10'h116: oHanning = 16'h1239; 10'h117: oHanning = 16'h1252; 10'h118: oHanning = 16'h126b; 10'h119: oHanning = 16'h1283; 10'h11a: oHanning = 16'h129c; 10'h11b: oHanning = 16'h12b5; 10'h11c: oHanning = 16'h12ce; 10'h11d: oHanning = 16'h12e6; 10'h11e: oHanning = 16'h12ff; 10'h11f: oHanning = 16'h1318; 10'h120: oHanning = 16'h1330;

Page 45: Speech Recognition

10'h121: oHanning = 16'h1349; 10'h122: oHanning = 16'h1361; 10'h123: oHanning = 16'h137a; 10'h124: oHanning = 16'h1392; 10'h125: oHanning = 16'h13ab; 10'h126: oHanning = 16'h13c3; 10'h127: oHanning = 16'h13dc; 10'h128: oHanning = 16'h13f4; 10'h129: oHanning = 16'h140c; 10'h12a: oHanning = 16'h1425; 10'h12b: oHanning = 16'h143d; 10'h12c: oHanning = 16'h1455; 10'h12d: oHanning = 16'h146d; 10'h12e: oHanning = 16'h1485; 10'h12f: oHanning = 16'h149d; 10'h130: oHanning = 16'h14b5; 10'h131: oHanning = 16'h14cd; 10'h132: oHanning = 16'h14e5; 10'h133: oHanning = 16'h14fd; 10'h134: oHanning = 16'h1515; 10'h135: oHanning = 16'h152d; 10'h136: oHanning = 16'h1545; 10'h137: oHanning = 16'h155c; 10'h138: oHanning = 16'h1574; 10'h139: oHanning = 16'h158b; 10'h13a: oHanning = 16'h15a3; 10'h13b: oHanning = 16'h15ba; 10'h13c: oHanning = 16'h15d2; 10'h13d: oHanning = 16'h15e9; 10'h13e: oHanning = 16'h1600; 10'h13f: oHanning = 16'h1618; 10'h140: oHanning = 16'h162f; 10'h141: oHanning = 16'h1646; 10'h142: oHanning = 16'h165d; 10'h143: oHanning = 16'h1674; 10'h144: oHanning = 16'h168b; 10'h145: oHanning = 16'h16a2; 10'h146: oHanning = 16'h16b9; 10'h147: oHanning = 16'h16cf; 10'h148: oHanning = 16'h16e6; 10'h149: oHanning = 16'h16fd; 10'h14a: oHanning = 16'h1713; 10'h14b: oHanning = 16'h172a; 10'h14c: oHanning = 16'h1740; 10'h14d: oHanning = 16'h1757; 10'h14e: oHanning = 16'h176d; 10'h14f: oHanning = 16'h1783; 10'h150: oHanning = 16'h1799; 10'h151: oHanning = 16'h17af; 10'h152: oHanning = 16'h17c5; 10'h153: oHanning = 16'h17db; 10'h154: oHanning = 16'h17f1; 10'h155: oHanning = 16'h1807; 10'h156: oHanning = 16'h181c; 10'h157: oHanning = 16'h1832; 10'h158: oHanning = 16'h1848; 10'h159: oHanning = 16'h185d;

Page 46: Speech Recognition

10'h15a: oHanning = 16'h1872; 10'h15b: oHanning = 16'h1888; 10'h15c: oHanning = 16'h189d; 10'h15d: oHanning = 16'h18b2; 10'h15e: oHanning = 16'h18c7; 10'h15f: oHanning = 16'h18dc; 10'h160: oHanning = 16'h18f1; 10'h161: oHanning = 16'h1906; 10'h162: oHanning = 16'h191a; 10'h163: oHanning = 16'h192f; 10'h164: oHanning = 16'h1943; 10'h165: oHanning = 16'h1958; 10'h166: oHanning = 16'h196c; 10'h167: oHanning = 16'h1980; 10'h168: oHanning = 16'h1995; 10'h169: oHanning = 16'h19a9; 10'h16a: oHanning = 16'h19bd; 10'h16b: oHanning = 16'h19d0; 10'h16c: oHanning = 16'h19e4; 10'h16d: oHanning = 16'h19f8; 10'h16e: oHanning = 16'h1a0c; 10'h16f: oHanning = 16'h1a1f; 10'h170: oHanning = 16'h1a32; 10'h171: oHanning = 16'h1a46; 10'h172: oHanning = 16'h1a59; 10'h173: oHanning = 16'h1a6c; 10'h174: oHanning = 16'h1a7f; 10'h175: oHanning = 16'h1a92; 10'h176: oHanning = 16'h1aa5; 10'h177: oHanning = 16'h1ab7; 10'h178: oHanning = 16'h1aca; 10'h179: oHanning = 16'h1adc; 10'h17a: oHanning = 16'h1aef; 10'h17b: oHanning = 16'h1b01; 10'h17c: oHanning = 16'h1b13; 10'h17d: oHanning = 16'h1b25; 10'h17e: oHanning = 16'h1b37; 10'h17f: oHanning = 16'h1b49; 10'h180: oHanning = 16'h1b5b; 10'h181: oHanning = 16'h1b6d; 10'h182: oHanning = 16'h1b7e; 10'h183: oHanning = 16'h1b8f; 10'h184: oHanning = 16'h1ba1; 10'h185: oHanning = 16'h1bb2; 10'h186: oHanning = 16'h1bc3; 10'h187: oHanning = 16'h1bd4; 10'h188: oHanning = 16'h1be5; 10'h189: oHanning = 16'h1bf6; 10'h18a: oHanning = 16'h1c06; 10'h18b: oHanning = 16'h1c17; 10'h18c: oHanning = 16'h1c27; 10'h18d: oHanning = 16'h1c37; 10'h18e: oHanning = 16'h1c47; 10'h18f: oHanning = 16'h1c58; 10'h190: oHanning = 16'h1c67; 10'h191: oHanning = 16'h1c77; 10'h192: oHanning = 16'h1c87;

Page 47: Speech Recognition

10'h193: oHanning = 16'h1c96; 10'h194: oHanning = 16'h1ca6; 10'h195: oHanning = 16'h1cb5; 10'h196: oHanning = 16'h1cc4; 10'h197: oHanning = 16'h1cd3; 10'h198: oHanning = 16'h1ce2; 10'h199: oHanning = 16'h1cf1; 10'h19a: oHanning = 16'h1d00; 10'h19b: oHanning = 16'h1d0f; 10'h19c: oHanning = 16'h1d1d; 10'h19d: oHanning = 16'h1d2b; 10'h19e: oHanning = 16'h1d39; 10'h19f: oHanning = 16'h1d48; 10'h1a0: oHanning = 16'h1d55; 10'h1a1: oHanning = 16'h1d63; 10'h1a2: oHanning = 16'h1d71; 10'h1a3: oHanning = 16'h1d7e; 10'h1a4: oHanning = 16'h1d8c; 10'h1a5: oHanning = 16'h1d99; 10'h1a6: oHanning = 16'h1da6; 10'h1a7: oHanning = 16'h1db3; 10'h1a8: oHanning = 16'h1dc0; 10'h1a9: oHanning = 16'h1dcd; 10'h1aa: oHanning = 16'h1dda; 10'h1ab: oHanning = 16'h1de6; 10'h1ac: oHanning = 16'h1df3; 10'h1ad: oHanning = 16'h1dff; 10'h1ae: oHanning = 16'h1e0b; 10'h1af: oHanning = 16'h1e17; 10'h1b0: oHanning = 16'h1e23; 10'h1b1: oHanning = 16'h1e2e; 10'h1b2: oHanning = 16'h1e3a; 10'h1b3: oHanning = 16'h1e45; 10'h1b4: oHanning = 16'h1e51; 10'h1b5: oHanning = 16'h1e5c; 10'h1b6: oHanning = 16'h1e67; 10'h1b7: oHanning = 16'h1e72; 10'h1b8: oHanning = 16'h1e7c; 10'h1b9: oHanning = 16'h1e87; 10'h1ba: oHanning = 16'h1e91; 10'h1bb: oHanning = 16'h1e9c; 10'h1bc: oHanning = 16'h1ea6; 10'h1bd: oHanning = 16'h1eb0; 10'h1be: oHanning = 16'h1eba; 10'h1bf: oHanning = 16'h1ec3; 10'h1c0: oHanning = 16'h1ecd; 10'h1c1: oHanning = 16'h1ed7; 10'h1c2: oHanning = 16'h1ee0; 10'h1c3: oHanning = 16'h1ee9; 10'h1c4: oHanning = 16'h1ef2; 10'h1c5: oHanning = 16'h1efb; 10'h1c6: oHanning = 16'h1f04; 10'h1c7: oHanning = 16'h1f0c; 10'h1c8: oHanning = 16'h1f15; 10'h1c9: oHanning = 16'h1f1d; 10'h1ca: oHanning = 16'h1f25; 10'h1cb: oHanning = 16'h1f2d;

Page 48: Speech Recognition

10'h1cc: oHanning = 16'h1f35; 10'h1cd: oHanning = 16'h1f3d; 10'h1ce: oHanning = 16'h1f44; 10'h1cf: oHanning = 16'h1f4c; 10'h1d0: oHanning = 16'h1f53; 10'h1d1: oHanning = 16'h1f5a; 10'h1d2: oHanning = 16'h1f61; 10'h1d3: oHanning = 16'h1f68; 10'h1d4: oHanning = 16'h1f6f; 10'h1d5: oHanning = 16'h1f75; 10'h1d6: oHanning = 16'h1f7c; 10'h1d7: oHanning = 16'h1f82; 10'h1d8: oHanning = 16'h1f88; 10'h1d9: oHanning = 16'h1f8e; 10'h1da: oHanning = 16'h1f94; 10'h1db: oHanning = 16'h1f99; 10'h1dc: oHanning = 16'h1f9f; 10'h1dd: oHanning = 16'h1fa4; 10'h1de: oHanning = 16'h1fa9; 10'h1df: oHanning = 16'h1fae; 10'h1e0: oHanning = 16'h1fb3; 10'h1e1: oHanning = 16'h1fb8; 10'h1e2: oHanning = 16'h1fbd; 10'h1e3: oHanning = 16'h1fc1; 10'h1e4: oHanning = 16'h1fc5; 10'h1e5: oHanning = 16'h1fca; 10'h1e6: oHanning = 16'h1fce; 10'h1e7: oHanning = 16'h1fd1; 10'h1e8: oHanning = 16'h1fd5; 10'h1e9: oHanning = 16'h1fd9; 10'h1ea: oHanning = 16'h1fdc; 10'h1eb: oHanning = 16'h1fdf; 10'h1ec: oHanning = 16'h1fe2; 10'h1ed: oHanning = 16'h1fe5; 10'h1ee: oHanning = 16'h1fe8; 10'h1ef: oHanning = 16'h1feb; 10'h1f0: oHanning = 16'h1fed; 10'h1f1: oHanning = 16'h1fef; 10'h1f2: oHanning = 16'h1ff1; 10'h1f3: oHanning = 16'h1ff3; 10'h1f4: oHanning = 16'h1ff5; 10'h1f5: oHanning = 16'h1ff7; 10'h1f6: oHanning = 16'h1ff9; 10'h1f7: oHanning = 16'h1ffa; 10'h1f8: oHanning = 16'h1ffb; 10'h1f9: oHanning = 16'h1ffc; 10'h1fa: oHanning = 16'h1ffd; 10'h1fb: oHanning = 16'h1ffe; 10'h1fc: oHanning = 16'h1fff; 10'h1fd: oHanning = 16'h1fff; 10'h1fe: oHanning = 16'h1fff; 10'h1ff: oHanning = 16'h1fff; 10'h200: oHanning = 16'h1fff; 10'h201: oHanning = 16'h1fff; 10'h202: oHanning = 16'h1fff; 10'h203: oHanning = 16'h1fff; 10'h204: oHanning = 16'h1ffe;

Page 49: Speech Recognition

10'h205: oHanning = 16'h1ffd; 10'h206: oHanning = 16'h1ffc; 10'h207: oHanning = 16'h1ffb; 10'h208: oHanning = 16'h1ffa; 10'h209: oHanning = 16'h1ff9; 10'h20a: oHanning = 16'h1ff7; 10'h20b: oHanning = 16'h1ff5; 10'h20c: oHanning = 16'h1ff3; 10'h20d: oHanning = 16'h1ff1; 10'h20e: oHanning = 16'h1fef; 10'h20f: oHanning = 16'h1fed; 10'h210: oHanning = 16'h1feb; 10'h211: oHanning = 16'h1fe8; 10'h212: oHanning = 16'h1fe5; 10'h213: oHanning = 16'h1fe2; 10'h214: oHanning = 16'h1fdf; 10'h215: oHanning = 16'h1fdc; 10'h216: oHanning = 16'h1fd9; 10'h217: oHanning = 16'h1fd5; 10'h218: oHanning = 16'h1fd1; 10'h219: oHanning = 16'h1fce; 10'h21a: oHanning = 16'h1fca; 10'h21b: oHanning = 16'h1fc5; 10'h21c: oHanning = 16'h1fc1; 10'h21d: oHanning = 16'h1fbd; 10'h21e: oHanning = 16'h1fb8; 10'h21f: oHanning = 16'h1fb3; 10'h220: oHanning = 16'h1fae; 10'h221: oHanning = 16'h1fa9; 10'h222: oHanning = 16'h1fa4; 10'h223: oHanning = 16'h1f9f; 10'h224: oHanning = 16'h1f99; 10'h225: oHanning = 16'h1f94; 10'h226: oHanning = 16'h1f8e; 10'h227: oHanning = 16'h1f88; 10'h228: oHanning = 16'h1f82; 10'h229: oHanning = 16'h1f7c; 10'h22a: oHanning = 16'h1f75; 10'h22b: oHanning = 16'h1f6f; 10'h22c: oHanning = 16'h1f68; 10'h22d: oHanning = 16'h1f61; 10'h22e: oHanning = 16'h1f5a; 10'h22f: oHanning = 16'h1f53; 10'h230: oHanning = 16'h1f4c; 10'h231: oHanning = 16'h1f44; 10'h232: oHanning = 16'h1f3d; 10'h233: oHanning = 16'h1f35; 10'h234: oHanning = 16'h1f2d; 10'h235: oHanning = 16'h1f25; 10'h236: oHanning = 16'h1f1d; 10'h237: oHanning = 16'h1f15; 10'h238: oHanning = 16'h1f0c; 10'h239: oHanning = 16'h1f04; 10'h23a: oHanning = 16'h1efb; 10'h23b: oHanning = 16'h1ef2; 10'h23c: oHanning = 16'h1ee9; 10'h23d: oHanning = 16'h1ee0;

Page 50: Speech Recognition

10'h23e: oHanning = 16'h1ed7; 10'h23f: oHanning = 16'h1ecd; 10'h240: oHanning = 16'h1ec3; 10'h241: oHanning = 16'h1eba; 10'h242: oHanning = 16'h1eb0; 10'h243: oHanning = 16'h1ea6; 10'h244: oHanning = 16'h1e9c; 10'h245: oHanning = 16'h1e91; 10'h246: oHanning = 16'h1e87; 10'h247: oHanning = 16'h1e7c; 10'h248: oHanning = 16'h1e72; 10'h249: oHanning = 16'h1e67; 10'h24a: oHanning = 16'h1e5c; 10'h24b: oHanning = 16'h1e51; 10'h24c: oHanning = 16'h1e45; 10'h24d: oHanning = 16'h1e3a; 10'h24e: oHanning = 16'h1e2e; 10'h24f: oHanning = 16'h1e23; 10'h250: oHanning = 16'h1e17; 10'h251: oHanning = 16'h1e0b; 10'h252: oHanning = 16'h1dff; 10'h253: oHanning = 16'h1df3; 10'h254: oHanning = 16'h1de6; 10'h255: oHanning = 16'h1dda; 10'h256: oHanning = 16'h1dcd; 10'h257: oHanning = 16'h1dc0; 10'h258: oHanning = 16'h1db3; 10'h259: oHanning = 16'h1da6; 10'h25a: oHanning = 16'h1d99; 10'h25b: oHanning = 16'h1d8c; 10'h25c: oHanning = 16'h1d7e; 10'h25d: oHanning = 16'h1d71; 10'h25e: oHanning = 16'h1d63; 10'h25f: oHanning = 16'h1d55; 10'h260: oHanning = 16'h1d48; 10'h261: oHanning = 16'h1d39; 10'h262: oHanning = 16'h1d2b; 10'h263: oHanning = 16'h1d1d; 10'h264: oHanning = 16'h1d0f; 10'h265: oHanning = 16'h1d00; 10'h266: oHanning = 16'h1cf1; 10'h267: oHanning = 16'h1ce2; 10'h268: oHanning = 16'h1cd3; 10'h269: oHanning = 16'h1cc4; 10'h26a: oHanning = 16'h1cb5; 10'h26b: oHanning = 16'h1ca6; 10'h26c: oHanning = 16'h1c96; 10'h26d: oHanning = 16'h1c87; 10'h26e: oHanning = 16'h1c77; 10'h26f: oHanning = 16'h1c67; 10'h270: oHanning = 16'h1c58; 10'h271: oHanning = 16'h1c47; 10'h272: oHanning = 16'h1c37; 10'h273: oHanning = 16'h1c27; 10'h274: oHanning = 16'h1c17; 10'h275: oHanning = 16'h1c06; 10'h276: oHanning = 16'h1bf6;

Page 51: Speech Recognition

10'h277: oHanning = 16'h1be5; 10'h278: oHanning = 16'h1bd4; 10'h279: oHanning = 16'h1bc3; 10'h27a: oHanning = 16'h1bb2; 10'h27b: oHanning = 16'h1ba1; 10'h27c: oHanning = 16'h1b8f; 10'h27d: oHanning = 16'h1b7e; 10'h27e: oHanning = 16'h1b6d; 10'h27f: oHanning = 16'h1b5b; 10'h280: oHanning = 16'h1b49; 10'h281: oHanning = 16'h1b37; 10'h282: oHanning = 16'h1b25; 10'h283: oHanning = 16'h1b13; 10'h284: oHanning = 16'h1b01; 10'h285: oHanning = 16'h1aef; 10'h286: oHanning = 16'h1adc; 10'h287: oHanning = 16'h1aca; 10'h288: oHanning = 16'h1ab7; 10'h289: oHanning = 16'h1aa5; 10'h28a: oHanning = 16'h1a92; 10'h28b: oHanning = 16'h1a7f; 10'h28c: oHanning = 16'h1a6c; 10'h28d: oHanning = 16'h1a59; 10'h28e: oHanning = 16'h1a46; 10'h28f: oHanning = 16'h1a32; 10'h290: oHanning = 16'h1a1f; 10'h291: oHanning = 16'h1a0c; 10'h292: oHanning = 16'h19f8; 10'h293: oHanning = 16'h19e4; 10'h294: oHanning = 16'h19d0; 10'h295: oHanning = 16'h19bd; 10'h296: oHanning = 16'h19a9; 10'h297: oHanning = 16'h1995; 10'h298: oHanning = 16'h1980; 10'h299: oHanning = 16'h196c; 10'h29a: oHanning = 16'h1958; 10'h29b: oHanning = 16'h1943; 10'h29c: oHanning = 16'h192f; 10'h29d: oHanning = 16'h191a; 10'h29e: oHanning = 16'h1906; 10'h29f: oHanning = 16'h18f1; 10'h2a0: oHanning = 16'h18dc; 10'h2a1: oHanning = 16'h18c7; 10'h2a2: oHanning = 16'h18b2; 10'h2a3: oHanning = 16'h189d; 10'h2a4: oHanning = 16'h1888; 10'h2a5: oHanning = 16'h1872; 10'h2a6: oHanning = 16'h185d; 10'h2a7: oHanning = 16'h1848; 10'h2a8: oHanning = 16'h1832; 10'h2a9: oHanning = 16'h181c; 10'h2aa: oHanning = 16'h1807; 10'h2ab: oHanning = 16'h17f1; 10'h2ac: oHanning = 16'h17db; 10'h2ad: oHanning = 16'h17c5; 10'h2ae: oHanning = 16'h17af; 10'h2af: oHanning = 16'h1799;

Page 52: Speech Recognition

10'h2b0: oHanning = 16'h1783; 10'h2b1: oHanning = 16'h176d; 10'h2b2: oHanning = 16'h1757; 10'h2b3: oHanning = 16'h1740; 10'h2b4: oHanning = 16'h172a; 10'h2b5: oHanning = 16'h1713; 10'h2b6: oHanning = 16'h16fd; 10'h2b7: oHanning = 16'h16e6; 10'h2b8: oHanning = 16'h16cf; 10'h2b9: oHanning = 16'h16b9; 10'h2ba: oHanning = 16'h16a2; 10'h2bb: oHanning = 16'h168b; 10'h2bc: oHanning = 16'h1674; 10'h2bd: oHanning = 16'h165d; 10'h2be: oHanning = 16'h1646; 10'h2bf: oHanning = 16'h162f; 10'h2c0: oHanning = 16'h1618; 10'h2c1: oHanning = 16'h1600; 10'h2c2: oHanning = 16'h15e9; 10'h2c3: oHanning = 16'h15d2; 10'h2c4: oHanning = 16'h15ba; 10'h2c5: oHanning = 16'h15a3; 10'h2c6: oHanning = 16'h158b; 10'h2c7: oHanning = 16'h1574; 10'h2c8: oHanning = 16'h155c; 10'h2c9: oHanning = 16'h1545; 10'h2ca: oHanning = 16'h152d; 10'h2cb: oHanning = 16'h1515; 10'h2cc: oHanning = 16'h14fd; 10'h2cd: oHanning = 16'h14e5; 10'h2ce: oHanning = 16'h14cd; 10'h2cf: oHanning = 16'h14b5; 10'h2d0: oHanning = 16'h149d; 10'h2d1: oHanning = 16'h1485; 10'h2d2: oHanning = 16'h146d; 10'h2d3: oHanning = 16'h1455; 10'h2d4: oHanning = 16'h143d; 10'h2d5: oHanning = 16'h1425; 10'h2d6: oHanning = 16'h140c; 10'h2d7: oHanning = 16'h13f4; 10'h2d8: oHanning = 16'h13dc; 10'h2d9: oHanning = 16'h13c3; 10'h2da: oHanning = 16'h13ab; 10'h2db: oHanning = 16'h1392; 10'h2dc: oHanning = 16'h137a; 10'h2dd: oHanning = 16'h1361; 10'h2de: oHanning = 16'h1349; 10'h2df: oHanning = 16'h1330; 10'h2e0: oHanning = 16'h1318; 10'h2e1: oHanning = 16'h12ff; 10'h2e2: oHanning = 16'h12e6; 10'h2e3: oHanning = 16'h12ce; 10'h2e4: oHanning = 16'h12b5; 10'h2e5: oHanning = 16'h129c; 10'h2e6: oHanning = 16'h1283; 10'h2e7: oHanning = 16'h126b; 10'h2e8: oHanning = 16'h1252;

Page 53: Speech Recognition

10'h2e9: oHanning = 16'h1239; 10'h2ea: oHanning = 16'h1220; 10'h2eb: oHanning = 16'h1207; 10'h2ec: oHanning = 16'h11ee; 10'h2ed: oHanning = 16'h11d5; 10'h2ee: oHanning = 16'h11bc; 10'h2ef: oHanning = 16'h11a3; 10'h2f0: oHanning = 16'h118a; 10'h2f1: oHanning = 16'h1171; 10'h2f2: oHanning = 16'h1158; 10'h2f3: oHanning = 16'h113f; 10'h2f4: oHanning = 16'h1126; 10'h2f5: oHanning = 16'h110d; 10'h2f6: oHanning = 16'h10f4; 10'h2f7: oHanning = 16'h10db; 10'h2f8: oHanning = 16'h10c2; 10'h2f9: oHanning = 16'h10a9; 10'h2fa: oHanning = 16'h1090; 10'h2fb: oHanning = 16'h1077; 10'h2fc: oHanning = 16'h105e; 10'h2fd: oHanning = 16'h1045; 10'h2fe: oHanning = 16'h102b; 10'h2ff: oHanning = 16'h1012; 10'h300: oHanning = 16'hff9; 10'h301: oHanning = 16'hfe0; 10'h302: oHanning = 16'hfc7; 10'h303: oHanning = 16'hfae; 10'h304: oHanning = 16'hf95; 10'h305: oHanning = 16'hf7c; 10'h306: oHanning = 16'hf63; 10'h307: oHanning = 16'hf4a; 10'h308: oHanning = 16'hf30; 10'h309: oHanning = 16'hf17; 10'h30a: oHanning = 16'hefe; 10'h30b: oHanning = 16'hee5; 10'h30c: oHanning = 16'hecc; 10'h30d: oHanning = 16'heb3; 10'h30e: oHanning = 16'he9a; 10'h30f: oHanning = 16'he81; 10'h310: oHanning = 16'he68; 10'h311: oHanning = 16'he4f; 10'h312: oHanning = 16'he36; 10'h313: oHanning = 16'he1d; 10'h314: oHanning = 16'he04; 10'h315: oHanning = 16'hdeb; 10'h316: oHanning = 16'hdd3; 10'h317: oHanning = 16'hdba; 10'h318: oHanning = 16'hda1; 10'h319: oHanning = 16'hd88; 10'h31a: oHanning = 16'hd6f; 10'h31b: oHanning = 16'hd56; 10'h31c: oHanning = 16'hd3e; 10'h31d: oHanning = 16'hd25; 10'h31e: oHanning = 16'hd0c; 10'h31f: oHanning = 16'hcf4; 10'h320: oHanning = 16'hcdb; 10'h321: oHanning = 16'hcc2;

Page 54: Speech Recognition

10'h322: oHanning = 16'hcaa; 10'h323: oHanning = 16'hc91; 10'h324: oHanning = 16'hc79; 10'h325: oHanning = 16'hc60; 10'h326: oHanning = 16'hc48; 10'h327: oHanning = 16'hc2f; 10'h328: oHanning = 16'hc17; 10'h329: oHanning = 16'hbff; 10'h32a: oHanning = 16'hbe6; 10'h32b: oHanning = 16'hbce; 10'h32c: oHanning = 16'hbb6; 10'h32d: oHanning = 16'hb9e; 10'h32e: oHanning = 16'hb86; 10'h32f: oHanning = 16'hb6e; 10'h330: oHanning = 16'hb56; 10'h331: oHanning = 16'hb3e; 10'h332: oHanning = 16'hb26; 10'h333: oHanning = 16'hb0e; 10'h334: oHanning = 16'haf6; 10'h335: oHanning = 16'hade; 10'h336: oHanning = 16'hac6; 10'h337: oHanning = 16'haaf; 10'h338: oHanning = 16'ha97; 10'h339: oHanning = 16'ha7f; 10'h33a: oHanning = 16'ha68; 10'h33b: oHanning = 16'ha50; 10'h33c: oHanning = 16'ha39; 10'h33d: oHanning = 16'ha21; 10'h33e: oHanning = 16'ha0a; 10'h33f: oHanning = 16'h9f3; 10'h340: oHanning = 16'h9dc; 10'h341: oHanning = 16'h9c5; 10'h342: oHanning = 16'h9ad; 10'h343: oHanning = 16'h996; 10'h344: oHanning = 16'h97f; 10'h345: oHanning = 16'h969; 10'h346: oHanning = 16'h952; 10'h347: oHanning = 16'h93b; 10'h348: oHanning = 16'h924; 10'h349: oHanning = 16'h90e; 10'h34a: oHanning = 16'h8f7; 10'h34b: oHanning = 16'h8e0; 10'h34c: oHanning = 16'h8ca; 10'h34d: oHanning = 16'h8b4; 10'h34e: oHanning = 16'h89d; 10'h34f: oHanning = 16'h887; 10'h350: oHanning = 16'h871; 10'h351: oHanning = 16'h85b; 10'h352: oHanning = 16'h845; 10'h353: oHanning = 16'h82f; 10'h354: oHanning = 16'h819; 10'h355: oHanning = 16'h803; 10'h356: oHanning = 16'h7ed; 10'h357: oHanning = 16'h7d8; 10'h358: oHanning = 16'h7c2; 10'h359: oHanning = 16'h7ad; 10'h35a: oHanning = 16'h797;

Page 55: Speech Recognition

10'h35b: oHanning = 16'h782; 10'h35c: oHanning = 16'h76d; 10'h35d: oHanning = 16'h758; 10'h35e: oHanning = 16'h743; 10'h35f: oHanning = 16'h72e; 10'h360: oHanning = 16'h719; 10'h361: oHanning = 16'h704; 10'h362: oHanning = 16'h6ef; 10'h363: oHanning = 16'h6da; 10'h364: oHanning = 16'h6c6; 10'h365: oHanning = 16'h6b1; 10'h366: oHanning = 16'h69d; 10'h367: oHanning = 16'h689; 10'h368: oHanning = 16'h675; 10'h369: oHanning = 16'h660; 10'h36a: oHanning = 16'h64c; 10'h36b: oHanning = 16'h638; 10'h36c: oHanning = 16'h625; 10'h36d: oHanning = 16'h611; 10'h36e: oHanning = 16'h5fd; 10'h36f: oHanning = 16'h5ea; 10'h370: oHanning = 16'h5d6; 10'h371: oHanning = 16'h5c3; 10'h372: oHanning = 16'h5b0; 10'h373: oHanning = 16'h59d; 10'h374: oHanning = 16'h58a; 10'h375: oHanning = 16'h577; 10'h376: oHanning = 16'h564; 10'h377: oHanning = 16'h551; 10'h378: oHanning = 16'h53e; 10'h379: oHanning = 16'h52c; 10'h37a: oHanning = 16'h519; 10'h37b: oHanning = 16'h507; 10'h37c: oHanning = 16'h4f5; 10'h37d: oHanning = 16'h4e3; 10'h37e: oHanning = 16'h4d1; 10'h37f: oHanning = 16'h4bf; 10'h380: oHanning = 16'h4ad; 10'h381: oHanning = 16'h49b; 10'h382: oHanning = 16'h48a; 10'h383: oHanning = 16'h478; 10'h384: oHanning = 16'h467; 10'h385: oHanning = 16'h456; 10'h386: oHanning = 16'h445; 10'h387: oHanning = 16'h433; 10'h388: oHanning = 16'h423; 10'h389: oHanning = 16'h412; 10'h38a: oHanning = 16'h401; 10'h38b: oHanning = 16'h3f1; 10'h38c: oHanning = 16'h3e0; 10'h38d: oHanning = 16'h3d0; 10'h38e: oHanning = 16'h3c0; 10'h38f: oHanning = 16'h3af; 10'h390: oHanning = 16'h3a0; 10'h391: oHanning = 16'h390; 10'h392: oHanning = 16'h380; 10'h393: oHanning = 16'h370;

Page 56: Speech Recognition

10'h394: oHanning = 16'h361; 10'h395: oHanning = 16'h351; 10'h396: oHanning = 16'h342; 10'h397: oHanning = 16'h333; 10'h398: oHanning = 16'h324; 10'h399: oHanning = 16'h315; 10'h39a: oHanning = 16'h306; 10'h39b: oHanning = 16'h2f8; 10'h39c: oHanning = 16'h2e9; 10'h39d: oHanning = 16'h2db; 10'h39e: oHanning = 16'h2cd; 10'h39f: oHanning = 16'h2be; 10'h3a0: oHanning = 16'h2b0; 10'h3a1: oHanning = 16'h2a3; 10'h3a2: oHanning = 16'h295; 10'h3a3: oHanning = 16'h287; 10'h3a4: oHanning = 16'h27a; 10'h3a5: oHanning = 16'h26c; 10'h3a6: oHanning = 16'h25f; 10'h3a7: oHanning = 16'h252; 10'h3a8: oHanning = 16'h245; 10'h3a9: oHanning = 16'h238; 10'h3aa: oHanning = 16'h22c; 10'h3ab: oHanning = 16'h21f; 10'h3ac: oHanning = 16'h213; 10'h3ad: oHanning = 16'h206; 10'h3ae: oHanning = 16'h1fa; 10'h3af: oHanning = 16'h1ee; 10'h3b0: oHanning = 16'h1e2; 10'h3b1: oHanning = 16'h1d6; 10'h3b2: oHanning = 16'h1cb; 10'h3b3: oHanning = 16'h1bf; 10'h3b4: oHanning = 16'h1b4; 10'h3b5: oHanning = 16'h1a9; 10'h3b6: oHanning = 16'h19e; 10'h3b7: oHanning = 16'h193; 10'h3b8: oHanning = 16'h188; 10'h3b9: oHanning = 16'h17d; 10'h3ba: oHanning = 16'h173; 10'h3bb: oHanning = 16'h168; 10'h3bc: oHanning = 16'h15e; 10'h3bd: oHanning = 16'h154; 10'h3be: oHanning = 16'h14a; 10'h3bf: oHanning = 16'h140; 10'h3c0: oHanning = 16'h137; 10'h3c1: oHanning = 16'h12d; 10'h3c2: oHanning = 16'h124; 10'h3c3: oHanning = 16'h11b; 10'h3c4: oHanning = 16'h111; 10'h3c5: oHanning = 16'h108; 10'h3c6: oHanning = 16'h100; 10'h3c7: oHanning = 16'h0f7; 10'h3c8: oHanning = 16'h0ee; 10'h3c9: oHanning = 16'h0e6; 10'h3ca: oHanning = 16'h0de; 10'h3cb: oHanning = 16'h0d6; 10'h3cc: oHanning = 16'h0ce;

Page 57: Speech Recognition

10'h3cd: oHanning = 16'h0c6; 10'h3ce: oHanning = 16'h0be; 10'h3cf: oHanning = 16'h0b7; 10'h3d0: oHanning = 16'h0b0; 10'h3d1: oHanning = 16'h0a8; 10'h3d2: oHanning = 16'h0a1; 10'h3d3: oHanning = 16'h09a; 10'h3d4: oHanning = 16'h094; 10'h3d5: oHanning = 16'h08d; 10'h3d6: oHanning = 16'h087; 10'h3d7: oHanning = 16'h080; 10'h3d8: oHanning = 16'h07a; 10'h3d9: oHanning = 16'h074; 10'h3da: oHanning = 16'h06e; 10'h3db: oHanning = 16'h068; 10'h3dc: oHanning = 16'h063; 10'h3dd: oHanning = 16'h05d; 10'h3de: oHanning = 16'h058; 10'h3df: oHanning = 16'h053; 10'h3e0: oHanning = 16'h04e; 10'h3e1: oHanning = 16'h049; 10'h3e2: oHanning = 16'h045; 10'h3e3: oHanning = 16'h040; 10'h3e4: oHanning = 16'h03c; 10'h3e5: oHanning = 16'h037; 10'h3e6: oHanning = 16'h033; 10'h3e7: oHanning = 16'h030; 10'h3e8: oHanning = 16'h02c; 10'h3e9: oHanning = 16'h028; 10'h3ea: oHanning = 16'h025; 10'h3eb: oHanning = 16'h021; 10'h3ec: oHanning = 16'h01e; 10'h3ed: oHanning = 16'h01b; 10'h3ee: oHanning = 16'h018; 10'h3ef: oHanning = 16'h016; 10'h3f0: oHanning = 16'h013; 10'h3f1: oHanning = 16'h011; 10'h3f2: oHanning = 16'h00f; 10'h3f3: oHanning = 16'h00c; 10'h3f4: oHanning = 16'h00b; 10'h3f5: oHanning = 16'h009; 10'h3f6: oHanning = 16'h007; 10'h3f7: oHanning = 16'h006; 10'h3f8: oHanning = 16'h004; 10'h3f9: oHanning = 16'h003; 10'h3fa: oHanning = 16'h002; 10'h3fb: oHanning = 16'h001; 10'h3fc: oHanning = 16'h001; 10'h3fd: oHanning = 16'h000; 10'h3fe: oHanning = 16'h000; 10'h3ff: oHanning = 16'h000; endcaseend

endmodule

Page 58: Speech Recognition

module I2C_AV_Config ( // Host Side input iCLK, input iRST_N, // I2C Side output I2C_SCLK, inout I2C_SDAT);

// Internal Registers/Wiresreg [15:0] mI2C_CLK_DIV;reg [23:0] mI2C_DATA;reg mI2C_CTRL_CLK;reg mI2C_GO;wire mI2C_END;wire mI2C_ACK;reg [15:0] LUT_DATA;reg [5:0] LUT_INDEX;reg [3:0] mSetup_ST;

// Clock Settingparameter CLK_Freq = 50000000; // 50 MHzparameter I2C_Freq = 20000; // 20 KHz// LUT Data Numberparameter LUT_SIZE = 13;// Audio Data Indexparameter Dummy_DATA = 0;parameter SET_LIN_L = 1;parameter SET_LIN_R = 2;parameter SET_HEAD_L = 3;parameter SET_HEAD_R = 4;parameter A_PATH_CTRL = 5;parameter D_PATH_CTRL = 6;parameter POWER_ON = 7;parameter SET_FORMAT = 8;parameter SAMPLE_CTRL = 9;parameter SET_ACTIVE = 10;// Video Data Indexparameter SET_VIDEO = 11;

///////////////////// I2C Control Clock ////////////////////////always@ (posedge iCLK or negedge iRST_N)begin if (!iRST_N) begin mI2C_CTRL_CLK <= 0; mI2C_CLK_DIV <= 0; end else begin if (mI2C_CLK_DIV < (CLK_Freq/I2C_Freq))

mI2C_CLK_DIV <= mI2C_CLK_DIV + 16'd1; else begin mI2C_CLK_DIV <= 0; mI2C_CTRL_CLK <= ~mI2C_CTRL_CLK; end

Page 59: Speech Recognition

endend

I2C_Controller u0 ( .CLOCK(mI2C_CTRL_CLK), // Controller Work Clock .I2C_SCLK(I2C_SCLK), // I2C CLOCK .I2C_SDAT(I2C_SDAT), // I2C DATA .I2C_DATA(mI2C_DATA), // DATA:[SLAVE_ADDR,SUB_ADDR,DATA] .GO(mI2C_GO), // GO transfor .END(mI2C_END), // END transfor .ACK(mI2C_ACK), // ACK .RESET(iRST_N)); ////////////////////// Config Control ////////////////////////////always@ (posedge mI2C_CTRL_CLK or negedge iRST_N)begin if(!iRST_N) begin LUT_INDEX <= 0; mSetup_ST <= 0; mI2C_GO <= 0; end else begin if(LUT_INDEX<LUT_SIZE) begin case (mSetup_ST) 0: begin if(LUT_INDEX<SET_VIDEO)

mI2C_DATA <= {8'h34,LUT_DATA}; else mI2C_DATA <= {8'h40,LUT_DATA}; mI2C_GO <= 1; mSetup_ST <= 1; end 1: begin if(mI2C_END) begin if(!mI2C_ACK)

mSetup_ST <= 2; else mSetup_ST <= 0; mI2C_GO <= 0; end end 2: begin LUT_INDEX <= LUT_INDEX + 6'd1; mSetup_ST <= 0; end endcase end endend

///////////////////// Config Data LUT //////////////////////////// Experimentation shows that high gain on input (1f) and unity gain

Page 60: Speech Recognition

// on output (79) yields overall unity gain (I don't know why)alwaysbegin case (LUT_INDEX) // Audio Config Data Dummy_DATA : LUT_DATA <= 16'h0000; SET_LIN_L : LUT_DATA <= 16'h001f; // Lline in - high gain SET_LIN_R : LUT_DATA <= 16'h021f; // Rline in - high gain SET_HEAD_L : LUT_DATA <= 16'h0479; // Lphone out - unity gain SET_HEAD_R : LUT_DATA <= 16'h0679; // Rphone out - unity gain A_PATH_CTRL : LUT_DATA <= 16'h0814; // Line->ADC, DAC on, no bypass or sidetone D_PATH_CTRL : LUT_DATA <= 16'h0A02; // deemph to 32kHz POWER_ON : LUT_DATA <= 16'h0C00; // all on SET_FORMAT : LUT_DATA <= 16'h0E01; // MSB first left-justified, slave mode SAMPLE_CTRL : LUT_DATA <= 16'h101A; // normal-mode, 384fs oversamp 16'h1002 (32KHz) SET_ACTIVE : LUT_DATA <= 16'h1201; // activate default: LUT_DATA <= 16'hxxxx; endcaseend

endmodule

--------------------------------------------------------------------// Copyright (c) 2005 by Terasic Technologies Inc. // --------------------------------------------------------------------//// Permission://// Terasic grants permission to use and modify this code for use// in synthesis for all Terasic Development Boards and Altrea Development // Kits made by Terasic. Other use of this code, including the selling // ,duplication, or modification of any portion is strictly prohibited.//// Disclaimer://// This VHDL or Verilog source code is intended as a design reference// which illustrates how these types of functions can be implemented.// It is the user's responsibility to verify their design for// consistency and functionality through the use of formal// verification methods. Terasic provides no warranty regarding the use // or functionality of this code.//// --------------------------------------------------------------------// // Terasic Technologies Inc// 356 Fu-Shin E. Rd Sec. 1. JhuBei City,// HsinChu County, Taiwan// 302//// web: http://www.terasic.com/// email: [email protected]//

Page 61: Speech Recognition

// --------------------------------------------------------------------//// Major Functions:i2c controller//// --------------------------------------------------------------------//// Revision History :// --------------------------------------------------------------------// Ver :| Author :| Mod. Date :| Changes Made:// V1.0 :| Joe Yang :| 05/07/10 :| Initial Revision// --------------------------------------------------------------------module I2C_Controller (

CLOCK,I2C_SCLK,//I2C CLOCK

I2C_SDAT,//I2C DATAI2C_DATA,//DATA:[SLAVE_ADDR,SUB_ADDR,DATA]GO, //GO transforEND, //END transfor W_R, //W_RACK, //ACKRESET,//TESTSD_COUNTER,SDO

);input CLOCK;input [23:0]I2C_DATA;input GO;input RESET;input W_R;

inout I2C_SDAT;output I2C_SCLK;output END;output ACK;

//TESToutput [5:0] SD_COUNTER;output SDO;

reg SDO;reg SCLK;reg END;reg [23:0]SD;reg [5:0]SD_COUNTER;

wire I2C_SCLK=SCLK | ( ((SD_COUNTER >= 6'd4) & (SD_COUNTER <=6'd30))? ~CLOCK :1'b0 );wire I2C_SDAT=SDO?1'bz:1'b0 ;

reg ACK1,ACK2,ACK3;wire ACK=ACK1 | ACK2 |ACK3;

//--I2C COUNTERalways @(negedge RESET or posedge CLOCK ) beginif (!RESET) SD_COUNTER=6'b111111;else begin

Page 62: Speech Recognition

if (GO==0) SD_COUNTER=0;else if (SD_COUNTER < 6'b111111) SD_COUNTER=SD_COUNTER+6'b1;

endend//----

always @(negedge RESET or posedge CLOCK ) beginif (!RESET) begin SCLK=1;SDO=1; ACK1=0;ACK2=0;ACK3=0; END=1; endelsecase (SD_COUNTER)

6'd0 : begin ACK1=0 ;ACK2=0 ;ACK3=0 ; END=0; SDO=1; SCLK=1;end//start6'd1 : begin SD=I2C_DATA;SDO=0;end6'd2 : SCLK=0;//SLAVE ADDR6'd3 : SDO=SD[23];6'd4 : SDO=SD[22];6'd5 : SDO=SD[21];6'd6 : SDO=SD[20];6'd7 : SDO=SD[19];6'd8 : SDO=SD[18];6'd9 : SDO=SD[17];6'd10 : SDO=SD[16];6'd11 : SDO=1'b1;//ACK

//SUB ADDR6'd12 : begin SDO=SD[15]; ACK1=I2C_SDAT; end6'd13 : SDO=SD[14];6'd14 : SDO=SD[13];6'd15 : SDO=SD[12];6'd16 : SDO=SD[11];6'd17 : SDO=SD[10];6'd18 : SDO=SD[9];6'd19 : SDO=SD[8];6'd20 : SDO=1'b1;//ACK

//DATA6'd21 : begin SDO=SD[7]; ACK2=I2C_SDAT; end6'd22 : SDO=SD[6];6'd23 : SDO=SD[5];6'd24 : SDO=SD[4];6'd25 : SDO=SD[3];6'd26 : SDO=SD[2];6'd27 : SDO=SD[1];6'd28 : SDO=SD[0];6'd29 : SDO=1'b1;//ACK

//stop 6'd30 : begin SDO=1'b0; SCLK=1'b0; ACK3=I2C_SDAT; end 6'd31 : SCLK=1'b1; 6'd32 : begin SDO=1'b1; END=1; end

endcaseend

Page 63: Speech Recognition

endmodule

module Reset_Delay(iCLK,oRESET);input iCLK;output reg oRESET;reg [19:0] Cont;

always@(posedge iCLK)begin

if(Cont!=20'hFFFFF)begin

Cont <= Cont+20'h00001;oRESET <= 1'b0;

endelseoRESET <= 1'b1;

end

endmodule