def judge(mean_mag): low_exist = False # 判斷是否存在電話按鍵聲的低頻 high_exist = False # 判斷是否存在電話按鍵聲的低頻 fft = FFT(64, 3000, 34) magnitude = fft.magnitude() # 取得頻率強度 low_sum = sum(magnitude[13:22]) # 低頻區間的強度總和 high_sum = sum(magnitude[23:32]) # 高頻區間的強度總和 # 低頻與高頻平均強度是否大於環境頻率平均強度的1.4倍 if (low_sum / 9 > mean_mag * 1.5) and (high_sum / 9 > mean_mag * 1.5): for i in range(9): # 收集低頻區間連續兩個的頻率強度 low_conti = magnitude[13 + i] + magnitude[14 + i] # 收集高頻區間連續兩個的頻率強度 high_conti = magnitude[23 + i] + magnitude[21 + i] # 連續強度是否佔低頻區間的 30 %以上 if (low_conti > low_sum * 0.4): low_exist = True # 連續強度是否佔高頻區間的 30 %以上 if (high_conti > high_sum * 0.4): high_exist = True #確認出現電話按鍵聲, 執行 which_num 函式 if (low_exist == True) and (high_exist == True): occur = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # 重置儲存次數陣列 which_num(occur) break
if (low_sum / 9 > mean_mag * 1.5) and (high_sum / 9 > mean_mag * 1.5): for i in range(9): # 收集低頻區間連續兩個的頻率強度 low_conti = magnitude[13 + i] + magnitude[14 + i] # 收集高頻區間連續兩個的頻率強度 high_conti = magnitude[23 + i] + magnitude[21 + i] # 連續強度是否佔低頻區間的 30 %以上 if (low_conti > low_sum * 0.4): low_exist = True # 連續強度是否佔高頻區間的 30 %以上 if (high_conti > high_sum * 0.4): high_exist = True #確認出現電話按鍵聲, 執行 which_num 函式 if (low_exist == True) and (high_exist == True): occur = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # 重置儲存次數陣列 which_num(occur) break fft = FFT(64, 3000, 34) #將第 0 項、第 1 項頻率強度刪除 magnitude = fft.magnitude()[13:32] #將該次 FFT 的平均強度加入 mean_mag mean_mag = sum(magnitude) / len(magnitude) while True: judge(mean_mag)
from flag_fft import FFT import time #while True: fft = FFT(64, 4000, 34) # 建立 FFT 物件 #peak = fft.major_peak() # 判斷主頻率 #print(peak) for i in fft.magnitude(): print(i) time.sleep(0.1) # 等候 0.1 秒