用python实现滤波器_Gammatone 滤波器的 Python 代码实现

 

public class SubscribeActivity extends SherlockFragmentActivity implements

OnQueryTextListener, OnItemClickListener, OnItemLongClickListener {

private SearchView mSearchView;

private ListView mListView;

private SubscribeIndexAdapter mAdapter;

@Override

public void onCreate(Bundle savedInstanceState) {

//...

mAdapter = new SubscribeIndexAdapter(this, mSubcribeList);

mSearchView = (SearchView) findViewById(R.id.search_view);

mListView = mFooter.getListViewById(R.id.list_view);

mListView.setAdapter(mAdapter);

mListView.setTextFilterEnabled(true);

mListView.setOnItemClickListener(this);

mListView.setOnItemLongClickListener(this);

setupSearchView();

//...

}

private void setupSearchView() {

mSearchView.setIconifiedByDefault(false);

mSearchView.setOnQueryTextListener(this);

mSearchView.setSubmitButtonEnabled(false);

mSearchView.setQueryHint("搜索");

}

public boolean onQueryTextChange(String newText) {

if (TextUtils.isEmpty(newText)) {

mListView.clearTextFilter();

} else {

mListView.setFilterText(newText.toString());

}

return true;

}

public boolean onQueryTextSubmit(String query) {

return false;

}

}

public class SubscribeIndexAdapter extends BaseAdapter implements Filterable {

private LayoutInflater inflater;

private ArrayList mSubcribeList;

private MyFilter mFilter;

private ArrayList mOriginalValues;

private final Object mLock = new Object();

static class ViewHolder {

TextView textView;

ImageView imageView;

ImageView imageView2;

}

public SubscribeIndexAdapter(Context context,

ArrayList subcribeList) {

mSubcribeList = subcribeList;

inflater = LayoutInflater.from(context);

}

@Override

public int getCount() {

return mSubcribeList.size();

}

@Override

public Object getItem(int position) {

return mSubcribeList.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

//...

return convertView;

}

@Override

public Filter getFilter() {

if (mFilter == null) {

mFilter = new MyFilter();

}

return mFilter;

}

class MyFilter extends Filter {

@Override

protected FilterResults performFiltering(CharSequence prefix) {

FilterResults results = new FilterResults();

if (mOriginalValues == null) {

synchronized (mLock) {

mOriginalValues = new ArrayList(mSubcribeList);

}

}

if (prefix == null || prefix.length() == 0) {

synchronized (mLock) {

ArrayList list = new ArrayList(

mOriginalValues);

results.values = list;

results.count = list.size();

}

} else {

String prefixString = prefix.toString().toLowerCase();

final ArrayList values = mOriginalValues;

final int count = values.size();

final ArrayList newValues = new ArrayList(

count);

for (Subscribe value : values) {

String title = value.title.toLowerCase();

if (title.indexOf(prefixString) != -1) {

newValues.add(value);

}

}

results.values = newValues;

results.count = newValues.size();

}

return results;

}

@Override

protected void publishResults(CharSequence constraint,

FilterResults results) {

mSubcribeList = (ArrayList) results.values;

if (results.count > 0) {

notifyDataSetChanged();

} else {

notifyDataSetInvalidated();

}

}

}

}

原文:http://blog.csdn.net/bluebelfast/article/details/19545683

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 Python 实现代码实现Gammatone 滤波器进行归一化: ```python import numpy as np import math def gammatone_filterbank(fs, nfft, nfilts, flow, fhigh): # 计算频率向量 frequencies = np.linspace(0, fs / 2, nfft // 2 + 1) # 计算 Bark 频率向量 bark_frequencies = 13 * np.arctan(0.00076 * frequencies) + 3.5 * np.arctan(np.power(frequencies / 7500, 2)) # 确定滤波器中心的 Bark 频率 min_bark = 13 * np.arctan(0.00076 * flow) + 3.5 * np.arctan(np.power(flow / 7500, 2)) max_bark = 13 * np.arctan(0.00076 * fhigh) + 3.5 * np.arctan(np.power(fhigh / 7500, 2)) bark_centers = np.linspace(min_bark, max_bark, nfilts) # 计算滤波器中心频率对应的线性频率 linear_centers = 7500 * (np.exp(0.05 * bark_centers) - np.exp(-0.05 * bark_centers)) / (np.exp(0.05 * bark_centers) + np.exp(-0.05 * bark_centers)) # 计算每个滤波器的带宽 bandwidths = np.zeros(nfilts) bandwidths[1:nfilts - 1] = linear_centers[2:nfilts] - linear_centers[0:nfilts - 2] bandwidths[0] = linear_centers[1] - linear_centers[0] bandwidths[nfilts - 1] = linear_centers[nfilts - 1] - linear_centers[nfilts - 2] # 初始化 Gammatone 滤波器 gammatone_filters = np.zeros((nfilts, nfft // 2 + 1)) # 计算每个滤波器的系数 for i in range(nfilts): cf = linear_centers[i] b = bandwidths[i] # 计算 Gammatone 滤波器的系数 f = np.linspace(0, fs / 2, nfft // 2 + 1) gammatone_filters[i, :] = np.power((2 * np.pi * b), -0.5) * np.power((1j * 2 * np.pi * f + 2 * np.pi * b * cf), -1) * np.exp(-2 * np.pi * b * np.abs(1j * 2 * np.pi * f + 2 * np.pi * b * cf)) # 对每个滤波器进行归一化 for i in range(nfilts): # 计算当前滤波器的功率响应 filter_power = np.power(np.abs(gammatone_filters[i, :]), 2) # 计算当前滤波器的归一化系数 normalization_factor = np.sqrt(np.sum(filter_power)) # 对当前滤波器进行归一化 gammatone_filters[i, :] /= normalization_factor return gammatone_filters ``` 该函数接受以下参数: - `fs`:采样率。 - `nfft`:FFT 长度。 - `nfilts`:Gammatone 滤波器的数量。 - `flow` 和 `fhigh`:Gammatone 滤波器的频率范围。 该函数返回一个数,其中每一行表示一个 Gammatone 滤波器的频率响应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值