⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zp_decim.h

📁 音频信号降采样程序 支持48k->8k 24k->8k 8k->1k 的降采样.实现方法,先做低通滤波,再做采样点抽取.低通滤波起使用67点FIR,系数由matlab使用窗函数法生成
💻 H
字号:
// ZP_Decim.h: interface for the CZP_Decim class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_ZP_DECIM_H__A2C97332_5069_4A26_9972_78E436AAE1BA__INCLUDED_)
#define AFX_ZP_DECIM_H__A2C97332_5069_4A26_9972_78E436AAE1BA__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define h_length 67
#define FRM_LEN 4096//zhen长
#define FRM_LEN2 4096*8//zhen长
#define BUF_LEN 200//缓冲区长度
#define H1_Length 67//FIR_Window_fun_mathods.m wp=0.45*pi;ws=0.55*pi;
#define H2_Length 68//FIR_Window_fun_mathods.m wp=0.28*pi;ws=0.38*pi;

typedef struct 
{
char Riff[4];
unsigned long sizeOfFile;//标示文件的长度。
char WAVEfmt[8];
unsigned long sizeOfFmt;
unsigned short wFormatTag;//值等于1表示没有压缩,否则表示文件有压缩。
unsigned short nChannels;//表示文件是几个声道。
unsigned long nSamplesPerSec;//每秒钟的采样率。
unsigned long navgBytesPerSec;//每秒钟播放的比特数。
unsigned short nBlockAlign;//一桢的大小。
unsigned short nBitPerSample;//表示每个采样点进行多少比特量化。
char Cdata[4];
unsigned long sizeOfData;//标示文件一共有多少个数据。
}WAVEFILEFMT;



class CZP_Decim  
{
public:
	FILE *fpin,*fpout;
	WAVEFILEFMT input_headOfWave;
	int nx,ny;
	CZP_Decim();
	virtual ~CZP_Decim();
	BOOL Load( char *pszFilename );
	BOOL Write(char *pszFilename ,int w);
	void CZP_Decim_6_File(char *aInFlNm);//48k-->8k
	void CZP_Decim_8_File(char *aInFlNm);// 8k-->1k
	void CZP_Decim_3_File(char *aInFlNm);//24k-->8k
	void Cfix_head(char *aInFlNm);
	void C2to187(char *aInFlNm);
	int decimation_buffer_and_frame(double x[],int,double h[],int ,int,double y[],int, int *);
	int FIR(double x[],int ,double Trans[],int ,int ,double y[],int ,int *begin_dec_n);
};
#endif // !defined(AFX_ZP_DECIM_H__A2C97332_5069_4A26_9972_78E436AAE1BA__INCLUDED_)

/*
 WAVE文件格式说明表 


 偏移地址 字节数 数据类型 内 容  
文件头  
 00H 4  Char "RIFF"标志  
04H 4 int32 文件长度  
08H 4 Char "WAVE"标志  
0CH 4 Char "fmt"标志  
10H 4   过渡字节(不定)  
14H 2 int16 格式类别  
16H 2 int16 通道数  
18H 2 int16  采样率(每秒样本数),表示每个通道的播放速度  
1CH 4 int32 波形音频数据传送速率  
20H 2 int16 数据块的调整数(按字节算的)  
22H 2   每样本的数据位数  
24H 4 Char 数据标记符”data”  
28H 4 int32 语音数据的长度  

  解答: 

  将WAV文件格式定义为结构体WAVEFORMAT:  

typedef struct tagWaveFormat 
{  
 char cRiffFlag[4];  
 UIN32 SizeOfFile;  SizeOfFile=44+sizeOfData-8 = 36+sizeOfData;
 char cWaveFlag[4];  
 char cFmtFlag[4];  
 char cTransition[4];  
 UIN16 nFormatTag ;  
 UIN16 nChannels;  
 UIN16 nSamplesPerSec;  
 UIN32 nAvgBytesperSec;  
 UIN16 nBlockAlign;  
 UIN16 nBitNumPerSample;  
 char cDataFlag[4];  
 UIN16 sizeOfData;  

} WAVEFORMAT;  

*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -