亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? firparamgen.cpp

?? 一個(gè)基于GPU運(yùn)算的FIR濾波器程序
?? CPP
字號(hào):
// FIRParamGen.cpp : Defines the entry point for the console application.
//

#include <math.h>
#include <stdio.h>	
#include <string.h>
#include <memory.h>
#include <stdlib.h>
#include <time.h>
#include <Share.h>



#include "stdafx.h"

#define PI			3.1415926535897932384626433
#define DEFFREQ		44100
#define DEFTAPS		16384		//must be even value. Freq/Taps = Filter Frequency accuracy.
#define DEFREDUCT	-200.0		//Default target reduction in dB.
#define DEFKISER	8
#define DEFLOW		100.0		//Default Low Freq
#define	DEFHIGH		1000.0		//Default High Freq

int		SampleFreq = 0;				//Sample Frequency. 44100/88200/48000/96000/176400/192000
int		Taps = 0;					//Filter Tap Length
int		alpha = 0;					//Kaiser Window Constant

int		TAPS_HALF;				//Variable but treated as constant in program
double	Pass_Freq_From = 0;			//Low Cut Freq. Frequency below this parameter is stopped.
double	Pass_Freq_To = 0;			//High Cut Freq. Frequency over this parameter is stopped.
		// If Pass_Freq_From = 0, Pass_Freq_To = 500,    it means  Low Pass Filter, Freq = 500Hz.
		// If Pass_Freq_From = 2000, Pass_Freq_To = 100000,   it means High Pass Filter, Freq = 2000Hz.
		// If Pass_Freq_From = 300, Pass_Freq_To = 3000, it means Band Pass Filter, 300 to 3000Hz.

double	EQFreqs[128];	// 128 EQ Points. Frequency.
double	EQGains[128];	// 128 EQ Gains. 

double	FreqResR[DEFTAPS];			//Freq Responce Real, Desired

double	Tempcoeff_r[DEFTAPS];	//Real,

double	Kwindow[DEFTAPS];		//Kaiser Window Parameter
double	FIRCoeff[DEFTAPS];		//Filter Coefficient

double	Freq[(DEFTAPS-1)/2];	//Result Responce:Frequency
double	Gain[(DEFTAPS-1)/2];	//Result Responce:Amplitude
double	Theta[(DEFTAPS-1)/2];	//Result Responce:Phase

void InitCoeffParams(void);	//0 Initialize for parameters
int ReadFreqs(_TCHAR*);		//Read desired Frequency
int ReadEQs(_TCHAR*);			//Read desired Room Correction EQ values
void CreateFres(void);		//Generate desired Frequency Responce
void CalcCoeffs(void);		//Generate FIR Coeffs by IDFT
void DoKaiser(int Taps, double alpha);	//Kaiser Window Function
void OutKaiser(_TCHAR*);
void OutCoeffs(_TCHAR*);		//Output FIR Coeff Parameter to File
void CalcFres(void);		//Calculate Frequency Responce
void OutFres(_TCHAR*);			//Output Frequency Responce to File
double Bessel(double alpha);//0 Bessel Function


int _tmain(int argc, _TCHAR* argv[])
{
	//Process arguments

	//Check Arguments Count
	if (argc != 9)
	{
		printf("requires 8 arguments.\n");
		printf("FIRParamGen Sample_Rate Taps Kaiser FreqFile EQFile FreqOutFile CoeffOutFile KaiserOutFile\n");
		printf("FIRParamGen 44100 8192 8 \"C:\\\\Temp\\\\Freq01.txt\" \"C:\\\\Temp\\\\EQ01.txt\" \"C:\\\\Temp\\\\Out_Freq01.txt\" \"C:\\\\Temp\\\\Out_Coeff01.txt\" \"C:\\\\Temp\\\\Out_Kaiser01.txt\" \n");
		return -1;
	}
	printf("FIRParamGen Start....\n");

	//get each arguments
	SampleFreq = _tstoi(argv[1]);
	switch(SampleFreq)
	{
	case 44100: 		break;
	case 48000: 		break;
	case 88200: 		break;
	case 96000: 		break;
	case 176400: 		break;
	case 192000: 		break;
	default:
		printf("Error:Unsupported Frequency, %dHz",SampleFreq);
		return -1;
	}
	printf("Sample Frequency    = %dHz\n",SampleFreq);

	Taps = _tstoi(argv[2]);
	switch(Taps)
	{
	case 512: 		break;
		printf("Warning:Unsupported Taps for WaveX, %d.",Taps);
	case 1024: 		break;
		printf("Warning:Unsupported Taps for WaveX, %d.",Taps);
	case 2048: 		break;
		printf("Warning:Unsupported Taps for WaveX, %d.",Taps);
	case 4096: 		break;
		printf("Warning:Unsupported Taps for WaveX, %d.",Taps);
	case 8192: 		break;
	printf("FIR TAPS            = %d\n",Taps);
	default:
		printf("Error:Unsupported Taps, %d 512*2^n, up to 8192.",Taps);
		return -1;
	}

	alpha = _tstoi(argv[3]);
	if ((alpha < 2) || (alpha > 16))
	{
		printf("Error:Unsupported alpha, alpha should be 2 to 16, %d\n",alpha);
		return -1;
	}
	printf("Kaiser Window alpha = %d\n",alpha);

	_TCHAR	FreqFile[256];
	wcsncpy_s(FreqFile, 256, argv[4], wcslen(argv[4]));
	_tprintf(L"Freq Parameter file = %s\n",FreqFile);

	_TCHAR	EQFile[256];
	wcsncpy_s(EQFile, 256, argv[5], wcslen(argv[5]));
	_tprintf(L"EQ   Parameter file = %s\n",EQFile);

	_TCHAR	OFreqFile[256];
	wcsncpy_s(OFreqFile, 256, argv[6], wcslen(argv[6]));
	_tprintf(L"Freq Output File    = %s\n",OFreqFile);

	_TCHAR	OCoeffFile[256];
	wcsncpy_s(OCoeffFile, 256, argv[7], wcslen(argv[7]));
	_tprintf(L"Coeff Output File   = %s\n",OCoeffFile);

	_TCHAR	OKaiserFile[256];
	wcsncpy_s(OKaiserFile, 256, argv[8], wcslen(argv[8]));
	_tprintf(L"Kaiser Output File  = %s\n",OKaiserFile);


	//Initialize to safety
	InitCoeffParams();

	int ret;
	ret = ReadFreqs(FreqFile);
	if(ret<0)
	{
		_tprintf(L"Error:Can not open Frequency Parameter File. %s\n",FreqFile);
		return -1;
	}
	_tprintf(L"Freq Low, High      = %f,%f\n",Pass_Freq_From,Pass_Freq_To);

	ret = ReadEQs(EQFile);
	if(ret<0)
	{
		_tprintf(L"Error:Can not open Equalizer Parameter File. %s\n",EQFile);
		return -1;
	}
	_tprintf(L"EQFreq[1],EQGain[1] = %f,%f\n",EQFreqs[1],EQGains[1]);


	_tprintf(L"Creating Frequency Response.\n");
	CreateFres();

	_tprintf(L"Calculating Coeffs.\n");
	CalcCoeffs();
	_tprintf(L"Applying Kaiser Window.\n");
	DoKaiser(Taps, alpha);
	_tprintf(L"Output Kaiser Window data.\n");
	OutKaiser(OKaiserFile);
	_tprintf(L"Output Coeffs data.\n");
	OutCoeffs(OCoeffFile);
	_tprintf(L"Calculating Freq Responce.\n");
	CalcFres();
	_tprintf(L"Output Freq Responce.\n");
	OutFres(OFreqFile);

	return 0;
}

void InitCoeffParams(void)
{

	int i;
	for(i = 0; i < DEFTAPS; i++ ) 
	{
		FIRCoeff[i] = 0.0;
	}
	if (SampleFreq == 0)
		SampleFreq = DEFFREQ;

	if (Taps == 0)
	{
		Taps = DEFTAPS;
		TAPS_HALF = (DEFTAPS - 1)/2;
	}
	else
	{
		TAPS_HALF = Taps/2;
	}

	if (alpha == 0)
	{
		alpha = DEFKISER;
	}

	Pass_Freq_From = DEFLOW;
	Pass_Freq_To = DEFHIGH;
	
	EQFreqs[0] = 0.0;
	EQGains[0] = 0.0;
	for(i = 1; i < 128; i++)
	{
		EQFreqs[i] = (double)SampleFreq;	//Fill by Max Freq
		EQGains[i] = 0.0;
	}
}

int ReadFreqs(_TCHAR* filename)
{
	FILE * f;
	if ((f = _wfsopen(filename,L"r",_SH_DENYWR)) != NULL)
	{
		fscanf_s(f, "%lf,%lf",&Pass_Freq_From,&Pass_Freq_To);
		fclose(f);
	}
	else
	{
		return -1;
	}
	return 0;
}


int ReadEQs(_TCHAR* filename)
{
	int i;
	FILE * f;
	if ((f = _wfsopen(filename,L"r",_SH_DENYWR)) != NULL)
	{
		i = 1;	//Keep EQFreqs[0] = 0
		while (!feof(f))
		{
			fscanf_s(f, "%lf,%lf",&EQFreqs[i],&EQGains[i]);
			i += 1;
			if ( i > 126) break;
		}
		fclose(f);	
	}
	else
	{
		return -1;
	}

	return 0;
}
void CreateFres(void)
{
	// gain = pow(10.0, desired_dB / 20.0);
	// There are folding at Fs/2. _____L~~~~~H_____|_____H'~~~L'____. |=Fs/2

	int i;
	double gain;

	for (i = 0; i < TAPS_HALF; i++)
	{
		double CurrentFreq = SampleFreq * (i + 1)/Taps;
		if (CurrentFreq < Pass_Freq_From)
		{
			//Stop Area 1
			gain = pow(10.0, DEFREDUCT / 20.0);
		}
		else if (CurrentFreq < Pass_Freq_To) 
		{
			//Pass Area 1
			//Initialize to 0 dB
			gain = pow(10.0, 0.0);

			//Find EQ freq and Value. If There are no EQ, all gains will be 0.
			for (int k = 0; k < 126; k++)
			{
				if ((EQFreqs[k] <= CurrentFreq) && (CurrentFreq < EQFreqs[k+1]))
				{
					//Linear interpolation
					gain = pow(10.0, (EQGains[k]+ (EQGains[k+1]-EQGains[k])*(CurrentFreq - EQFreqs[k])/(EQFreqs[k+1]-EQFreqs[k])) /20.0);
					break;
				}
			}
		}
		else if (CurrentFreq <= SampleFreq / 2)
		{
			//Stop Area 2
			gain = pow(10.0, DEFREDUCT / 20.0);
		}

		FreqResR[i] = gain;
	}
	for (i = TAPS_HALF; i < Taps; i++)
	{
		//Mirror Freq Responce
		FreqResR[i] = FreqResR[Taps - i];
	}

}
void OutFres(_TCHAR* filename)
{
	//PROTOTYPE: Output to File
	FILE * f;
	_wfopen_s(&f, filename, L"w");
	fprintf(f, "Freq[Hz],Gain[dB],Theta[rad]\n");
	for (int i = 0 ; i < TAPS_HALF; i++)
	{
		fprintf(f, "%6.1lf,%6.15lf,%10.15lf\n",Freq[i],Gain[i],Theta[i]);
	}
	fclose(f);

}

void CalcCoeffs(void)
{
	// Calculate Inverse DFT for desired Frequency Responces.
	// Result is Filter Coeffs (not windowed yet)
	int i,k;
	double omega;

	for (i = 0; i < Taps; i++) 
	{
		Tempcoeff_r[i] = 0.0;	//Initialize Coeffs to zero
		for (k = 0; k < Taps; k++) 
		{
			//Calculate Coeffs by sum up 0 to Tap Count
			omega = 2.0 * PI * k * i / Taps; 
			Tempcoeff_r[i] = Tempcoeff_r[i] + FreqResR[k] * cos(omega);
		}
	}
	for (i = 0; i < Taps; i++) 
	{
		Tempcoeff_r[i] = Tempcoeff_r[i] / Taps; 
	}
	//TempCoeff is starting from 0. should be shifted half taps.
	for (i = 0; i < TAPS_HALF; i++) 
	{
		FIRCoeff[i] = Tempcoeff_r[TAPS_HALF-i];
	}
	for (i = TAPS_HALF; i < 2*TAPS_HALF; i++) 
	{
		FIRCoeff[i] = Tempcoeff_r[i-TAPS_HALF];
	}
}

void DoKaiser(int Taps, double K_alpha)
{
	int i;
	double Numer, Denom;
	double center,Kg,Kd;
	
	Denom = Bessel(K_alpha);	

	center = (double)(Taps - 1)/2;
	for (i = 0; i < Taps; i++)
	{
		Kg = (i*1.0 - center) / center;		//Regulated Distance, -1 to 1
		Kd = (K_alpha * sqrt(1.0 - Kg*Kg));	//kaiser Distance
		Numer = Bessel(Kd);
		Kwindow[i] = Numer / Denom;
		//PROTOTYPE: Actually don't have to store each Kaiser Value.
	}

	for(i = 0; i < Taps; i++) 
	{
		FIRCoeff[i] = FIRCoeff[i] * Kwindow[i];
	}
}

void OutKaiser(_TCHAR* filename)
{
	//PROTOTYPE: Output to File
	FILE * f;
	_wfopen_s(&f, filename, L"w");
	for (int i = 0 ; i < Taps; i++)
	{
		fprintf(f, "%3.10lf\n",Kwindow[i]);
	}
	fclose(f);
}

double Bessel(double alpha)
{
	double delta = 1e-14;
	double BesselValue;
	double Term, k, F;
                                          
	k = 0.0;
	BesselValue = 0.0;
	F = 1.0;
	Term = 0.5;
	while( (Term < -delta) || ( delta < Term) )
	{
		k = k + 1.0;						// k = step 1,2,3,4,5
		F = F * ((alpha / 2)/k);			// f(k+1) = f(k)*(c/k),f(0)=1. c is alpha/2. c/k -> 0
		Term = F*F;							// Current term value
		BesselValue = BesselValue + Term;	// Sum(f(k)^2)
	}
	return BesselValue;
}

void OutCoeffs(_TCHAR* filename)
{
	//PROTOTYPE: Output to File
	FILE * f;
	_wfopen_s(&f, filename, L"w");
	for (int i = 0 ; i < Taps; i++)
	{
		fprintf(f, "%3.15lf\n",FIRCoeff[i]);
	}
	fclose(f);
}
void CalcFres(void)
{

	int i, k;
	double	omega;		//angular frequency
	double	Resp_Real;	//Frequency Responce, Real
	double	Resp_Image;	//Frequency Responce, imaginary
	double	AmpABS2;	//square of amplitude characteristic
	double	Resp_Phase;	//phase characteristic

	for(i = 0; i < TAPS_HALF; i++) 
	{
		//omega = 0 to 2Pi (rad)
		omega = (i / (Taps/360.0) * 2.0 * PI  ) / 360.0;

		//initialize
		Resp_Real = 0.00; 
		Resp_Image = 0.00;
		
		//accumulate for all TAP of FIR
		for(k =	0; k < Taps; k++) 
		{
			Resp_Real = Resp_Real + FIRCoeff[k] * cos(k * omega);
			Resp_Image = Resp_Image + FIRCoeff[k] * sin(k * omega);
		}
		//calculate square of amplitude characteristic
		AmpABS2 = Resp_Real * Resp_Real + Resp_Image * Resp_Image;

		//calculate phase characteristic
		if (Resp_Real != 0.0)
		{
			Resp_Phase = (-1) * atan(Resp_Image / Resp_Real);
		}
		else
		{
			Resp_Phase = (-1) * 0.5 * PI;
		}

		//get dB value for amplitude characteristic
		Gain[i] = 10 * log10(AmpABS2);
		Theta[i] = Resp_Phase;
		Freq[i] = SampleFreq / Taps * (i+1);
	}

}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产偷v国产偷v亚洲高清| 国产精品69久久久久水密桃| 亚洲另类春色校园小说| 日本一区二区三区久久久久久久久不 | 精品对白一区国产伦| 欧美一级生活片| 欧美一区二区在线免费播放| 4438成人网| 日韩亚洲欧美在线| 精品福利一区二区三区| 国产视频亚洲色图| 国产精品成人免费在线| 亚洲欧洲在线观看av| 亚洲男人都懂的| 午夜精品在线看| 久久精品国产999大香线蕉| 国产乱码精品一区二区三| 风间由美性色一区二区三区| 99国产精品久久久久久久久久| 色综合久久中文综合久久97| 日本乱人伦aⅴ精品| 欧美美女直播网站| 日韩欧美在线观看一区二区三区| 精品盗摄一区二区三区| 国产日产欧美一区二区视频| 中文字幕中文字幕一区二区 | 国产精品 欧美精品| av激情成人网| 欧美日韩大陆一区二区| 日韩精品一区二区三区老鸭窝| 久久综合色之久久综合| 国产精品乱码妇女bbbb| 一区二区三区免费| 久久成人免费电影| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 黄色小说综合网站| 成人免费观看男女羞羞视频| 欧美午夜片在线观看| 精品国产一区二区三区久久影院| 国产精品不卡视频| 日韩成人免费在线| 成人免费毛片高清视频| 5566中文字幕一区二区电影| 国产亚洲一区字幕| 亚洲国产成人va在线观看天堂| 麻豆精品一二三| 91原创在线视频| 日韩三级视频在线观看| 国产精品三级在线观看| 日韩精品乱码av一区二区| 风间由美一区二区av101| 欧美酷刑日本凌虐凌虐| 国产丝袜美腿一区二区三区| 亚洲成人免费影院| 成人午夜私人影院| 日韩欧美在线观看一区二区三区| 亚洲视频图片小说| 国产原创一区二区三区| 欧美三级蜜桃2在线观看| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲综合成人在线| 风流少妇一区二区| 日韩免费观看2025年上映的电影| 亚洲视频1区2区| 国产又黄又大久久| 欧美日韩aaa| 亚洲人成电影网站色mp4| 国产一区二区三区免费观看| 在线观看免费视频综合| 中文久久乱码一区二区| 激情综合色综合久久| 欧美日韩精品综合在线| 亚洲日本乱码在线观看| 国产传媒一区在线| 欧美不卡一区二区| 日日夜夜精品免费视频| 91蜜桃网址入口| 中文字幕乱码久久午夜不卡 | 国产美女在线观看一区| 欧美日韩中字一区| 亚洲男同性视频| aaa亚洲精品| 久久精品一区四区| 精品一区二区三区在线观看国产| 欧美一区二区三区色| 首页综合国产亚洲丝袜| 欧美在线观看视频在线| 亚洲人成网站色在线观看| 成人免费va视频| 国产欧美日产一区| 国产高清久久久久| 久久久99久久| 国产一区二区三区电影在线观看| 欧美一区三区二区| 天天色图综合网| 欧美日高清视频| 亚洲成a人v欧美综合天堂下载| 在线亚洲人成电影网站色www| 亚洲天堂精品视频| 91麻豆国产福利在线观看| 国产精品乱码一区二区三区软件 | 91视视频在线观看入口直接观看www | 色综合咪咪久久| 亚洲视频狠狠干| 91极品美女在线| 一区二区三区av电影 | 亚洲丝袜另类动漫二区| 99riav久久精品riav| 亚洲丝袜自拍清纯另类| 91九色最新地址| 午夜精品一区二区三区免费视频 | 欧美高清视频一二三区| 日韩精品色哟哟| 欧美一二三四区在线| 久久草av在线| 国产色婷婷亚洲99精品小说| 成人永久aaa| 亚洲天堂成人在线观看| 欧美亚男人的天堂| 免费在线看成人av| 国产午夜一区二区三区| 99国产一区二区三精品乱码| 一区二区三区四区在线播放| 欧美性大战久久久久久久| 免费在线观看视频一区| 国产亚洲欧美日韩日本| 91猫先生在线| 日韩av高清在线观看| 久久久噜噜噜久久中文字幕色伊伊| 国产成人精品影视| 亚洲另类一区二区| 欧美一卡在线观看| 成人免费视频视频| 亚洲国产成人tv| 久久久久久免费网| 91麻豆免费看| 免费国产亚洲视频| 国产精品国模大尺度视频| 精品污污网站免费看| 国模一区二区三区白浆| 亚洲欧美综合色| 欧美一区二区啪啪| 成人午夜免费视频| 亚洲va欧美va国产va天堂影院| 精品美女一区二区| 日本精品裸体写真集在线观看| 日本va欧美va瓶| 国产精品福利一区二区三区| 69堂成人精品免费视频| 成人三级在线视频| 青青草国产成人99久久| 亚洲欧洲日本在线| 精品免费国产一区二区三区四区| 99久精品国产| 麻豆精品新av中文字幕| 亚洲欧洲日韩av| 精品国产区一区| 在线免费不卡电影| 国产成人在线视频网址| 亚洲成a人v欧美综合天堂下载| 国产亚洲欧美日韩日本| 91精品国产综合久久香蕉的特点 | 欧美日韩亚洲丝袜制服| 国产成人欧美日韩在线电影| 亚洲成人久久影院| 中文字幕一区在线观看视频| 日韩欧美中文字幕精品| 91国内精品野花午夜精品 | 国产蜜臀av在线一区二区三区| 欧美日韩不卡在线| 91老师片黄在线观看| 国产精品18久久久久久vr| 日日欢夜夜爽一区| 夜夜嗨av一区二区三区中文字幕 | 日韩不卡在线观看日韩不卡视频| 国产精品久久久久久久蜜臀 | 久久66热偷产精品| 亚洲国产精品久久艾草纯爱| 国产精品亲子乱子伦xxxx裸| 日韩欧美成人午夜| 欧美肥妇毛茸茸| 欧洲国产伦久久久久久久| 成人一区二区三区在线观看| 裸体在线国模精品偷拍| 五月婷婷激情综合| 一区二区三区国产精品| 中文字幕视频一区| 中文字幕精品综合| 国产亚洲欧美中文| 国产亚洲综合性久久久影院| 精品国产免费视频| 精品国产一区二区三区久久影院 | 亚洲成人免费视频| 一区二区三区欧美日韩| 亚洲三级免费电影| 国产精品久久久久久亚洲毛片 | 日韩欧美一区在线| 欧美一区永久视频免费观看| 7777精品伊人久久久大香线蕉完整版| 色婷婷精品大视频在线蜜桃视频 |